Combine server into single 'git-style' executable
This commit is contained in:
		| @@ -1,4 +1,4 @@ | |||||||
| package server | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"net" | 	"net" | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| package server | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"asink" | 	"asink" | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| package server | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"os" | 	"os" | ||||||
| @@ -5,24 +5,29 @@ import ( | |||||||
| 	"os" | 	"os" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type AdminCommand struct { | type Command struct { | ||||||
| 	cmd         string | 	cmd         string | ||||||
| 	fn          func(args []string) | 	fn          func(args []string) | ||||||
| 	explanation string | 	explanation string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var commands []AdminCommand = []AdminCommand{ | var commands []Command = []Command{ | ||||||
| 	AdminCommand{ | 	Command{ | ||||||
|  | 		cmd:         "start", | ||||||
|  | 		fn:          StartServer, | ||||||
|  | 		explanation: "Start the server daemon", | ||||||
|  | 	}, | ||||||
|  | 	Command{ | ||||||
| 		cmd:         "useradd", | 		cmd:         "useradd", | ||||||
| 		fn:          UserAdd, | 		fn:          UserAdd, | ||||||
| 		explanation: "Add a user", | 		explanation: "Add a user", | ||||||
| 	}, | 	}, | ||||||
| 	AdminCommand{ | 	Command{ | ||||||
| 		cmd:         "userdel", | 		cmd:         "userdel", | ||||||
| 		fn:          UserDel, | 		fn:          UserDel, | ||||||
| 		explanation: "Remove a user", | 		explanation: "Remove a user", | ||||||
| 	}, | 	}, | ||||||
| 	AdminCommand{ | 	Command{ | ||||||
| 		cmd:         "usermod", | 		cmd:         "usermod", | ||||||
| 		fn:          UserMod, | 		fn:          UserMod, | ||||||
| 		explanation: "Modify a user", | 		explanation: "Modify a user", | ||||||
| @@ -1,7 +1,6 @@ | |||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"asink/server" |  | ||||||
| 	"code.google.com/p/gopass" | 	"code.google.com/p/gopass" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| @@ -56,20 +55,20 @@ func UserAdd(args []string) { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	user := new(server.User) | 	user := new(User) | ||||||
| 
 | 
 | ||||||
| 	if *admin { | 	if *admin { | ||||||
| 		user.Role = server.ADMIN | 		user.Role = ADMIN | ||||||
| 	} else { | 	} else { | ||||||
| 		user.Role = server.NORMAL | 		user.Role = NORMAL | ||||||
| 	} | 	} | ||||||
| 	user.Username = flags.Arg(0) | 	user.Username = flags.Arg(0) | ||||||
| 	user.PWHash = server.HashPassword(passwordOne) | 	user.PWHash = HashPassword(passwordOne) | ||||||
| 
 | 
 | ||||||
| 	i := 99 | 	i := 99 | ||||||
| 	err = RPCCall("UserModifier.AddUser", user, &i) | 	err = RPCCall("UserModifier.AddUser", user, &i) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if _, ok := err.(rpc.ServerError); ok && err.Error() == server.DuplicateUsernameErr.Error() { | 		if _, ok := err.(rpc.ServerError); ok && err.Error() == DuplicateUsernameErr.Error() { | ||||||
| 			fmt.Println("Error: " + err.Error()) | 			fmt.Println("Error: " + err.Error()) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| @@ -83,13 +82,13 @@ func UserDel(args []string) { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	user := new(server.User) | 	user := new(User) | ||||||
| 	user.Username = args[0] | 	user.Username = args[0] | ||||||
| 
 | 
 | ||||||
| 	i := 99 | 	i := 99 | ||||||
| 	err := RPCCall("UserModifier.RemoveUser", user, &i) | 	err := RPCCall("UserModifier.RemoveUser", user, &i) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if _, ok := err.(rpc.ServerError); ok && err.Error() == server.NoUserErr.Error() { | 		if _, ok := err.(rpc.ServerError); ok && err.Error() == NoUserErr.Error() { | ||||||
| 			fmt.Println("Error: " + err.Error()) | 			fmt.Println("Error: " + err.Error()) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| @@ -98,9 +97,9 @@ func UserDel(args []string) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func UserMod(args []string) { | func UserMod(args []string) { | ||||||
| 	rpcargs := new(server.UserModifierArgs) | 	rpcargs := new(UserModifierArgs) | ||||||
| 	rpcargs.Current = new(server.User) | 	rpcargs.Current = new(User) | ||||||
| 	rpcargs.Updated = new(server.User) | 	rpcargs.Updated = new(User) | ||||||
| 
 | 
 | ||||||
| 	admin := newBoolIsSetFlag(false) | 	admin := newBoolIsSetFlag(false) | ||||||
| 
 | 
 | ||||||
| @@ -137,15 +136,15 @@ func UserMod(args []string) { | |||||||
| 			fmt.Println("Error: Passwords do not match. Please try again.") | 			fmt.Println("Error: Passwords do not match. Please try again.") | ||||||
| 			os.Exit(1) | 			os.Exit(1) | ||||||
| 		} | 		} | ||||||
| 		rpcargs.Updated.PWHash = server.HashPassword(passwordOne) | 		rpcargs.Updated.PWHash = HashPassword(passwordOne) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	//set the UpdateRole flag based on whether it was present on the command-line | 	//set the UpdateRole flag based on whether it was present on the command-line | ||||||
| 	rpcargs.UpdateRole = admin.IsSet | 	rpcargs.UpdateRole = admin.IsSet | ||||||
| 	if admin.Value { | 	if admin.Value { | ||||||
| 		rpcargs.Updated.Role = server.ADMIN | 		rpcargs.Updated.Role = ADMIN | ||||||
| 	} else { | 	} else { | ||||||
| 		rpcargs.Updated.Role = server.NORMAL | 		rpcargs.Updated.Role = NORMAL | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if !rpcargs.UpdateRole && !rpcargs.UpdateLogin && !rpcargs.UpdatePassword { | 	if !rpcargs.UpdateRole && !rpcargs.UpdateLogin && !rpcargs.UpdatePassword { | ||||||
| @@ -156,7 +155,7 @@ func UserMod(args []string) { | |||||||
| 	i := 99 | 	i := 99 | ||||||
| 	err := RPCCall("UserModifier.ModifyUser", rpcargs, &i) | 	err := RPCCall("UserModifier.ModifyUser", rpcargs, &i) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if _, ok := err.(rpc.ServerError); ok && err.Error() == server.NoUserErr.Error() { | 		if _, ok := err.(rpc.ServerError); ok && err.Error() == NoUserErr.Error() { | ||||||
| 			fmt.Println("Error: " + err.Error()) | 			fmt.Println("Error: " + err.Error()) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| @@ -2,7 +2,6 @@ package main | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"asink" | 	"asink" | ||||||
| 	"asink/server" |  | ||||||
| 	"encoding/base64" | 	"encoding/base64" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"flag" | 	"flag" | ||||||
| @@ -18,28 +17,30 @@ import ( | |||||||
| //global variables | //global variables | ||||||
| var eventsRegexp *regexp.Regexp | var eventsRegexp *regexp.Regexp | ||||||
| var port int = 8080 | var port int = 8080 | ||||||
| var adb *server.AsinkDB | var adb *AsinkDB | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	var err error | 	var err error | ||||||
| 	const port_usage = "Port on which to serve HTTP API" |  | ||||||
| 
 |  | ||||||
| 	flag.IntVar(&port, "port", 8080, port_usage) |  | ||||||
| 	flag.IntVar(&port, "p", 8080, port_usage+" (shorthand)") |  | ||||||
| 
 | 
 | ||||||
| 	eventsRegexp = regexp.MustCompile("^/events/([0-9]+)$") | 	eventsRegexp = regexp.MustCompile("^/events/([0-9]+)$") | ||||||
| 
 | 
 | ||||||
| 	adb, err = server.GetAndInitDB() | 	adb, err = GetAndInitDB() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | func StartServer(args []string) { | ||||||
| 	flag.Parse() | 	const port_usage = "Port on which to serve HTTP API" | ||||||
|  | 
 | ||||||
|  | 	flags := flag.NewFlagSet("start", flag.ExitOnError) | ||||||
|  | 	flags.IntVar(&port, "port", 8080, port_usage) | ||||||
|  | 	flags.IntVar(&port, "p", 8080, port_usage+" (shorthand)") | ||||||
|  | 
 | ||||||
|  | 	flags.Parse(args) | ||||||
| 
 | 
 | ||||||
| 	rpcTornDown := make(chan int) | 	rpcTornDown := make(chan int) | ||||||
| 	go server.StartRPC(rpcTornDown, adb) | 	go StartRPC(rpcTornDown, adb) | ||||||
| 
 | 
 | ||||||
| 	http.HandleFunc("/", rootHandler) | 	http.HandleFunc("/", rootHandler) | ||||||
| 	http.HandleFunc("/events", eventHandler) | 	http.HandleFunc("/events", eventHandler) | ||||||
| @@ -54,7 +55,7 @@ func main() { | |||||||
| 	go http.Serve(l, nil) | 	go http.Serve(l, nil) | ||||||
| 	//TODO handle errors from http.Serve? | 	//TODO handle errors from http.Serve? | ||||||
| 
 | 
 | ||||||
| 	server.WaitOnExit() | 	WaitOnExit() | ||||||
| 	<-rpcTornDown | 	<-rpcTornDown | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -62,7 +63,7 @@ func rootHandler(w http.ResponseWriter, r *http.Request) { | |||||||
| 	fmt.Fprintf(w, "You're probably looking for /events/") | 	fmt.Fprintf(w, "You're probably looking for /events/") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getEvents(w http.ResponseWriter, r *http.Request, user *server.User, nextEvent uint64) { | func getEvents(w http.ResponseWriter, r *http.Request, user *User, nextEvent uint64) { | ||||||
| 	var events []*asink.Event | 	var events []*asink.Event | ||||||
| 	var error_message string = "" | 	var error_message string = "" | ||||||
| 	defer func() { | 	defer func() { | ||||||
| @@ -103,7 +104,7 @@ func getEvents(w http.ResponseWriter, r *http.Request, user *server.User, nextEv | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func putEvents(w http.ResponseWriter, r *http.Request, user *server.User) { | func putEvents(w http.ResponseWriter, r *http.Request, user *User) { | ||||||
| 	var events asink.EventList | 	var events asink.EventList | ||||||
| 	var error_message string = "" | 	var error_message string = "" | ||||||
| 	defer func() { | 	defer func() { | ||||||
| @@ -192,7 +193,7 @@ func eventHandler(w http.ResponseWriter, r *http.Request) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func AuthenticateUser(r *http.Request) (user *server.User) { | func AuthenticateUser(r *http.Request) (user *User) { | ||||||
| 	h, ok := r.Header["Authorization"] | 	h, ok := r.Header["Authorization"] | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return nil | 		return nil | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| package server | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"crypto/sha256" | 	"crypto/sha256" | ||||||
		Reference in New Issue
	
	Block a user