85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package control
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
type ControlServer struct {
|
|
bindAddr string
|
|
ctrlMux *mux.Router
|
|
traceChannel chan string
|
|
useTLS bool
|
|
certfile string
|
|
keyfile string
|
|
}
|
|
|
|
var server *ControlServer
|
|
|
|
func NewControlServer(bindAddr string, listenPort int, certfile, keyfile string) (*ControlServer, error) {
|
|
|
|
if server == nil {
|
|
var useTLS bool
|
|
|
|
if certfile == "" && keyfile != "" {
|
|
return nil, errors.New("No keyfile provided")
|
|
} else if certfile != "" && keyfile == "" {
|
|
return nil, errors.New("No certfile provided")
|
|
} else if certfile != "" && keyfile != "" {
|
|
useTLS = true
|
|
} else {
|
|
useTLS = false
|
|
}
|
|
|
|
server = &ControlServer{
|
|
bindAddr: fmt.Sprintf("%s:%d", bindAddr, listenPort),
|
|
useTLS: useTLS,
|
|
certfile: certfile,
|
|
keyfile: keyfile,
|
|
ctrlMux: mux.NewRouter(),
|
|
}
|
|
|
|
server.ctrlMux.HandleFunc("/routes/{id}", server.removeRoute).Methods("DELETE")
|
|
server.ctrlMux.HandleFunc("/routes", server.listRoutes).Methods("GET")
|
|
server.ctrlMux.HandleFunc("/routes", server.addRoute).Methods("POST")
|
|
}
|
|
|
|
return server, nil
|
|
}
|
|
|
|
func (srv *ControlServer) Start(traceChannel chan string) {
|
|
|
|
srv.traceChannel = traceChannel
|
|
|
|
// Start the server
|
|
var err error
|
|
if srv.useTLS {
|
|
err = http.ListenAndServeTLS(srv.bindAddr, srv.certfile, srv.keyfile, srv.ctrlMux)
|
|
} else {
|
|
err = http.ListenAndServe(srv.bindAddr, srv.ctrlMux)
|
|
}
|
|
|
|
srv.traceChannel <- err.Error()
|
|
}
|
|
|
|
func (srv *ControlServer) removeRoute(http.ResponseWriter, *http.Request) {
|
|
var logRecord string
|
|
defer func() { srv.traceChannel <- logRecord }()
|
|
|
|
}
|
|
|
|
func (srv *ControlServer) listRoutes(http.ResponseWriter, *http.Request) {
|
|
var logRecord string
|
|
defer func() { srv.traceChannel <- logRecord }()
|
|
|
|
}
|
|
|
|
func (srv *ControlServer) addRoute(http.ResponseWriter, *http.Request) {
|
|
var logRecord string
|
|
defer func() { srv.traceChannel <- logRecord }()
|
|
|
|
}
|