Noah
aa8d719fc4
* Add ability to (un)subscribe from comment threads on Forums and Photos. * Creating a forum post, replying to a post or adding a comment to a photo automatically subscribes you to be notified when somebody else adds a comment to the thing later. * At the top of each comment thread is a link to disable or re-enable your subscription. You can join a subscription without even needing to comment. If you click to disable notifications, they stay disabled even if you add another comment later.
92 lines
4.4 KiB
Go
92 lines
4.4 KiB
Go
// Package router configures web routes.
|
|
package router
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"code.nonshy.com/nonshy/website/pkg/config"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/account"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/admin"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/api"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/block"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/comment"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/forum"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/friend"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/inbox"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/index"
|
|
"code.nonshy.com/nonshy/website/pkg/controller/photo"
|
|
"code.nonshy.com/nonshy/website/pkg/middleware"
|
|
)
|
|
|
|
func New() http.Handler {
|
|
mux := http.NewServeMux()
|
|
|
|
// Register controller endpoints.
|
|
mux.HandleFunc("/", index.Create())
|
|
mux.HandleFunc("/favicon.ico", index.Favicon())
|
|
mux.HandleFunc("/about", index.About())
|
|
mux.HandleFunc("/faq", index.FAQ())
|
|
mux.HandleFunc("/tos", index.TOS())
|
|
mux.HandleFunc("/privacy", index.Privacy())
|
|
mux.HandleFunc("/contact", index.Contact())
|
|
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/", account.Profile()) // public access OK
|
|
mux.Handle("/photo/upload", middleware.LoginRequired(photo.Upload()))
|
|
mux.Handle("/photo/u/", middleware.LoginRequired(photo.UserPhotos()))
|
|
mux.Handle("/photo/view", middleware.LoginRequired(photo.View()))
|
|
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("/comments", middleware.LoginRequired(comment.PostComment()))
|
|
mux.Handle("/comments/subscription", middleware.LoginRequired(comment.Subscription()))
|
|
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()))
|
|
mux.Handle("/forum", middleware.CertRequired(forum.Landing()))
|
|
mux.Handle("/forum/post", middleware.CertRequired(forum.NewPost()))
|
|
mux.Handle("/forum/thread/", middleware.CertRequired(forum.Thread()))
|
|
mux.Handle("/f/", middleware.CertRequired(forum.Forum()))
|
|
|
|
// Admin endpoints.
|
|
mux.Handle("/admin", middleware.AdminRequired(admin.Dashboard()))
|
|
mux.Handle("/admin/photo/certification", middleware.AdminRequired(photo.AdminCertification()))
|
|
mux.Handle("/admin/feedback", middleware.AdminRequired(admin.Feedback()))
|
|
mux.Handle("/admin/user-action", middleware.AdminRequired(admin.UserActions()))
|
|
mux.Handle("/forum/admin", middleware.AdminRequired(forum.Manage()))
|
|
mux.Handle("/forum/admin/edit", middleware.AdminRequired(forum.AddEdit()))
|
|
|
|
// JSON API endpoints.
|
|
mux.HandleFunc("/v1/version", api.Version())
|
|
mux.HandleFunc("/v1/users/me", api.LoginOK())
|
|
mux.Handle("/v1/likes", middleware.LoginRequired(api.Likes()))
|
|
mux.Handle("/v1/notifications/read", middleware.LoginRequired(api.ReadNotification()))
|
|
|
|
// 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
|
|
}
|