Add HTTP Server #6
@@ -2,10 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"tomatentum.net/svg-templater/internal/database"
|
||||
svgtemplater "tomatentum.net/svg-templater/internal/svg-templater"
|
||||
"tomatentum.net/svg-templater/pkg/auth"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -18,10 +21,11 @@ func main() {
|
||||
log.Fatal("Failed opening DB:\n", err)
|
||||
return
|
||||
}
|
||||
defer database.Close()
|
||||
database.InitDB()
|
||||
prepareCommandLine()
|
||||
prepareHTTP()
|
||||
handleCommandline()
|
||||
defer database.Close()
|
||||
}
|
||||
|
||||
func prepareCommandLine() {
|
||||
@@ -29,6 +33,12 @@ func prepareCommandLine() {
|
||||
flag.BoolVar(&deleteTokenFlag, "tokendel", false, "svg-templater --tokendel <name> : Delete token with name")
|
||||
}
|
||||
|
||||
func prepareHTTP() {
|
||||
http.HandleFunc("/", auth.AuthMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintln(w, "You are authorized!")
|
||||
})))
|
||||
}
|
||||
|
||||
func handleCommandline() {
|
||||
flag.Parse()
|
||||
if generateTokenFlag {
|
||||
@@ -36,7 +46,7 @@ func handleCommandline() {
|
||||
} else if deleteTokenFlag {
|
||||
svgtemplater.DeleteTokenCommand()
|
||||
} else {
|
||||
log.Println("No commend provided!")
|
||||
flag.PrintDefaults()
|
||||
log.Println("Starting http server on :3000")
|
||||
http.ListenAndServe(":3000", nil)
|
||||
}
|
||||
}
|
||||
|
||||
40
pkg/auth/authmiddleware.go
Normal file
40
pkg/auth/authmiddleware.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"tomatentum.net/svg-templater/internal/database"
|
||||
)
|
||||
|
||||
func AuthMiddleware(next http.Handler) http.HandlerFunc {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
valid, err := validateAuthHeader(r)
|
||||
if err != nil {
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||
log.Println("Database Query for token validation failed.\n", r)
|
||||
return
|
||||
}
|
||||
|
||||
if valid {
|
||||
next.ServeHTTP(w, r)
|
||||
} else {
|
||||
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Accepts ("Authorization": "BEARER <TOKEN>"), returns database error if query failed
|
||||
func validateAuthHeader(r *http.Request) (bool, error) {
|
||||
header := strings.Split(r.Header.Get("Authorization"), " ")
|
||||
if len(header) < 2 {
|
||||
return false, nil
|
||||
}
|
||||
token := header[1]
|
||||
if len(strings.TrimSpace(token)) < 1 {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
return database.ValidateTokenCache(token)
|
||||
}
|
||||
Reference in New Issue
Block a user