can serve (hackish)
This commit is contained in:
parent
2f3aa58af6
commit
28f29f3d68
2 changed files with 30 additions and 103 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
Reference in a new issue