can serve (hackish)

This commit is contained in:
Matthew Dillon 2015-01-05 11:50:42 -09:00
parent 2f3aa58af6
commit 28f29f3d68
2 changed files with 30 additions and 103 deletions

View file

@ -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

View file

@ -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)
}