WIP: Add UNIX socket support.
This commit is contained in:
parent
a093f741df
commit
a29e6f1cd6
|
@ -5,9 +5,13 @@
|
||||||
name: Test
|
name: Test
|
||||||
|
|
||||||
# The address and port to bind on.
|
# The address and port to bind on.
|
||||||
# address: "[::]"
|
address: "[::]"
|
||||||
port: 5000
|
port: 5000
|
||||||
|
|
||||||
|
# Alternatively, lurkcoin can bind on a UNIX domain socket.
|
||||||
|
# network_protocol: unix
|
||||||
|
# address: "/tmp/lurkcoin.sock"
|
||||||
|
|
||||||
# TLS (optional).
|
# TLS (optional).
|
||||||
tls:
|
tls:
|
||||||
enable: false
|
enable: false
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"lurkcoin"
|
"lurkcoin"
|
||||||
"lurkcoin/databases"
|
"lurkcoin/databases"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -35,6 +36,10 @@ type Config struct {
|
||||||
// the default server name for the v2 API.
|
// the default server name for the v2 API.
|
||||||
Name string `yaml:"name"`
|
Name string `yaml:"name"`
|
||||||
|
|
||||||
|
// The network protocol to use when binding to the socket. Defaults to
|
||||||
|
// "tcp", can be set to "unix" for example.
|
||||||
|
NetworkProtocol string `yaml:"network_protocol"`
|
||||||
|
|
||||||
// The address to bind to (optional) and port.
|
// The address to bind to (optional) and port.
|
||||||
Address string `yaml:"address"`
|
Address string `yaml:"address"`
|
||||||
Port uint16 `yaml:"port"`
|
Port uint16 `yaml:"port"`
|
||||||
|
@ -115,17 +120,45 @@ func StartServer(config *Config) {
|
||||||
|
|
||||||
router := MakeHTTPRouter(db, config)
|
router := MakeHTTPRouter(db, config)
|
||||||
|
|
||||||
address := fmt.Sprintf("%s:%d", config.Address, config.Port)
|
|
||||||
urlAddress := address
|
var address, networkProtocol, urlAddress string
|
||||||
if config.Address == "" {
|
switch config.NetworkProtocol {
|
||||||
urlAddress = "[::]" + urlAddress
|
case "", "tcp":
|
||||||
|
if config.Port == 0 {
|
||||||
|
address = config.Address
|
||||||
|
} else {
|
||||||
|
address = fmt.Sprintf("%s:%d", address, config.Port)
|
||||||
|
}
|
||||||
|
networkProtocol = "tcp"
|
||||||
|
urlAddress = address
|
||||||
|
if address != "" && address[0] == ':' {
|
||||||
|
urlAddress = "[::]" + urlAddress
|
||||||
|
}
|
||||||
|
case "unix":
|
||||||
|
address = config.Address
|
||||||
|
networkProtocol = "unix"
|
||||||
|
urlAddress = "unix:" + address + ":"
|
||||||
|
if config.Port != 0 {
|
||||||
|
log.Fatal("The port option is invalid with UNIX sockets.")
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
log.Fatalf("Unrecognised network protocol: %q", config.NetworkProtocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.TLS.Enable {
|
if config.TLS.Enable {
|
||||||
log.Printf("Starting server on https://%s/", urlAddress)
|
log.Printf("Starting server on https://%s/", urlAddress)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("Starting server on http://%s/", urlAddress)
|
log.Printf("Starting server on http://%s/", urlAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bind to the address
|
||||||
|
var ln net.Listener
|
||||||
|
ln, err = net.Listen(networkProtocol, address)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Switch to the logfile
|
||||||
if config.Logfile != "" {
|
if config.Logfile != "" {
|
||||||
f, err := os.OpenFile(
|
f, err := os.OpenFile(
|
||||||
config.Logfile,
|
config.Logfile,
|
||||||
|
@ -151,10 +184,11 @@ func StartServer(config *Config) {
|
||||||
server.SetKeepAlivesEnabled(false)
|
server.SetKeepAlivesEnabled(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Serve the webpage
|
||||||
if config.TLS.Enable {
|
if config.TLS.Enable {
|
||||||
err = server.ListenAndServeTLS(config.TLS.CertFile, config.TLS.KeyFile)
|
err = server.ServeTLS(ln, config.TLS.CertFile, config.TLS.KeyFile)
|
||||||
} else {
|
} else {
|
||||||
err = server.ListenAndServe()
|
err = server.Serve(ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
|
@ -35,7 +35,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const SYMBOL = "¤"
|
const SYMBOL = "¤"
|
||||||
const VERSION = "3.0.0"
|
const VERSION = "3.0.1 alpha"
|
||||||
|
|
||||||
// Note that public source code is required by the AGPL
|
// Note that public source code is required by the AGPL
|
||||||
const SOURCE_URL = "https://github.com/luk3yx/lurkcoin-core"
|
const SOURCE_URL = "https://github.com/luk3yx/lurkcoin-core"
|
||||||
|
|
Loading…
Reference in New Issue