mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-13 03:09:04 +01:00
[headless] upgrade to Javalin 3.5
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.briarproject.briar.headless.blogs
|
||||
|
||||
import io.javalin.Context
|
||||
import io.javalin.http.Context
|
||||
|
||||
interface BlogController {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.briarproject.briar.headless.contact
|
||||
|
||||
import io.javalin.Context
|
||||
import io.javalin.http.Context
|
||||
|
||||
interface ContactController {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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].
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.briarproject.briar.headless.forums
|
||||
|
||||
import io.javalin.Context
|
||||
import io.javalin.http.Context
|
||||
|
||||
interface ForumController {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.briarproject.briar.headless.messaging
|
||||
|
||||
import io.javalin.Context
|
||||
import io.javalin.http.Context
|
||||
|
||||
interface MessagingController {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user