Noah Petherbridge
96e5b1abfa
Implement block lists. They work like friend lists but are unidirectional, but take effect in both directions (blocker and blockee can not see one another on the site -- except admin users can always see all users). * Profile page says 404 * User gallery says 404 * User search page filters out blocked users * Compose endpoint blocks sending messages to blocked users (except admin) * Site Gallery filters photos by blocked (and uncertified) users * Inbox page hides chat list for blocked users (can still read the chat history if you have a link to the old thread)
72 lines
3.2 KiB
Go
72 lines
3.2 KiB
Go
// Package router configures web routes.
|
|
package router
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.kirsle.net/apps/gosocial/pkg/config"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/account"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/admin"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/api"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/block"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/friend"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/inbox"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/index"
|
|
"git.kirsle.net/apps/gosocial/pkg/controller/photo"
|
|
"git.kirsle.net/apps/gosocial/pkg/middleware"
|
|
)
|
|
|
|
func New() http.Handler {
|
|
mux := http.NewServeMux()
|
|
|
|
// Register controller endpoints.
|
|
mux.HandleFunc("/", index.Create())
|
|
mux.HandleFunc("/login", account.Login())
|
|
mux.HandleFunc("/logout", account.Logout())
|
|
mux.HandleFunc("/signup", account.Signup())
|
|
mux.HandleFunc("/forgot-password", account.ForgotPassword())
|
|
mux.HandleFunc("/settings/confirm-email", account.ConfirmEmailChange())
|
|
|
|
// Login Required. Pages that non-certified users can access.
|
|
mux.Handle("/me", middleware.LoginRequired(account.Dashboard()))
|
|
mux.Handle("/settings", middleware.LoginRequired(account.Settings()))
|
|
mux.Handle("/account/delete", middleware.LoginRequired(account.Delete()))
|
|
mux.Handle("/u/", middleware.LoginRequired(account.Profile()))
|
|
mux.Handle("/photo/upload", middleware.LoginRequired(photo.Upload()))
|
|
mux.Handle("/photo/u/", middleware.LoginRequired(photo.UserPhotos()))
|
|
mux.Handle("/photo/edit", middleware.LoginRequired(photo.Edit()))
|
|
mux.Handle("/photo/delete", middleware.LoginRequired(photo.Delete()))
|
|
mux.Handle("/photo/certification", middleware.LoginRequired(photo.Certification()))
|
|
mux.Handle("/messages", middleware.LoginRequired(inbox.Inbox()))
|
|
mux.Handle("/messages/read/", middleware.LoginRequired(inbox.Inbox()))
|
|
mux.Handle("/messages/compose", middleware.LoginRequired(inbox.Compose()))
|
|
mux.Handle("/friends", middleware.LoginRequired(friend.Friends()))
|
|
mux.Handle("/friends/add", middleware.LoginRequired(friend.AddFriend()))
|
|
mux.Handle("/users/block", middleware.LoginRequired(block.BlockUser()))
|
|
mux.Handle("/users/blocked", middleware.LoginRequired(block.Blocked()))
|
|
mux.Handle("/admin/unimpersonate", middleware.LoginRequired(admin.Unimpersonate()))
|
|
|
|
// Certification Required. Pages that only full (verified) members can access.
|
|
mux.Handle("/photo/gallery", middleware.CertRequired(photo.SiteGallery()))
|
|
mux.Handle("/members", middleware.CertRequired(account.Search()))
|
|
|
|
// Admin endpoints.
|
|
mux.Handle("/admin", middleware.AdminRequired(admin.Dashboard()))
|
|
mux.Handle("/admin/photo/certification", middleware.AdminRequired(photo.AdminCertification()))
|
|
mux.Handle("/admin/user-action", middleware.AdminRequired(admin.UserActions()))
|
|
|
|
// JSON API endpoints.
|
|
mux.HandleFunc("/v1/version", api.Version())
|
|
mux.HandleFunc("/v1/users/me", api.LoginOK())
|
|
|
|
// Static files.
|
|
mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir(config.StaticPath))))
|
|
|
|
// Global middlewares.
|
|
withSession := middleware.Session(mux)
|
|
withCSRF := middleware.CSRF(withSession)
|
|
withRecovery := middleware.Recovery(withCSRF)
|
|
withLogger := middleware.Logging(withRecovery)
|
|
return withLogger
|
|
}
|