2015-10-24 19:59:34 -07:00
package main // import "bitbucket.org/stendec/frankerfacez/socketserver/cmd/socketserver"
import (
2015-10-26 10:06:45 -07:00
"../../internal/server"
2015-10-26 22:16:03 -07:00
"encoding/json"
2015-10-24 19:59:34 -07:00
"flag"
2015-10-26 22:16:03 -07:00
"fmt"
"io/ioutil"
2015-10-24 19:59:34 -07:00
"log"
"net/http"
2015-10-26 22:16:03 -07:00
"os"
2015-10-24 19:59:34 -07:00
)
2015-10-26 22:16:03 -07:00
var configFilename * string = flag . String ( "config" , "config.json" , "Configuration file, including the keypairs for the NaCl crypto library, for communicating with the backend." )
2015-10-25 12:40:07 -07:00
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 {
2015-10-26 22:16:03 -07:00
GenerateKeys ( * configFilename )
2015-10-25 12:40:07 -07:00
return
}
2015-10-26 22:16:03 -07:00
confFile , err := os . Open ( * configFilename )
if os . IsNotExist ( err ) {
fmt . Println ( "Error: No config file. Run with -genkeys and edit config.json" )
os . Exit ( 3 )
2015-10-24 19:59:34 -07:00
}
2015-10-26 22:16:03 -07:00
if err != nil {
log . Fatal ( err )
2015-10-24 19:59:34 -07:00
}
2015-10-26 22:16:03 -07:00
conf := & server . ConfigFile { }
confBytes , err := ioutil . ReadAll ( confFile )
if err != nil {
log . Fatal ( err )
2015-10-24 19:59:34 -07:00
}
2015-10-26 22:16:03 -07:00
err = json . Unmarshal ( confBytes , & conf )
if err != nil {
log . Fatal ( err )
2015-10-24 19:59:34 -07:00
}
2015-10-25 03:21:50 -07:00
httpServer := & http . Server {
2015-10-26 22:16:03 -07:00
Addr : conf . ListenAddr ,
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
2015-10-27 21:21:06 -07:00
go commandLineConsole ( )
2015-10-24 19:59:34 -07:00
if conf . UseSSL {
2015-10-26 22:16:03 -07:00
err = httpServer . ListenAndServeTLS ( conf . SSLCertificateFile , conf . SSLKeyFile )
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 {
2015-10-26 22:16:03 -07:00
fmt . Println ( "Specify a numeric server ID after -genkeys" )
os . Exit ( 2 )
2015-10-25 12:40:07 -07:00
}
if flag . NArg ( ) >= 2 {
server . GenerateKeys ( outputFile , flag . Arg ( 0 ) , flag . Arg ( 1 ) )
} else {
server . GenerateKeys ( outputFile , flag . Arg ( 0 ) , "" )
}
2015-10-26 22:16:03 -07:00
fmt . Println ( "Keys generated. Now edit config.json" )
2015-10-26 10:06:45 -07:00
}