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 ( import (
"flag" "flag"
"fmt"
"log" "log"
"net/http"
"tomatentum.net/svg-templater/internal/database" "tomatentum.net/svg-templater/internal/database"
svgtemplater "tomatentum.net/svg-templater/internal/svg-templater" svgtemplater "tomatentum.net/svg-templater/internal/svg-templater"
"tomatentum.net/svg-templater/pkg/auth"
) )
var ( var (
@@ -18,10 +21,11 @@ func main() {
log.Fatal("Failed opening DB:\n", err) log.Fatal("Failed opening DB:\n", err)
return return
} }
defer database.Close()
database.InitDB() database.InitDB()
prepareCommandLine() prepareCommandLine()
prepareHTTP()
handleCommandline() handleCommandline()
defer database.Close()
} }
func prepareCommandLine() { func prepareCommandLine() {
@@ -29,6 +33,12 @@ func prepareCommandLine() {
flag.BoolVar(&deleteTokenFlag, "tokendel", false, "svg-templater --tokendel <name> : Delete token with name") 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() { func handleCommandline() {
flag.Parse() flag.Parse()
if generateTokenFlag { if generateTokenFlag {
@@ -36,7 +46,7 @@ func handleCommandline() {
} else if deleteTokenFlag { } else if deleteTokenFlag {
svgtemplater.DeleteTokenCommand() svgtemplater.DeleteTokenCommand()
} else { } else {
log.Println("No commend provided!") log.Println("Starting http server on :3000")
flag.PrintDefaults() 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)
}