Skip to content

Commit

Permalink
Merge pull request #3 from walt-id/feat-configurable-bind-address
Browse files Browse the repository at this point in the history
Feat configurable bind address
  • Loading branch information
severinstampler authored Aug 10, 2021
2 parents f598d2d + 0eda6f3 commit 02a07b0
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 40 deletions.
31 changes: 22 additions & 9 deletions src/main/kotlin/id/walt/cli/ServeCommand.kt
Original file line number Diff line number Diff line change
@@ -1,29 +1,42 @@
package id.walt.cli

import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.multiple
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.int
import id.walt.signatory.SignatoryRestAPI
import id.walt.rest.RestAPI

class ServeCommand : CliktCommand(
name = "serve",
help = """Run the walt.id SSI KIT as RESTful service.
Runs the library as RESTful service and exposes following APIs:
Runs the library as RESTful service and exposes following APIs on the specified bind address (default: ${RestAPI.BIND_ADDRESS}):
- walt.id Core API at ${RestAPI.API_HOST}:${RestAPI.CORE_API_PORT}
- walt.id Core API at the specified API port (default: ${RestAPI.CORE_API_PORT})
- walt.id ESSIF API at ${RestAPI.API_HOST}:${RestAPI.ESSIF_API_PORT}
- walt.id ESSIF API at the specified ESSIF API port (default: ${RestAPI.ESSIF_API_PORT})
- walt.id Signatory API at ${RestAPI.API_HOST}:${SignatoryRestAPI.SIGNATORY_API_PORT}"""
- walt.id Signatory API at the specified Signatory API port (default: ${SignatoryRestAPI.SIGNATORY_API_PORT})
Additional API target servers can be specified using the -s option.
"""
) {
val apiPort: Int by option(help = "Core API port [${RestAPI.CORE_API_PORT}]", names = *arrayOf("-p", "--port")).int().default(RestAPI.CORE_API_PORT)
val essifPort: Int by option(help = "Essif API port [${RestAPI.ESSIF_API_PORT}]", names = *arrayOf("-e", "--essif-port")).int().default(RestAPI.ESSIF_API_PORT)
val signatoryPort: Int by option(help = "Signatory API port [${SignatoryRestAPI.SIGNATORY_API_PORT}]", names = *arrayOf("-s", "--signatory-port")).int().default(SignatoryRestAPI.SIGNATORY_API_PORT)
val bindAddress: String by option(help = "Bind address for API service [127.0.0.1]", names = *arrayOf("-b", "--bind-address")).default("127.0.0.1")
val apiTargetUrls: List<String> by option(help = "Additional API target urls for swagger UI, defaults to root context '/'", names = *arrayOf("-t", "--target-url")).multiple()

override fun run() {
RestAPI.start()
SignatoryRestAPI.start()
RestAPI.start(apiPort, essifPort, bindAddress, apiTargetUrls)
SignatoryRestAPI.start(signatoryPort, bindAddress, apiTargetUrls)

echo()
echo(" walt.id Core API:${RestAPI.coreApiUrl}")
echo(" walt.id ESSIF API: ${RestAPI.essifApiUrl}")
echo(" walt.id Signatory API: ${SignatoryRestAPI.signatoryApiUrl}")
echo(" walt.id Core API: http://${bindAddress}:${apiPort}")
echo(" walt.id ESSIF API: http://${bindAddress}:${essifPort}")
echo(" walt.id Signatory API: http://${bindAddress}:${signatoryPort}")
echo()
}
}
34 changes: 12 additions & 22 deletions src/main/kotlin/id/walt/rest/RestAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.beust.klaxon.Klaxon
import io.javalin.Javalin
import io.javalin.apibuilder.ApiBuilder.*
import io.javalin.core.util.RouteOverviewPlugin
import io.javalin.plugin.json.FromJsonMapper
import io.javalin.plugin.json.JavalinJson
import io.javalin.plugin.json.ToJsonMapper
import io.javalin.plugin.openapi.InitialConfigurationCreator
Expand All @@ -20,11 +19,6 @@ import io.swagger.v3.oas.models.OpenAPI
import io.swagger.v3.oas.models.info.Contact
import io.swagger.v3.oas.models.security.SecurityScheme
import io.swagger.v3.oas.models.servers.Server
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.Json
import kotlinx.serialization.serializer
import mu.KotlinLogging
import id.walt.Values

Expand All @@ -33,20 +27,18 @@ object RestAPI {
private val log = KotlinLogging.logger {}

val CORE_API_PORT = 7000
val API_HOST = "http://localhost"
val ESSIF_API_PORT = 7001
val BIND_ADDRESS = "127.0.0.1"

var coreApiUrl = ""
var essifApiUrl = ""

var coreApi: Javalin? = null
var essifApi: Javalin? = null

fun startCoreApi(port: Int = CORE_API_PORT) {
fun startCoreApi(port: Int = CORE_API_PORT, bindAddress: String = BIND_ADDRESS, apiTargetUrls: List<String> = listOf()) {
log.info("Starting LetTrust Wallet API ...\n")

coreApiUrl = "$API_HOST:$port"

coreApi = Javalin.create {

it.apply {
Expand All @@ -65,8 +57,8 @@ object RestAPI {
version = Values.version
}
servers = listOf(
Server().description("Local testing server").url(coreApiUrl),
Server().description("Walt").url("https://wallet-api.walt.id")
Server().url("/"),
*apiTargetUrls.map { Server().url(it) }.toTypedArray()
)
externalDocs {
description = "Walt Docs"
Expand Down Expand Up @@ -138,15 +130,13 @@ object RestAPI {
log.error(e.stackTraceToString())
ctx.json(ErrorResponse(e.message ?: " Unknown server error", 500))
ctx.status(500)
}.start(port)
}.start(bindAddress, port)
}

fun startEssifApi(port: Int = ESSIF_API_PORT) {
fun startEssifApi(port: Int = ESSIF_API_PORT, bindAddress: String = BIND_ADDRESS, apiTargetUrls: List<String> = listOf()) {

log.info("Starting Walt Essif API ...\n")

essifApiUrl = "$API_HOST:$port"

essifApi = Javalin.create {

it.apply {
Expand All @@ -165,8 +155,8 @@ object RestAPI {
version = Values.version
}
servers = listOf(
Server().description("Local testing server").url(essifApiUrl),
Server().description("Walt").url("https://essif-connector-api.walt.id")
Server().url("/"),
*apiTargetUrls.map { Server().url(it) }.toTypedArray()
)
externalDocs {
description = "Walt Docs"
Expand Down Expand Up @@ -270,12 +260,12 @@ object RestAPI {
log.error(e.stackTraceToString())
ctx.json(ErrorResponse(e.message ?: " Unknown application error", 500))
ctx.status(500)
}.start(port)
}.start(bindAddress, port)
}

fun start() {
startCoreApi()
startEssifApi()
fun start(apiPort: Int = CORE_API_PORT, essifPort: Int = ESSIF_API_PORT, bindAddress: String = BIND_ADDRESS, apiTargetUrls: List<String> = listOf()) {
startCoreApi(apiPort, bindAddress, apiTargetUrls)
startEssifApi(essifPort, bindAddress, apiTargetUrls)
}

fun stopCoreApi() = coreApi?.stop()
Expand Down
14 changes: 5 additions & 9 deletions src/main/kotlin/id/walt/signatory/SignatoryRestAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,14 @@ import id.walt.rest.RootController
object SignatoryRestAPI {

val SIGNATORY_API_PORT = 7002
val API_HOST = "http://localhost"
val BIND_ADDRESS = "127.0.0.1"
var signatoryApiUrl = ""

private val log = KotlinLogging.logger {}

var signatoryApi: Javalin? = null

fun start(port: Int = SIGNATORY_API_PORT) {

signatoryApiUrl = "$API_HOST:$port"

log.info("Starting walt.id Signatory API at $signatoryApiUrl \n")
fun start(port: Int = SIGNATORY_API_PORT, bindAddress: String = BIND_ADDRESS, apiTargetUrls: List<String> = listOf()) {

signatoryApi = Javalin.create {

Expand All @@ -56,8 +52,8 @@ object SignatoryRestAPI {
version = Values.version
}
servers = listOf(
Server().description("Local testing server").url(signatoryApiUrl),
Server().description("walt.id").url("https://signatory-api.walt.id")
Server().url("/"),
*apiTargetUrls.map { Server().url(it) }.toTypedArray()
)
externalDocs {
description = "walt.id Docs"
Expand Down Expand Up @@ -107,7 +103,7 @@ object SignatoryRestAPI {
log.error(e.stackTraceToString())
ctx.json(ErrorResponse(e.message ?: " Unknown server error", 500))
ctx.status(500)
}.start(port)
}.start(bindAddress, port)
}

fun stop() = signatoryApi?.stop()
Expand Down

0 comments on commit 02a07b0

Please sign in to comment.