mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-05-12 05:19:33 +00:00
* any port set to 0 on conf results in a random port bound * Debug API MyBoundPorts reports actually bound ports for all services, reports 0 if disabled * write back bound values to both WakuConf and WakuNode.ports * setupDiscoveryV5 returns Result and errors out on port 0 * rename setupAndStartDiscv5WithAutoPort to setupAndStartDiscv5 * updateWaku ENR rebuild now runs after discv5 startup * Add DefaultP2pTcpPort, DefaultDiscv5UdpPort, DefaultWebSocketPort, DefaultRestPort, DefaultMetricsHttpPort * add tests
71 lines
2.0 KiB
Nim
71 lines
2.0 KiB
Nim
import chronicles, std/[net, options], results
|
|
import waku/factory/waku_conf
|
|
|
|
logScope:
|
|
topics = "waku conf builder websocket"
|
|
|
|
const DefaultWebSocketPort*: Port = Port(8000)
|
|
|
|
##############################
|
|
## WebSocket Config Builder ##
|
|
##############################
|
|
type WebSocketConfBuilder* = object
|
|
enabled*: Option[bool]
|
|
webSocketPort*: Option[Port]
|
|
secureEnabled*: Option[bool]
|
|
keyPath*: Option[string]
|
|
certPath*: Option[string]
|
|
|
|
proc init*(T: type WebSocketConfBuilder): WebSocketConfBuilder =
|
|
WebSocketConfBuilder()
|
|
|
|
proc withEnabled*(b: var WebSocketConfBuilder, enabled: bool) =
|
|
b.enabled = some(enabled)
|
|
|
|
proc withSecureEnabled*(b: var WebSocketConfBuilder, secureEnabled: bool) =
|
|
b.secureEnabled = some(secureEnabled)
|
|
if b.secureEnabled.get():
|
|
b.enabled = some(true) # ws must be enabled to use wss
|
|
|
|
proc withWebSocketPort*(b: var WebSocketConfBuilder, webSocketPort: Port) =
|
|
b.webSocketPort = some(webSocketPort)
|
|
|
|
proc withWebSocketPort*(b: var WebSocketConfBuilder, webSocketPort: uint16) =
|
|
b.webSocketPort = some(Port(webSocketPort))
|
|
|
|
proc withKeyPath*(b: var WebSocketConfBuilder, keyPath: string) =
|
|
b.keyPath = some(keyPath)
|
|
|
|
proc withCertPath*(b: var WebSocketConfBuilder, certPath: string) =
|
|
b.certPath = some(certPath)
|
|
|
|
proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] =
|
|
if not b.enabled.get(false):
|
|
return ok(none(WebSocketConf))
|
|
|
|
if not b.secureEnabled.get(false):
|
|
return ok(
|
|
some(
|
|
WebSocketConf(
|
|
port: b.webSocketPort.get(DefaultWebSocketPort),
|
|
secureConf: none(WebSocketSecureConf),
|
|
)
|
|
)
|
|
)
|
|
|
|
if b.keyPath.get("") == "":
|
|
return err("WebSocketSecure enabled but key path is not specified")
|
|
if b.certPath.get("") == "":
|
|
return err("WebSocketSecure enabled but cert path is not specified")
|
|
|
|
return ok(
|
|
some(
|
|
WebSocketConf(
|
|
port: b.webSocketPort.get(DefaultWebSocketPort),
|
|
secureConf: some(
|
|
WebSocketSecureConf(keyPath: b.keyPath.get(), certPath: b.certPath.get())
|
|
),
|
|
)
|
|
)
|
|
)
|