It works
This commit is contained in:
parent
86a895881e
commit
917e1fef13
2
.gitignore
vendored
2
.gitignore
vendored
@ -24,3 +24,5 @@ _testmain.go
|
|||||||
*.test
|
*.test
|
||||||
*.prof
|
*.prof
|
||||||
|
|
||||||
|
# Ignore the binary
|
||||||
|
web-passage
|
||||||
|
124
main.go
Normal file
124
main.go
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
passage "git.bullercodeworks.com/brian/passage-go"
|
||||||
|
"github.com/gorilla/handlers"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/justinas/alice"
|
||||||
|
)
|
||||||
|
|
||||||
|
var port int
|
||||||
|
var ip string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
const (
|
||||||
|
portDefault = 8080
|
||||||
|
portUsage = "the port to listen on"
|
||||||
|
ipDefault = "127.0.0.1"
|
||||||
|
ipUsage = "the ip mask to listen for connections from"
|
||||||
|
)
|
||||||
|
flag.StringVar(&ip, "ip", ipDefault, ipUsage)
|
||||||
|
flag.IntVar(&port, "port", portDefault, portUsage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
r := mux.NewRouter()
|
||||||
|
r.HandleFunc("/", mainPage)
|
||||||
|
r.HandleFunc("/api/generate", generate)
|
||||||
|
r.HandleFunc("/api/checksum", checksum)
|
||||||
|
|
||||||
|
chain := alice.New(loggingHandler).Then(r)
|
||||||
|
|
||||||
|
listenAt := ip + ":" + strconv.Itoa(port)
|
||||||
|
fmt.Println("Passage Server listening at", listenAt)
|
||||||
|
log.Fatal(http.ListenAndServe(listenAt, chain))
|
||||||
|
}
|
||||||
|
|
||||||
|
func checksum(w http.ResponseWriter, req *http.Request) {
|
||||||
|
err := req.ParseForm()
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pin := req.FormValue("pin")
|
||||||
|
p := passage.CreatePassage(pin)
|
||||||
|
w.Write([]byte(p.GetChecksumAsString()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func generate(w http.ResponseWriter, req *http.Request) {
|
||||||
|
type resp struct {
|
||||||
|
Checksum string
|
||||||
|
Password string
|
||||||
|
Door string
|
||||||
|
Error error
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
var bts []byte
|
||||||
|
err = req.ParseForm()
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pin := req.FormValue("pin")
|
||||||
|
door := req.FormValue("door")
|
||||||
|
if pin != "" && door != "" {
|
||||||
|
r := new(resp)
|
||||||
|
p := passage.CreatePassage(pin)
|
||||||
|
r.Checksum = p.GetChecksumAsString()
|
||||||
|
r.Password = p.GetPassword(door)
|
||||||
|
r.Door = door
|
||||||
|
|
||||||
|
bts, err = json.Marshal(r)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
http.Error(w, "Both Pin and Door must be provided", 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Write(bts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mainPage(w http.ResponseWriter, req *http.Request) {
|
||||||
|
err := req.ParseForm()
|
||||||
|
pageString := "<!DOCTYPE html>"
|
||||||
|
pageString += "<html>"
|
||||||
|
pageString += " <head>"
|
||||||
|
pageString += " <title>Passage</title>"
|
||||||
|
pageString += " </head>"
|
||||||
|
pageString += " <body>"
|
||||||
|
if err != nil {
|
||||||
|
pageString += " <div class=\"error\">" + err.Error() + "</div>"
|
||||||
|
}
|
||||||
|
pin := req.FormValue("pin")
|
||||||
|
door := req.FormValue("door")
|
||||||
|
if pin != "" && door != "" {
|
||||||
|
p := passage.CreatePassage(pin)
|
||||||
|
chk := p.GetChecksumAsString()
|
||||||
|
pw := p.GetPassword(door)
|
||||||
|
pageString += " <div class=\"success\" style=\"margin: 10px\">Checksum: " + chk + "<br />" + "Password: " + pw + "</div>"
|
||||||
|
}
|
||||||
|
pageString += " <form method=\"POST\" style=\"margin: 10px\">"
|
||||||
|
pageString += " <input type=\"text\" name=\"pin\" placeholder=\"pin\" />"
|
||||||
|
pageString += " <input type=\"text\" name=\"door\" placeholder=\"door\" />"
|
||||||
|
pageString += " <button type=\"submit\">Submit</button>"
|
||||||
|
pageString += " </form>"
|
||||||
|
pageString += " </body>"
|
||||||
|
pageString += "</html>"
|
||||||
|
w.Write([]byte(pageString))
|
||||||
|
}
|
||||||
|
|
||||||
|
func loggingHandler(h http.Handler) http.Handler {
|
||||||
|
return handlers.LoggingHandler(os.Stdout, h)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user