diff --git a/api/auth.go b/api/auth.go index 1a36603..cdeb4f2 100644 --- a/api/auth.go +++ b/api/auth.go @@ -2,9 +2,11 @@ package api import ( "errors" + "fmt" "io/ioutil" "log" "net/http" + "path/filepath" "github.com/dgrijalva/jwt-go" ) @@ -26,12 +28,14 @@ var ( func init() { var err error + dir, _ := filepath.Abs(filepath.Dir(privKeyPath)) + fmt.Println(dir) signKey, err = ioutil.ReadFile(privKeyPath) if err != nil { // Before exploding, check up one level... - signKey, err = ioutil.ReadFile("../" + privKeyPath) + signKey, err = ioutil.ReadFile("../../" + privKeyPath) if err != nil { log.Fatalf("Error reading private key: ", err) return @@ -41,7 +45,7 @@ func init() { verifyKey, err = ioutil.ReadFile(pubKeyPath) if err != nil { // Before exploding, check up one level... - verifyKey, err = ioutil.ReadFile("../" + pubKeyPath) + verifyKey, err = ioutil.ReadFile("../../" + pubKeyPath) if err != nil { log.Fatalf("Error reading public key: ", err) return diff --git a/cmd/bactdb/bactdb.go b/cmd/bactdb/bactdb.go index 63a228f..c9c3ba6 100644 --- a/cmd/bactdb/bactdb.go +++ b/cmd/bactdb/bactdb.go @@ -1,126 +1,49 @@ package main import ( - "flag" - "fmt" "log" "net/http" "os" + "github.com/codegangsta/cli" "github.com/thermokarst/bactdb/api" "github.com/thermokarst/bactdb/datastore" ) -func init() { - flag.Usage = func() { - fmt.Fprintln(os.Stderr, `bactdb is a database for bacteria. - -Usage: - - bactdb [options] command [arg...] - -The commands are: -`) - for _, c := range subcmds { - fmt.Fprintf(os.Stderr, " %-24s %s\n", c.name, c.description) - } - fmt.Fprintln(os.Stderr, ` -Use "bactdb command -h" for more information about a command. - -The options are: -`) - flag.PrintDefaults() - os.Exit(1) - } -} - func main() { - flag.Parse() + app := cli.NewApp() + app.Name = "bactdb" + app.Usage = "a database for bacteria" - if flag.NArg() == 0 { - flag.Usage() - } - log.SetFlags(0) - - subcmd := flag.Arg(0) - for _, c := range subcmds { - if c.name == subcmd { - c.run(flag.Args()[1:]) - return - } + app.Commands = []cli.Command{ + { + Name: "serve", + ShortName: "s", + Usage: "Start web server", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "http", + Value: ":8901", + Usage: "HTTP service address", + }, + }, + Action: cmdServe, + }, } - fmt.Fprintf(os.Stderr, "unknown subcmd %q\n", subcmd) - fmt.Fprintln(os.Stderr, `Run "bactdb -h" for usage.`) - os.Exit(1) + app.Run(os.Args) } -type subcmd struct { - name string - description string - run func(args []string) -} - -var subcmds = []subcmd{ - {"serve", "start web server", serveCmd}, - {"createdb", "create the database schema", createDBCmd}, -} - -func serveCmd(args []string) { - fs := flag.NewFlagSet("serve", flag.ExitOnError) - httpAddr := flag.String("http", ":8901", "HTTP service address") - fs.Usage = func() { - fmt.Fprintln(os.Stderr, `usage: bactdb serve [options] - -Starts the web server that serves the API. - -The options are: -`) - fs.PrintDefaults() - os.Exit(1) - } - fs.Parse(args) - - if fs.NArg() != 0 { - fs.Usage() - } +func cmdServe(c *cli.Context) { + httpAddr := c.String("http") datastore.Connect() m := http.NewServeMux() m.Handle("/api/", http.StripPrefix("/api", api.Handler())) - - log.Print("Listening on ", *httpAddr) - err := http.ListenAndServe(*httpAddr, m) + log.Print("Listening on ", httpAddr) + err := http.ListenAndServe(httpAddr, m) if err != nil { - log.Fatal("ListenAndServe:", err) + log.Fatal("ListenAndServe: ", err) } } - -func createDBCmd(args []string) { - fs := flag.NewFlagSet("createdb", flag.ExitOnError) - drop := fs.Bool("drop", false, "drop DB before creating") - fs.Usage = func() { - fmt.Fprintln(os.Stderr, `usage: bactdb createdb [options] - -Creates the necessary DB schema. - -The options are: -`) - fs.PrintDefaults() - os.Exit(1) - } - fs.Parse(args) - - if fs.NArg() != 0 { - fs.Usage() - } - - datastore.Connect() - migrationsPath := "./datastore/migrations" - - if *drop { - datastore.Drop(migrationsPath) - } - datastore.Create(migrationsPath) -}