package Api import ( "log" "net/http" "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Api/Auth" "github.com/gorilla/mux" ) func loggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Printf( "%s %s %s, Content Length: %d", r.RemoteAddr, r.Method, r.RequestURI, r.ContentLength, ) next.ServeHTTP(w, r) }) } func authenticationMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var ( userSession Auth.Session err error ) userSession, err = Auth.CheckCookie(r) if err != nil { http.Error(w, "Forbidden", http.StatusUnauthorized) return } log.Printf( "Authenticated user: %s (%s)", userSession.Email, userSession.UserID, ) next.ServeHTTP(w, r) }) } func InitApiEndpoints(router *mux.Router) { var ( api *mux.Router adminApi *mux.Router ) log.Println("Initializing API routes...") api = router.PathPrefix("/api/v1/").Subrouter() api.Use(loggingMiddleware) api.HandleFunc("/posts/front-page", getFrontPagePosts).Methods("GET") api.HandleFunc("/post", getPostsPublic).Methods("GET") api.HandleFunc("/post/{postID}", getPostPublic).Methods("GET") // Define routes for authentication api.HandleFunc("/admin/login", Auth.Login).Methods("POST") api.HandleFunc("/admin/logout", Auth.Logout).Methods("GET") api.HandleFunc("/admin/me", Auth.Me).Methods("GET") adminApi = api.PathPrefix("/admin/").Subrouter() adminApi.Use(authenticationMiddleware) // Define routes for posts api adminApi.HandleFunc("/post", getPosts).Methods("GET") adminApi.HandleFunc("/post/{postID}", getPost).Methods("GET") adminApi.HandleFunc("/post", createPost).Methods("POST") adminApi.HandleFunc("/post/{postID}", updatePost).Methods("PUT") adminApi.HandleFunc("/post/{postID}", deletePost).Methods("DELETE") adminApi.HandleFunc("/post/{postID}/publish", publishPost).Methods("GET") adminApi.HandleFunc("/post/{postID}/image", createPostImage).Methods("POST") adminApi.HandleFunc("/post/{postID}/image/{imageID}", deletePostImage).Methods("DELETE") // Define routes for users api adminApi.HandleFunc("/user", getUsers).Methods("GET") adminApi.HandleFunc("/user", createUser).Methods("POST") adminApi.HandleFunc("/user/{userID}", getUser).Methods("GET") adminApi.HandleFunc("/user/{userID}", updateUser).Methods("PUT") adminApi.HandleFunc("/user/{userID}", deletePost).Methods("DELETE") adminApi.HandleFunc("/user/{userID}/update-password", Auth.UpdatePassword).Methods("PUT") }