[headless] upgrade to Javalin 3.5

This commit is contained in:
Torsten Grote
2019-10-07 10:56:42 -03:00
parent 52feabecbe
commit 6f153f14c7
20 changed files with 135 additions and 121 deletions

View File

@@ -8,10 +8,10 @@ import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator
import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK
import org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH
import org.briarproject.bramble.api.lifecycle.LifecycleManager
import java.lang.System.exit
import javax.annotation.concurrent.Immutable
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.system.exitProcess
interface BriarService {
fun start()
@@ -36,7 +36,7 @@ constructor(
?: throw UsageError("Could not get password. Is STDIN connected?")
if (!accountManager.signIn(password)) {
echo("Error: Password invalid")
exit(1)
exitProcess(1)
}
}
val dbKey = accountManager.databaseKey ?: throw AssertionError()

View File

@@ -2,14 +2,12 @@ package org.briarproject.briar.headless
import com.fasterxml.jackson.core.JsonParseException
import com.fasterxml.jackson.databind.ObjectMapper
import io.javalin.BadRequestResponse
import io.javalin.Context
import io.javalin.Javalin
import io.javalin.JavalinEvent.SERVER_START_FAILED
import io.javalin.JavalinEvent.SERVER_STOPPED
import io.javalin.NotFoundResponse
import io.javalin.apibuilder.ApiBuilder.*
import io.javalin.core.util.Header.AUTHORIZATION
import io.javalin.http.BadRequestResponse
import io.javalin.http.Context
import io.javalin.http.NotFoundResponse
import org.briarproject.bramble.api.contact.ContactId
import org.briarproject.briar.headless.blogs.BlogController
import org.briarproject.briar.headless.contact.ContactController
@@ -17,13 +15,13 @@ import org.briarproject.briar.headless.event.WebSocketController
import org.briarproject.briar.headless.forums.ForumController
import org.briarproject.briar.headless.messaging.MessagingController
import java.lang.Runtime.getRuntime
import java.lang.System.exit
import java.util.concurrent.atomic.AtomicBoolean
import java.util.logging.Level
import java.util.logging.Level.INFO
import java.util.logging.Logger.getLogger
import javax.annotation.concurrent.Immutable
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.system.exitProcess
@Immutable
@Singleton
@@ -45,21 +43,21 @@ constructor(
briarService.start()
getRuntime().addShutdownHook(Thread(this::stop))
val app = Javalin.create()
.port(port)
.disableStartupBanner()
.enableCaseSensitiveUrls()
.event(SERVER_START_FAILED) {serverStopped() }
.event(SERVER_STOPPED) { serverStopped() }
if (debug) app.enableDebugLogging()
app.accessManager { handler, ctx, _ ->
if (ctx.header(AUTHORIZATION) == "Bearer $authToken") {
handler.handle(ctx)
} else {
ctx.status(401).result("Unauthorized")
val app = Javalin.create { config ->
config.showJavalinBanner = false
config.accessManager { handler, ctx, _ ->
if (ctx.header(AUTHORIZATION) == "Bearer $authToken") {
handler.handle(ctx)
} else {
ctx.status(401).result("Unauthorized")
}
}
if (debug) config.enableDevLogging()
}.events {event ->
event.serverStartFailed { serverStopped() }
event.serverStopped { serverStopped() }
}
app.routes {
path("/v1") {
path("/contacts") {
@@ -95,31 +93,32 @@ constructor(
}
}
app.ws("/v1/ws") { ws ->
if (logger.isLoggable(Level.INFO)) ws.onConnect { session ->
logger.info("Received websocket connection from ${session.remoteAddress}")
if (logger.isLoggable(INFO)) ws.onConnect { ctx ->
logger.info("Received websocket connection from ${ctx.session.remoteAddress}")
logger.info("Waiting for authentication")
}
ws.onMessage { session, msg ->
if (msg == authToken && !webSocketController.sessions.contains(session)) {
ws.onMessage { ctx ->
val session = ctx.session
if (ctx.message() == authToken && !webSocketController.sessions.contains(ctx)) {
logger.info("Authenticated websocket session with ${session.remoteAddress}")
webSocketController.sessions.add(session)
webSocketController.sessions.add(ctx)
} else {
logger.info("Invalid message received: $msg")
logger.info("Invalid message received: ${ctx.message()}")
logger.info("Closing websocket connection with ${session.remoteAddress}")
session.close(1008, "Invalid Authentication Token")
}
}
ws.onClose { session, _, _ ->
logger.info("Removing websocket connection with ${session.remoteAddress}")
webSocketController.sessions.remove(session)
ws.onClose { ctx ->
logger.info("Removing websocket connection with ${ctx.session.remoteAddress}")
webSocketController.sessions.remove(ctx)
}
}
return app.start()
return app.start(port)
}
private fun serverStopped() {
stop()
exit(1)
exitProcess(1)
}
internal fun stop() {

View File

@@ -1,6 +1,6 @@
package org.briarproject.briar.headless.blogs
import io.javalin.Context
import io.javalin.http.Context
interface BlogController {

View File

@@ -1,8 +1,8 @@
package org.briarproject.briar.headless.blogs
import com.fasterxml.jackson.databind.ObjectMapper
import io.javalin.BadRequestResponse
import io.javalin.Context
import io.javalin.http.BadRequestResponse
import io.javalin.http.Context
import org.briarproject.bramble.api.identity.IdentityManager
import org.briarproject.bramble.api.system.Clock
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong

View File

@@ -1,6 +1,6 @@
package org.briarproject.briar.headless.contact
import io.javalin.Context
import io.javalin.http.Context
interface ContactController {

View File

@@ -1,9 +1,9 @@
package org.briarproject.briar.headless.contact
import com.fasterxml.jackson.databind.ObjectMapper
import io.javalin.BadRequestResponse
import io.javalin.Context
import io.javalin.NotFoundResponse
import io.javalin.http.BadRequestResponse
import io.javalin.http.Context
import io.javalin.http.NotFoundResponse
import org.briarproject.bramble.api.contact.ContactManager
import org.briarproject.bramble.api.contact.HandshakeLinkConstants.LINK_REGEX
import org.briarproject.bramble.api.contact.PendingContactId

View File

@@ -1,6 +1,6 @@
package org.briarproject.briar.headless.event
import io.javalin.websocket.WsSession
import io.javalin.websocket.WsContext
import org.briarproject.bramble.api.lifecycle.IoExecutor
import org.briarproject.briar.headless.json.JsonDict
import javax.annotation.concurrent.ThreadSafe
@@ -8,7 +8,7 @@ import javax.annotation.concurrent.ThreadSafe
@ThreadSafe
interface WebSocketController {
val sessions: MutableSet<WsSession>
val sessions: MutableSet<WsContext>
/**
* Sends an event to all open sessions using the [IoExecutor].

View File

@@ -1,7 +1,7 @@
package org.briarproject.briar.headless.event
import io.javalin.json.JavalinJson.toJson
import io.javalin.websocket.WsSession
import io.javalin.plugin.json.JavalinJson.toJson
import io.javalin.websocket.WsContext
import org.briarproject.bramble.api.lifecycle.IoExecutor
import org.briarproject.bramble.util.LogUtils.logException
import org.briarproject.briar.headless.json.JsonDict
@@ -23,7 +23,7 @@ constructor(@IoExecutor private val ioExecutor: Executor) : WebSocketController
private val logger = getLogger(WebSocketControllerImpl::javaClass.name)
override val sessions: MutableSet<WsSession> = ConcurrentHashMap.newKeySet<WsSession>()
override val sessions: MutableSet<WsContext> = ConcurrentHashMap.newKeySet<WsContext>()
override fun sendEvent(name: String, obj: JsonDict) {
val event = toJson(OutputEvent(name, obj))

View File

@@ -1,6 +1,6 @@
package org.briarproject.briar.headless.forums
import io.javalin.Context
import io.javalin.http.Context
interface ForumController {

View File

@@ -1,8 +1,8 @@
package org.briarproject.briar.headless.forums
import com.fasterxml.jackson.databind.ObjectMapper
import io.javalin.BadRequestResponse
import io.javalin.Context
import io.javalin.http.BadRequestResponse
import io.javalin.http.Context
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
import org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_NAME_LENGTH
import org.briarproject.briar.api.forum.ForumManager

View File

@@ -1,6 +1,6 @@
package org.briarproject.briar.headless.messaging
import io.javalin.Context
import io.javalin.http.Context
interface MessagingController {

View File

@@ -1,9 +1,9 @@
package org.briarproject.briar.headless.messaging
import com.fasterxml.jackson.databind.ObjectMapper
import io.javalin.BadRequestResponse
import io.javalin.Context
import io.javalin.NotFoundResponse
import io.javalin.http.BadRequestResponse
import io.javalin.http.Context
import io.javalin.http.NotFoundResponse
import org.briarproject.bramble.api.contact.Contact
import org.briarproject.bramble.api.contact.ContactId
import org.briarproject.bramble.api.contact.ContactManager