Stephen McQuay
bb12b12ebf
If the db file isn't there, or it's corrupt, allow for the creation of an empty slice of Creds.
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"sync"
|
|
"text/template"
|
|
)
|
|
|
|
type Cred struct {
|
|
Name string
|
|
Password string
|
|
}
|
|
|
|
var creds = make([]Cred, 0)
|
|
|
|
var m = sync.Mutex{}
|
|
|
|
var addr = flag.String("addr", ":8000", "http service address")
|
|
var static_files = flag.String("static", "./static", "location of static files")
|
|
var db_file = flag.String("db", "db.json", "output database")
|
|
var homeTempl = template.Must(template.ParseFiles("index.html"))
|
|
|
|
func homeHandler(c http.ResponseWriter, req *http.Request) {
|
|
homeTempl.Execute(c, req.Host)
|
|
}
|
|
|
|
func passHandler(resp http.ResponseWriter, req *http.Request) {
|
|
un := req.FormValue("username")
|
|
pw := req.FormValue("password")
|
|
c := Cred{un, pw}
|
|
m.Lock()
|
|
defer m.Unlock()
|
|
creds = append(creds, c)
|
|
b, err := json.Marshal(creds)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
err = ioutil.WriteFile(*db_file, b, 0644)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
http.Redirect(resp, req, "/", http.StatusTemporaryRedirect)
|
|
}
|
|
|
|
func init_db() {
|
|
b, err := ioutil.ReadFile(*db_file)
|
|
if err != nil {
|
|
log.Println("Problem opening db file", err)
|
|
}
|
|
err = json.Unmarshal(b, &creds)
|
|
if err != nil {
|
|
log.Println("Problem parsing db file", err)
|
|
creds = make([]Cred, 0)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
init_db()
|
|
http.HandleFunc("/", homeHandler)
|
|
http.HandleFunc("/pass", passHandler)
|
|
http.Handle("/s/", http.StripPrefix("/s/",
|
|
http.FileServer(http.Dir(*static_files))))
|
|
if err := http.ListenAndServe(*addr, nil); err != nil {
|
|
log.Fatal("ListenAndServe:", err)
|
|
}
|
|
}
|