Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat configurable bind address #3

Merged
merged 2 commits into from
Aug 10, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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