Add HTTP Server #6

Merged
tueem merged 2 commits from feat/http into dev 2026-01-23 21:27:45 +00:00
2 changed files with 53 additions and 3 deletions
Showing only changes of commit e9a3e807ec - Show all commits

View File

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

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