2015-10-24 19:59:34 -07:00
package main // import "bitbucket.org/stendec/frankerfacez/socketserver/cmd/socketserver"
import (
"flag"
"log"
"net/http"
2015-10-25 12:40:07 -07:00
"../../internal/server"
2015-10-24 19:59:34 -07:00
)
var origin * string = flag . String ( "origin" , "localhost:8001" , "Client-visible origin of the socket server" )
var bindAddress * string = flag . String ( "listen" , "" , "Address to bind to, if different from origin" )
2015-10-25 03:21:50 -07:00
var usessl * bool = flag . Bool ( "ssl" , false , "Enable the use of SSL for connecting clients and backend connections" )
var certificateFile * string = flag . String ( "crt" , "ssl.crt" , "CA-signed SSL certificate file" )
var privateKeyFile * string = flag . String ( "key" , "ssl.key" , "SSL private key file" )
2015-10-25 12:40:07 -07:00
var naclKeysFile * string = flag . String ( "naclkey" , "naclkeys.json" , "Keypairs for the NaCl crypto library, for communicating with the backend." )
var generateKeys * bool = flag . Bool ( "genkeys" , false , "Generate NaCl keys instead of serving requests.\nArguments: [int serverId] [base64 backendPublic]\nThe backend public key can either be specified in base64 on the command line, or put in the json file later." )
2015-10-24 19:59:34 -07:00
func main ( ) {
flag . Parse ( )
2015-10-25 12:40:07 -07:00
if * generateKeys {
GenerateKeys ( * naclKeysFile )
return
}
2015-10-24 19:59:34 -07:00
if * origin == "" {
log . Fatalln ( "--origin argument required" )
}
if * bindAddress == "" {
bindAddress = origin
}
if ( * certificateFile == "" ) != ( * privateKeyFile == "" ) {
log . Fatalln ( "Either both --crt and --key can be provided, or neither." )
}
2015-10-25 00:44:25 -07:00
conf := & server . Config {
2015-10-24 19:59:34 -07:00
SSLKeyFile : * privateKeyFile ,
SSLCertificateFile : * certificateFile ,
2015-10-25 12:40:07 -07:00
UseSSL : * usessl ,
NaclKeysFile : * naclKeysFile ,
2015-10-24 19:59:34 -07:00
2015-10-25 00:44:25 -07:00
SocketOrigin : * origin ,
2015-10-24 19:59:34 -07:00
}
2015-10-25 03:21:50 -07:00
httpServer := & http . Server {
2015-10-25 12:40:07 -07:00
Addr : * bindAddress ,
2015-10-25 03:21:50 -07:00
}
2015-10-25 20:17:17 -07:00
server . SetupServerAndHandle ( conf , httpServer . TLSConfig , nil )
2015-10-24 19:59:34 -07:00
var err error
if conf . UseSSL {
2015-10-25 12:40:07 -07:00
err = httpServer . ListenAndServeTLS ( * certificateFile , * privateKeyFile )
2015-10-24 19:59:34 -07:00
} else {
2015-10-25 03:21:50 -07:00
err = httpServer . ListenAndServe ( )
2015-10-24 19:59:34 -07:00
}
if err != nil {
log . Fatal ( "ListenAndServe: " , err )
}
}
2015-10-25 12:40:07 -07:00
func GenerateKeys ( outputFile string ) {
if flag . NArg ( ) < 1 {
log . Fatal ( "The server ID must be specified" )
}
if flag . NArg ( ) >= 2 {
server . GenerateKeys ( outputFile , flag . Arg ( 0 ) , flag . Arg ( 1 ) )
} else {
server . GenerateKeys ( outputFile , flag . Arg ( 0 ) , "" )
}
}