package web import ( "net/http" "github.com/julienschmidt/httprouter" "github.com/justinas/alice" ) func (app *application) routes() http.Handler { dynamicRouter := httprouter.New() dynamicRouter.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { app.notFound(w) }) dynamicRouter.HandlerFunc(http.MethodGet, routePath("home"), app.home) dynamicRouter.HandlerFunc(http.MethodGet, routePath("healthcheck"), app.healthcheck) dynamicRouter.HandlerFunc(http.MethodGet, routePath("privacy"), app.privacy) dynamicRouter.HandlerFunc(http.MethodGet, routePath("login"), app.signIn) dynamicRouter.HandlerFunc(http.MethodPost, routePath("login"), app.signInPost) dynamicRouter.HandlerFunc(http.MethodGet, routePath("activate"), app.activateUser) dynamicRouter.HandlerFunc(http.MethodPost, routePath("activate"), app.activateUserPost) dynamicRouter.Handler(http.MethodPost, routePath("logout"), app.requireAuthentication(http.HandlerFunc(app.signOutPost))) dynamicRouter.Handler(http.MethodGet, routePath("account"), app.requireActivatedUser(http.HandlerFunc(app.account))) dynamicRouter.Handler(http.MethodPost, routePath("account.profile"), app.requireActivatedUser(http.HandlerFunc(app.accountProfilePost))) dynamicRouter.Handler(http.MethodPost, routePath("account.password"), app.requireActivatedUser(http.HandlerFunc(app.accountPasswordPost))) dynamicRouter.Handler(http.MethodPost, routePath("account.email"), app.requireActivatedUser(http.HandlerFunc(app.accountEmailPost))) dynamicRouter.Handler(http.MethodGet, routePath("account.email-confirm"), app.requireActivatedUser(http.HandlerFunc(app.accountEmailConfirm))) dynamicRouter.Handler(http.MethodPost, routePath("account.email-confirm"), app.requireActivatedUser(http.HandlerFunc(app.accountEmailConfirmPost))) dynamicRouter.Handler(http.MethodPost, routePath("account.session.delete"), app.requireActivatedUser(http.HandlerFunc(app.accountSessionDeletePost))) dynamicRouter.Handler(http.MethodGet, routePath("settings"), app.requireActivatedUser(http.HandlerFunc(app.settings))) dynamicRouter.Handler(http.MethodGet, routePath("admin"), app.requireAdmin(http.HandlerFunc(app.admin))) dynamicRouter.Handler(http.MethodPost, routePath("admin.user.invite"), app.requireAdmin(http.HandlerFunc(app.adminUserInvitePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.user.role"), app.requireAdmin(http.HandlerFunc(app.adminUserRolePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.user.delete"), app.requireAdmin(http.HandlerFunc(app.adminUserDeletePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.role.new"), app.requireAdmin(http.HandlerFunc(app.adminRoleCreatePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.role.update"), app.requireAdmin(http.HandlerFunc(app.adminRoleUpdatePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.role.delete"), app.requireAdmin(http.HandlerFunc(app.adminRoleDeletePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.application-settings"), app.requireAdmin(http.HandlerFunc(app.adminApplicationSettingsPost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.test-mail"), app.requireAdmin(http.HandlerFunc(app.adminTestMailPost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.species-category.new"), app.requireAdmin(http.HandlerFunc(app.adminSpeciesCategoryCreatePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.species-category.edit"), app.requireAdmin(http.HandlerFunc(app.adminSpeciesCategoryUpdatePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.species-category.delete"), app.requireAdmin(http.HandlerFunc(app.adminSpeciesCategoryDeletePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.task-priority.new"), app.requireAdmin(http.HandlerFunc(app.adminTaskPriorityCreatePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.task-priority.edit"), app.requireAdmin(http.HandlerFunc(app.adminTaskPriorityUpdatePost))) dynamicRouter.Handler(http.MethodPost, routePath("admin.task-priority.delete"), app.requireAdmin(http.HandlerFunc(app.adminTaskPriorityDeletePost))) dynamicRouter.Handler(http.MethodGet, routePath("gardens"), app.requireActivatedUser(http.HandlerFunc(app.gardens))) dynamicRouter.Handler(http.MethodGet, routePath("garden.new"), app.requireActivatedUser(app.requireApplicationPermission("gardens:create", http.HandlerFunc(app.gardenCreate)))) dynamicRouter.Handler(http.MethodPost, routePath("garden.new"), app.requireActivatedUser(app.requireApplicationPermission("gardens:create", http.HandlerFunc(app.gardenCreatePost)))) dynamicRouter.Handler(http.MethodGet, routePath("garden.edit"), app.requireActivatedUser(http.HandlerFunc(app.gardenEdit))) dynamicRouter.Handler(http.MethodPost, routePath("garden.edit"), app.requireActivatedUser(http.HandlerFunc(app.gardenEditPost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.delete"), app.requireActivatedUser(http.HandlerFunc(app.gardenDeletePost))) dynamicRouter.Handler(http.MethodGet, routePath("garden.dashboard"), app.requireActivatedUser(http.HandlerFunc(app.gardenDashboard))) dynamicRouter.Handler(http.MethodGet, routePath("garden.search"), app.requireActivatedUser(http.HandlerFunc(app.gardenSearch))) dynamicRouter.Handler(http.MethodGet, routePath("garden.journal"), app.requireActivatedUser(http.HandlerFunc(app.journal))) dynamicRouter.Handler(http.MethodGet, routePath("garden.pinboard"), app.requireActivatedUser(http.HandlerFunc(app.pinboard))) dynamicRouter.Handler(http.MethodGet, routePath("garden.images"), app.requireActivatedUser(http.HandlerFunc(app.images))) dynamicRouter.Handler(http.MethodGet, routePath("garden.image.data"), app.requireActivatedUser(http.HandlerFunc(app.imageData))) dynamicRouter.Handler(http.MethodGet, routePath("journal.new"), app.requireActivatedUser(http.HandlerFunc(app.journalCreate))) dynamicRouter.Handler(http.MethodPost, routePath("journal.new"), app.requireActivatedUser(http.HandlerFunc(app.journalSave))) dynamicRouter.Handler(http.MethodGet, routePath("journal.edit"), app.requireActivatedUser(http.HandlerFunc(app.journalEdit))) dynamicRouter.Handler(http.MethodPost, routePath("journal.edit"), app.requireActivatedUser(http.HandlerFunc(app.journalSave))) dynamicRouter.Handler(http.MethodPost, routePath("journal.delete"), app.requireActivatedUser(http.HandlerFunc(app.journalDelete))) dynamicRouter.Handler(http.MethodGet, routePath("journal.attachment"), app.requireActivatedUser(http.HandlerFunc(app.journalAttachment))) dynamicRouter.Handler(http.MethodGet, routePath("pinboard.new"), app.requireActivatedUser(http.HandlerFunc(app.pinboardCreate))) dynamicRouter.Handler(http.MethodPost, routePath("pinboard.new"), app.requireActivatedUser(http.HandlerFunc(app.pinboardSave))) dynamicRouter.Handler(http.MethodGet, routePath("pinboard.edit"), app.requireActivatedUser(http.HandlerFunc(app.pinboardEdit))) dynamicRouter.Handler(http.MethodPost, routePath("pinboard.edit"), app.requireActivatedUser(http.HandlerFunc(app.pinboardSave))) dynamicRouter.Handler(http.MethodPost, routePath("pinboard.delete"), app.requireActivatedUser(http.HandlerFunc(app.pinboardDelete))) dynamicRouter.Handler(http.MethodGet, routePath("pinboard.attachment"), app.requireActivatedUser(http.HandlerFunc(app.pinboardAttachment))) dynamicRouter.Handler(http.MethodGet, routePath("garden.members"), app.requireActivatedUser(http.HandlerFunc(app.gardenMembers))) dynamicRouter.Handler(http.MethodPost, routePath("garden.invite.new"), app.requireActivatedUser(http.HandlerFunc(app.gardenInvitePost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.member.role"), app.requireActivatedUser(http.HandlerFunc(app.gardenMemberRolePost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.member.delete"), app.requireActivatedUser(http.HandlerFunc(app.gardenMemberDeletePost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.member.transfer"), app.requireActivatedUser(http.HandlerFunc(app.gardenOwnershipPost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.invite.delete"), app.requireActivatedUser(http.HandlerFunc(app.gardenInviteDeletePost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.role.update"), app.requireActivatedUser(http.HandlerFunc(app.gardenRoleSettingsPost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.role.new"), app.requireActivatedUser(http.HandlerFunc(app.gardenRoleCreatePost))) dynamicRouter.Handler(http.MethodPost, routePath("garden.role.delete"), app.requireActivatedUser(http.HandlerFunc(app.gardenRoleDeletePost))) dynamicRouter.Handler(http.MethodGet, routePath("invite"), app.requireActivatedUser(http.HandlerFunc(app.acceptInvite))) dynamicRouter.Handler(http.MethodPost, routePath("invite"), app.requireActivatedUser(http.HandlerFunc(app.acceptInvitePost))) dynamicRouter.Handler(http.MethodGet, routePath("plants"), app.requireActivatedUser(http.HandlerFunc(app.plants))) dynamicRouter.Handler(http.MethodGet, routePath("plant.new"), app.requireActivatedUser(http.HandlerFunc(app.plantCreate))) dynamicRouter.Handler(http.MethodPost, routePath("plant.new"), app.requireActivatedUser(http.HandlerFunc(app.plantCreatePost))) dynamicRouter.Handler(http.MethodGet, routePath("plant.edit"), app.requireActivatedUser(http.HandlerFunc(app.plantEdit))) dynamicRouter.Handler(http.MethodPost, routePath("plant.edit"), app.requireActivatedUser(http.HandlerFunc(app.plantEditPost))) dynamicRouter.Handler(http.MethodPost, routePath("plant.delete"), app.requireActivatedUser(http.HandlerFunc(app.plantDelete))) dynamicRouter.Handler(http.MethodPost, routePath("plant.status"), app.requireActivatedUser(http.HandlerFunc(app.plantStatusPost))) dynamicRouter.Handler(http.MethodPost, routePath("plant.template-opt-out"), app.requireActivatedUser(http.HandlerFunc(app.plantTemplateOptOutPost))) dynamicRouter.Handler(http.MethodGet, routePath("plant.task-row"), app.requireActivatedUser(http.HandlerFunc(app.plantTaskRow))) dynamicRouter.Handler(http.MethodPost, routePath("plant.task-row"), app.requireActivatedUser(http.HandlerFunc(app.plantTaskRowPost))) dynamicRouter.Handler(http.MethodGet, routePath("plant.template-tasks"), app.requireActivatedUser(http.HandlerFunc(app.plantTemplateTasks))) dynamicRouter.Handler(http.MethodGet, routePath("plant.template-task"), app.requireActivatedUser(http.HandlerFunc(app.plantTemplateTaskView))) dynamicRouter.Handler(http.MethodGet, routePath("plant.location.new"), app.requireActivatedUser(http.HandlerFunc(app.plantLocationCreate))) dynamicRouter.Handler(http.MethodPost, routePath("plant.location.new"), app.requireActivatedUser(http.HandlerFunc(app.plantLocationSave))) dynamicRouter.Handler(http.MethodGet, routePath("plant.location.edit"), app.requireActivatedUser(http.HandlerFunc(app.plantLocationEdit))) dynamicRouter.Handler(http.MethodPost, routePath("plant.location.edit"), app.requireActivatedUser(http.HandlerFunc(app.plantLocationSave))) dynamicRouter.Handler(http.MethodPost, routePath("plant.location.delete"), app.requireActivatedUser(http.HandlerFunc(app.plantLocationDeletePost))) dynamicRouter.Handler(http.MethodGet, routePath("locations"), app.requireActivatedUser(http.HandlerFunc(app.locations))) dynamicRouter.Handler(http.MethodGet, routePath("location.new"), app.requireActivatedUser(http.HandlerFunc(app.locationCreate))) dynamicRouter.Handler(http.MethodPost, routePath("location.new"), app.requireActivatedUser(http.HandlerFunc(app.locationCreatePost))) dynamicRouter.Handler(http.MethodGet, routePath("location.view"), app.requireActivatedUser(http.HandlerFunc(app.locationEdit))) dynamicRouter.Handler(http.MethodGet, routePath("location.edit"), app.requireActivatedUser(http.HandlerFunc(app.locationEdit))) dynamicRouter.Handler(http.MethodPost, routePath("location.edit"), app.requireActivatedUser(http.HandlerFunc(app.locationEditPost))) dynamicRouter.Handler(http.MethodPost, routePath("location.delete"), app.requireActivatedUser(http.HandlerFunc(app.locationDelete))) dynamicRouter.Handler(http.MethodGet, routePath("species"), app.requireActivatedUser(http.HandlerFunc(app.speciesList))) dynamicRouter.Handler(http.MethodGet, routePath("species.new"), app.requireActivatedUser(http.HandlerFunc(app.speciesCreate))) dynamicRouter.Handler(http.MethodPost, routePath("species.new"), app.requireActivatedUser(http.HandlerFunc(app.speciesSave))) dynamicRouter.Handler(http.MethodGet, routePath("species.edit"), app.requireActivatedUser(http.HandlerFunc(app.speciesEdit))) dynamicRouter.Handler(http.MethodPost, routePath("species.edit"), app.requireActivatedUser(http.HandlerFunc(app.speciesSave))) dynamicRouter.Handler(http.MethodPost, routePath("species.delete"), app.requireActivatedUser(http.HandlerFunc(app.speciesDelete))) dynamicRouter.Handler(http.MethodPost, routePath("species.care.new"), app.requireActivatedUser(http.HandlerFunc(app.careInstructionSave))) dynamicRouter.Handler(http.MethodPost, routePath("species.care.edit"), app.requireActivatedUser(http.HandlerFunc(app.careInstructionSave))) dynamicRouter.Handler(http.MethodPost, routePath("species.care.delete"), app.requireActivatedUser(http.HandlerFunc(app.careInstructionDelete))) dynamicRouter.Handler(http.MethodGet, routePath("tasks"), app.requireActivatedUser(http.HandlerFunc(app.tasks))) dynamicRouter.Handler(http.MethodGet, routePath("tasks.calendar"), app.requireActivatedUser(http.HandlerFunc(app.taskCalendar))) dynamicRouter.Handler(http.MethodGet, routePath("task.new"), app.requireActivatedUser(http.HandlerFunc(app.taskCreate))) dynamicRouter.Handler(http.MethodPost, routePath("task.new"), app.requireActivatedUser(http.HandlerFunc(app.taskSave))) dynamicRouter.Handler(http.MethodGet, routePath("task.edit"), app.requireActivatedUser(http.HandlerFunc(app.taskEdit))) dynamicRouter.Handler(http.MethodPost, routePath("task.edit"), app.requireActivatedUser(http.HandlerFunc(app.taskSave))) dynamicRouter.Handler(http.MethodPost, routePath("task.complete"), app.requireActivatedUser(http.HandlerFunc(app.taskComplete))) dynamicRouter.Handler(http.MethodPost, routePath("task.reopen"), app.requireActivatedUser(http.HandlerFunc(app.taskReopen))) dynamicRouter.Handler(http.MethodPost, routePath("task.delete"), app.requireActivatedUser(http.HandlerFunc(app.taskDelete))) dynamicRouter.Handler(http.MethodGet, routePath("task-template.new"), app.requireActivatedUser(http.HandlerFunc(app.taskTemplateCreate))) dynamicRouter.Handler(http.MethodPost, routePath("task-template.new"), app.requireActivatedUser(http.HandlerFunc(app.taskTemplateSave))) dynamicRouter.Handler(http.MethodGet, routePath("task-template.edit"), app.requireActivatedUser(http.HandlerFunc(app.taskTemplateEdit))) dynamicRouter.Handler(http.MethodPost, routePath("task-template.edit"), app.requireActivatedUser(http.HandlerFunc(app.taskTemplateSave))) dynamicRouter.Handler(http.MethodPost, routePath("task-template.delete"), app.requireActivatedUser(http.HandlerFunc(app.taskTemplateDelete))) dynamic := alice.New(app.withAPIClient, app.authenticate, app.noSurf).Then(dynamicRouter) router := http.NewServeMux() router.Handle("/static/", http.FileServer(http.FS(files))) router.HandleFunc("/ping", ping) router.Handle("/", dynamic) standard := alice.New(app.recoverPanic, app.logRequest, secureHeaders) return standard.Then(router) }