Code cleanup.

master
J. David Lee 2019-06-10 21:31:34 +02:00
parent 082cfca0c3
commit 5b86e618fc
6 changed files with 57 additions and 74 deletions

View File

@ -1,5 +1 @@
# am
* X Go client
* X Command line client: `am https://_:<api_key>@addr <action> <log or alert>`
* alert timeout not updated

22
main.go
View File

@ -51,19 +51,19 @@ func Main() {
http.HandleFunc("/report", handleReport)
// User routes.
routeAdmin("/user/insert", handleUserInsert)
routeUser("/user/list", handleUserList)
routeUser("/user/view/", handleUserView)
routeAdmin("/user/update/", handleUserUpdate)
routeAdmin("/user/delete/", handleUserDelete)
handle_admin("/user/insert", handleUserInsert)
handle_user("/user/list", handleUserList)
handle_user("/user/view/", handleUserView)
handle_admin("/user/update/", handleUserUpdate)
handle_admin("/user/delete/", handleUserDelete)
routeAdmin("/source/insert", handleSourceInsert)
routeUser("/source/list", handleSourceList)
routeUser("/source/view/", handleSourceView)
routeAdmin("/source/update/", handleSourceUpdate)
routeAdmin("/source/delete/", handleSourceDelete)
handle_admin("/source/insert", handleSourceInsert)
handle_user("/source/list", handleSourceList)
handle_user("/source/view/", handleSourceView)
handle_admin("/source/update/", handleSourceUpdate)
handle_admin("/source/delete/", handleSourceDelete)
routeUser("/log/list", handleLogList)
handle_user("/log/list", handleLogList)
if port == "443" {
http.Serve(autocert.NewListener(host), http.DefaultServeMux)

44
report-handler.go Normal file
View File

@ -0,0 +1,44 @@
package am
import (
"net/http"
)
func handleReport(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
apiKey := r.Form.Get("key")
src, err := db.SourceGetByKey(apiKey)
if err != nil {
respondNotAuthorized(w)
return
}
action := r.Form.Get("action")
switch action {
case "ping":
_ = db.SourceUpdateLastSeenAt(src.SourceID)
w.WriteHeader(http.StatusOK)
case "log":
text := r.Form.Get("text")
_ = db.LogInsert(Entry{
SourceID: src.SourceID,
Text: text,
})
runLogAction(src.LogAction, src.Name, text)
w.WriteHeader(http.StatusOK)
case "alert":
text := r.Form.Get("text")
_ = db.LogInsert(Entry{
SourceID: src.SourceID,
Text: text,
Alert: true,
})
runAlertAction(src.AlertAction, src.Name, text)
w.WriteHeader(http.StatusOK)
}
}

View File

@ -1,55 +0,0 @@
package am
import (
"net/http"
)
func respondReportError(w http.ResponseWriter, msg string) {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(msg))
}
func handleReport(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
apiKey := r.Form.Get("key")
src, err := db.SourceGetByKey(apiKey)
if err != nil {
respondNotAuthorized(w)
return
}
// Always update last seen timestamp.
_ = db.SourceUpdateLastSeenAt(src.SourceID)
action := r.Form.Get("action")
var actionFunc func(string, string, string)
switch action {
case "ping":
w.WriteHeader(http.StatusOK)
return
case "log":
actionFunc = runLogAction
case "alert":
actionFunc = runAlertAction
default:
respondReportError(w, "Unknown action: "+action)
return
}
e := Entry{
SourceID: src.SourceID,
Text: r.Form.Get("text"),
Alert: action == "alert",
}
_ = db.LogInsert(e)
actionFunc(src.LogAction, src.Name, e.Text)
w.WriteHeader(http.StatusOK)
}

View File

@ -79,8 +79,7 @@ func checkCSRF(w http.ResponseWriter, r *http.Request) bool {
return formVal == cookieVal
}
// TODO: Rename function.
func routeUser(path string, h func(w http.ResponseWriter, r *http.Request)) {
func handle_user(path string, h func(w http.ResponseWriter, r *http.Request)) {
http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
if _, ok := getReqUser(w, r); !ok {
respondNotAuthorized(w)
@ -94,8 +93,7 @@ func routeUser(path string, h func(w http.ResponseWriter, r *http.Request)) {
})
}
// TODO: Rename function.
func routeAdmin(path string, h func(w http.ResponseWriter, r *http.Request)) {
func handle_admin(path string, h func(w http.ResponseWriter, r *http.Request)) {
http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
if u, ok := getReqUser(w, r); !ok || !u.Admin {
respondNotAuthorized(w)