Cleaned up middleware/route handlers
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
)
|
||||
|
||||
// Renders the account page on the 'General' subpage
|
||||
func HandleAccountPage() http.Handler {
|
||||
func AccountPage() http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
cookie, err := r.Cookie("subpage")
|
||||
@@ -30,7 +30,7 @@ func HandleAccountPage() http.Handler {
|
||||
}
|
||||
|
||||
// Handles a request to change the subpage for the Accou/accountnt page
|
||||
func HandleAccountSubpage() http.Handler {
|
||||
func AccountSubpage() http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
r.ParseForm()
|
||||
@@ -42,7 +42,7 @@ func HandleAccountSubpage() http.Handler {
|
||||
}
|
||||
|
||||
// Handles a request to change the users username
|
||||
func HandleChangeUsername(
|
||||
func ChangeUsername(
|
||||
logger *zerolog.Logger,
|
||||
conn *db.SafeConn,
|
||||
) http.Handler {
|
||||
@@ -88,7 +88,7 @@ func HandleChangeUsername(
|
||||
}
|
||||
|
||||
// Handles a request to change the users bio
|
||||
func HandleChangeBio(
|
||||
func ChangeBio(
|
||||
logger *zerolog.Logger,
|
||||
conn *db.SafeConn,
|
||||
) http.Handler {
|
||||
@@ -144,7 +144,7 @@ func validateChangePassword(
|
||||
}
|
||||
|
||||
// Handles a request to change the users password
|
||||
func HandleChangePassword(
|
||||
func ChangePassword(
|
||||
logger *zerolog.Logger,
|
||||
conn *db.SafeConn,
|
||||
) http.Handler {
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
// Handles responses to the / path. Also serves a 404 Page for paths that
|
||||
// don't have explicit handlers
|
||||
func HandleRoot() http.Handler {
|
||||
func Root() http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path != "/" {
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -49,7 +49,7 @@ func checkRememberMe(r *http.Request) bool {
|
||||
// Handles an attempted login request. On success will return a HTMX redirect
|
||||
// and on fail will return the login form again, passing the error to the
|
||||
// template for user feedback
|
||||
func HandleLoginRequest(
|
||||
func LoginRequest(
|
||||
config *config.Config,
|
||||
logger *zerolog.Logger,
|
||||
conn *db.SafeConn,
|
||||
@@ -97,7 +97,7 @@ func HandleLoginRequest(
|
||||
|
||||
// Handles a request to view the login page. Will attempt to set "pagefrom"
|
||||
// cookie so a successful login can redirect the user to the page they came
|
||||
func HandleLoginPage(trustedHost string) http.Handler {
|
||||
func LoginPage(trustedHost string) http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
cookies.SetPageFrom(w, r, trustedHost)
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -80,7 +80,7 @@ func revokeTokens(
|
||||
}
|
||||
|
||||
// Handle a logout request
|
||||
func HandleLogout(
|
||||
func Logout(
|
||||
config *config.Config,
|
||||
logger *zerolog.Logger,
|
||||
conn *db.SafeConn,
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
@@ -1,11 +1,11 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"projectreshoot/view/page"
|
||||
)
|
||||
|
||||
func HandleProfilePage() http.Handler {
|
||||
func ProfilePage() http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
page.Profile().Render(r.Context(), w)
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -99,7 +99,7 @@ func validatePassword(
|
||||
}
|
||||
|
||||
// Handle request to reauthenticate (i.e. make token fresh again)
|
||||
func HandleReauthenticate(
|
||||
func Reauthenticate(
|
||||
logger *zerolog.Logger,
|
||||
config *config.Config,
|
||||
conn *db.SafeConn,
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -44,7 +44,7 @@ func validateRegistration(
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func HandleRegisterRequest(
|
||||
func RegisterRequest(
|
||||
config *config.Config,
|
||||
logger *zerolog.Logger,
|
||||
conn *db.SafeConn,
|
||||
@@ -93,7 +93,7 @@ func HandleRegisterRequest(
|
||||
|
||||
// Handles a request to view the login page. Will attempt to set "pagefrom"
|
||||
// cookie so a successful login can redirect the user to the page they came
|
||||
func HandleRegisterPage(trustedHost string) http.Handler {
|
||||
func RegisterPage(trustedHost string) http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
cookies.SetPageFrom(w, r, trustedHost)
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
@@ -42,7 +42,7 @@ func (f neuteredReaddirFile) Readdir(count int) ([]os.FileInfo, error) {
|
||||
|
||||
// Handles requests for static files, without allowing access to the
|
||||
// directory viewer and returning 404 if an exact file is not found
|
||||
func HandleStatic(staticFS *http.FileSystem) http.Handler {
|
||||
func StaticFS(staticFS *http.FileSystem) http.Handler {
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
nfs := justFilesFilesystem{*staticFS}
|
||||
@@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"projectreshoot/contexts"
|
||||
"projectreshoot/cookies"
|
||||
"projectreshoot/db"
|
||||
"projectreshoot/handlers"
|
||||
"projectreshoot/handler"
|
||||
"projectreshoot/jwt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@@ -119,7 +119,7 @@ func Authentication(
|
||||
// Failed to start transaction, skip auth
|
||||
logger.Warn().Err(err).
|
||||
Msg("Skipping Auth - unable to start a transaction")
|
||||
handlers.ErrorPage(http.StatusServiceUnavailable, w, r)
|
||||
handler.ErrorPage(http.StatusServiceUnavailable, w, r)
|
||||
return
|
||||
}
|
||||
user, err := getAuthenticatedUser(config, ctx, tx, w, r)
|
||||
|
||||
@@ -3,7 +3,7 @@ package middleware
|
||||
import (
|
||||
"net/http"
|
||||
"projectreshoot/contexts"
|
||||
"projectreshoot/handlers"
|
||||
"projectreshoot/handler"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
@@ -31,7 +31,7 @@ func Logging(logger *zerolog.Logger, next http.Handler) http.Handler {
|
||||
}
|
||||
start, err := contexts.GetStartTime(r.Context())
|
||||
if err != nil {
|
||||
handlers.ErrorPage(http.StatusInternalServerError, w, r)
|
||||
handler.ErrorPage(http.StatusInternalServerError, w, r)
|
||||
return
|
||||
}
|
||||
wrapped := &wrappedWriter{
|
||||
|
||||
@@ -3,15 +3,15 @@ package middleware
|
||||
import (
|
||||
"net/http"
|
||||
"projectreshoot/contexts"
|
||||
"projectreshoot/handlers"
|
||||
"projectreshoot/handler"
|
||||
)
|
||||
|
||||
// Checks if the user is set in the context and shows 401 page if not logged in
|
||||
func RequiresLogin(next http.Handler) http.Handler {
|
||||
func LoginReq(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
user := contexts.GetUser(r.Context())
|
||||
if user == nil {
|
||||
handlers.ErrorPage(http.StatusUnauthorized, w, r)
|
||||
handler.ErrorPage(http.StatusUnauthorized, w, r)
|
||||
return
|
||||
}
|
||||
next.ServeHTTP(w, r)
|
||||
@@ -20,7 +20,7 @@ func RequiresLogin(next http.Handler) http.Handler {
|
||||
|
||||
// Checks if the user is set in the context and redirects them to profile if
|
||||
// they are logged in
|
||||
func RequiresLogout(next http.Handler) http.Handler {
|
||||
func LogoutReq(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
user := contexts.GetUser(r.Context())
|
||||
if user != nil {
|
||||
|
||||
@@ -33,7 +33,7 @@ func TestPageLoginRequired(t *testing.T) {
|
||||
var maint uint32
|
||||
atomic.StoreUint32(&maint, 0)
|
||||
// Add the middleware and create the server
|
||||
loginRequiredHandler := RequiresLogin(testHandler)
|
||||
loginRequiredHandler := LoginReq(testHandler)
|
||||
authHandler := Authentication(logger, cfg, sconn, loginRequiredHandler, &maint)
|
||||
server := httptest.NewServer(authHandler)
|
||||
defer server.Close()
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func RequiresFresh(
|
||||
func FreshReq(
|
||||
next http.Handler,
|
||||
) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -33,8 +33,8 @@ func TestReauthRequired(t *testing.T) {
|
||||
var maint uint32
|
||||
atomic.StoreUint32(&maint, 0)
|
||||
// Add the middleware and create the server
|
||||
reauthRequiredHandler := RequiresFresh(testHandler)
|
||||
loginRequiredHandler := RequiresLogin(reauthRequiredHandler)
|
||||
reauthRequiredHandler := FreshReq(testHandler)
|
||||
loginRequiredHandler := LoginReq(reauthRequiredHandler)
|
||||
authHandler := Authentication(logger, cfg, sconn, loginRequiredHandler, &maint)
|
||||
server := httptest.NewServer(authHandler)
|
||||
defer server.Close()
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
|
||||
"projectreshoot/config"
|
||||
"projectreshoot/db"
|
||||
"projectreshoot/handlers"
|
||||
"projectreshoot/handler"
|
||||
"projectreshoot/middleware"
|
||||
"projectreshoot/view/page"
|
||||
|
||||
@@ -20,82 +20,44 @@ func addRoutes(
|
||||
conn *db.SafeConn,
|
||||
staticFS *http.FileSystem,
|
||||
) {
|
||||
route := mux.Handle
|
||||
loggedIn := middleware.LoginReq
|
||||
loggedOut := middleware.LogoutReq
|
||||
fresh := middleware.FreshReq
|
||||
|
||||
// Health check
|
||||
mux.HandleFunc("GET /healthz", func(http.ResponseWriter, *http.Request) {})
|
||||
|
||||
// Static files
|
||||
mux.Handle("GET /static/", http.StripPrefix("/static/", handlers.HandleStatic(staticFS)))
|
||||
route("GET /static/", http.StripPrefix("/static/", handler.StaticFS(staticFS)))
|
||||
|
||||
// Index page and unhandled catchall (404)
|
||||
mux.Handle("GET /", handlers.HandleRoot())
|
||||
route("GET /", handler.Root())
|
||||
|
||||
// Static content, unprotected pages
|
||||
mux.Handle("GET /about", handlers.HandlePage(page.About()))
|
||||
route("GET /about", handler.HandlePage(page.About()))
|
||||
|
||||
// Login page and handlers
|
||||
mux.Handle("GET /login",
|
||||
middleware.RequiresLogout(
|
||||
handlers.HandleLoginPage(config.TrustedHost),
|
||||
))
|
||||
mux.Handle("POST /login",
|
||||
middleware.RequiresLogout(
|
||||
handlers.HandleLoginRequest(
|
||||
config,
|
||||
logger,
|
||||
conn,
|
||||
)))
|
||||
route("GET /login", loggedOut(handler.LoginPage(config.TrustedHost)))
|
||||
route("POST /login", loggedOut(handler.LoginRequest(config, logger, conn)))
|
||||
|
||||
// Register page and handlers
|
||||
mux.Handle("GET /register",
|
||||
middleware.RequiresLogout(
|
||||
handlers.HandleRegisterPage(config.TrustedHost),
|
||||
))
|
||||
mux.Handle("POST /register",
|
||||
middleware.RequiresLogout(
|
||||
handlers.HandleRegisterRequest(
|
||||
config,
|
||||
logger,
|
||||
conn,
|
||||
)))
|
||||
route("GET /register", loggedOut(handler.RegisterPage(config.TrustedHost)))
|
||||
route("POST /register", loggedOut(handler.RegisterRequest(config, logger, conn)))
|
||||
|
||||
// Logout
|
||||
mux.Handle("POST /logout", handlers.HandleLogout(config, logger, conn))
|
||||
route("POST /logout", handler.Logout(config, logger, conn))
|
||||
|
||||
// Reauthentication request
|
||||
mux.Handle("POST /reauthenticate",
|
||||
middleware.RequiresLogin(
|
||||
handlers.HandleReauthenticate(logger, config, conn),
|
||||
))
|
||||
route("POST /reauthenticate", loggedIn(handler.Reauthenticate(logger, config, conn)))
|
||||
|
||||
// Profile page
|
||||
mux.Handle("GET /profile",
|
||||
middleware.RequiresLogin(
|
||||
handlers.HandleProfilePage(),
|
||||
))
|
||||
route("GET /profile", loggedIn(handler.ProfilePage()))
|
||||
|
||||
// Account page
|
||||
mux.Handle("GET /account",
|
||||
middleware.RequiresLogin(
|
||||
handlers.HandleAccountPage(),
|
||||
))
|
||||
mux.Handle("POST /account-select-page",
|
||||
middleware.RequiresLogin(
|
||||
handlers.HandleAccountSubpage(),
|
||||
))
|
||||
mux.Handle("POST /change-username",
|
||||
middleware.RequiresLogin(
|
||||
middleware.RequiresFresh(
|
||||
handlers.HandleChangeUsername(logger, conn),
|
||||
),
|
||||
))
|
||||
mux.Handle("POST /change-bio",
|
||||
middleware.RequiresLogin(
|
||||
handlers.HandleChangeBio(logger, conn),
|
||||
))
|
||||
mux.Handle("POST /change-password",
|
||||
middleware.RequiresLogin(
|
||||
middleware.RequiresFresh(
|
||||
handlers.HandleChangePassword(logger, conn),
|
||||
),
|
||||
))
|
||||
route("GET /account", loggedIn(handler.AccountPage()))
|
||||
route("POST /account-select-page", loggedIn(handler.AccountSubpage()))
|
||||
route("POST /change-username", loggedIn(fresh(handler.ChangeUsername(logger, conn))))
|
||||
route("POST /change-bio", loggedIn(handler.ChangeBio(logger, conn)))
|
||||
route("POST /change-password", loggedIn(fresh(handler.ChangePassword(logger, conn))))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user