diff --git a/admin/view.go b/admin/view.go deleted file mode 100644 index 26c1ce2..0000000 --- a/admin/view.go +++ /dev/null @@ -1,126 +0,0 @@ -package admin - -import ( - "embed" - "github.com/bouncepaw/mycorrhiza/cfg" - "github.com/bouncepaw/mycorrhiza/user" - "github.com/bouncepaw/mycorrhiza/util" - "github.com/bouncepaw/mycorrhiza/viewutil" - "github.com/gorilla/mux" - "net/http" -) - -const adminTranslationRu = ` -{{define "panel title"}}Панель админстратора{{end}} -{{define "panel safe section title"}}Безопасная секция{{end}} -{{define "panel link about"}}Об этой вики{{end}} -{{define "panel update header"}}Обновить ссылки в верхней панели{{end}} -{{define "panel link user list"}}Список пользователей{{end}} -{{define "panel users"}}Управление пользователями{{end}} -{{define "panel unsafe section title"}}Опасная секция{{end}} -{{define "panel shutdown"}}Выключить вики{{end}} -{{define "panel reindex hyphae"}}Переиндексировать гифы{{end}} -{{define "panel interwiki"}}Интервики{{end}} - -{{define "manage users"}}Управление пользователями{{end}} -{{define "create user"}}Создать пользователя{{end}} -{{define "reindex users"}}Переиндексировать пользователей{{end}} -{{define "name"}}Имя{{end}} -{{define "group"}}Группа{{end}} -{{define "registered at"}}Зарегистрирован{{end}} -{{define "actions"}}Действия{{end}} -{{define "edit"}}Изменить{{end}} - -{{define "new user"}}Новый пользователь{{end}} -{{define "password"}}Пароль{{end}} -{{define "confirm password"}}Подтвердить пароль{{end}} -{{define "change password"}}Изменить пароль{{end}} -{{define "non local password change"}}Поменять пароль можно только у локальных пользователей.{{end}} -{{define "create"}}Создать{{end}} - -{{define "change group"}}Изменить группу{{end}} -{{define "user x"}}Пользователь {{.}}{{end}} -{{define "update"}}Обновить{{end}} -{{define "delete user"}}Удалить пользователя{{end}} -{{define "delete user tip"}}Удаляет пользователя из базы данных. Правки пользователя будут сохранены. Имя пользователя освободится для повторной регистрации.{{end}} - -{{define "delete user?"}}Удалить пользователя {{.}}?{{end}} -{{define "delete user warning"}}Вы уверены, что хотите удалить этого пользователя из базы данных? Это действие нельзя отменить.{{end}} -` - -var ( - //go:embed *.html - fs embed.FS - panelChain, listChain, newUserChain, editUserChain, deleteUserChain viewutil.Chain -) - -func Init(rtr *mux.Router) { - rtr.HandleFunc("/shutdown", handlerAdminShutdown).Methods(http.MethodPost) - rtr.HandleFunc("/reindex-users", handlerAdminReindexUsers).Methods(http.MethodPost) - - rtr.HandleFunc("/new-user", handlerAdminUserNew).Methods(http.MethodGet, http.MethodPost) - rtr.HandleFunc("/users/{username}/edit", handlerAdminUserEdit).Methods(http.MethodGet, http.MethodPost) - rtr.HandleFunc("/users/{username}/change-password", handlerAdminUserChangePassword).Methods(http.MethodPost) - rtr.HandleFunc("/users/{username}/delete", handlerAdminUserDelete).Methods(http.MethodGet, http.MethodPost) - rtr.HandleFunc("/users", handlerAdminUsers) - - rtr.HandleFunc("/", handlerAdmin) - - panelChain = viewutil.CopyEnRuWith(fs, "view_panel.html", adminTranslationRu) - listChain = viewutil.CopyEnRuWith(fs, "view_user_list.html", adminTranslationRu) - newUserChain = viewutil.CopyEnRuWith(fs, "view_new_user.html", adminTranslationRu) - editUserChain = viewutil.CopyEnRuWith(fs, "view_edit_user.html", adminTranslationRu) - deleteUserChain = viewutil.CopyEnRuWith(fs, "view_delete_user.html", adminTranslationRu) -} - -func viewPanel(meta viewutil.Meta) { - viewutil.ExecutePage(meta, panelChain, &viewutil.BaseData{}) -} - -type listData struct { - *viewutil.BaseData - UserHypha string - Users []*user.User -} - -func viewList(meta viewutil.Meta, users []*user.User) { - viewutil.ExecutePage(meta, listChain, listData{ - BaseData: &viewutil.BaseData{}, - UserHypha: cfg.UserHypha, - Users: users, - }) -} - -type newUserData struct { - *viewutil.BaseData - Form util.FormData -} - -func viewNewUser(meta viewutil.Meta, form util.FormData) { - viewutil.ExecutePage(meta, newUserChain, newUserData{ - BaseData: &viewutil.BaseData{}, - Form: form, - }) -} - -type editDeleteUserData struct { - *viewutil.BaseData - Form util.FormData - U *user.User -} - -func viewEditUser(meta viewutil.Meta, form util.FormData, u *user.User) { - viewutil.ExecutePage(meta, editUserChain, editDeleteUserData{ - BaseData: &viewutil.BaseData{}, - Form: form, - U: u, - }) -} - -func viewDeleteUser(meta viewutil.Meta, form util.FormData, u *user.User) { - viewutil.ExecutePage(meta, deleteUserChain, editDeleteUserData{ - BaseData: &viewutil.BaseData{}, - Form: form, - U: u, - }) -} diff --git a/admin/admin.go b/web/admin.go similarity index 56% rename from admin/admin.go rename to web/admin.go index ef5ac3d..bc30a2e 100644 --- a/admin/admin.go +++ b/web/admin.go @@ -1,7 +1,10 @@ -package admin +package web import ( "fmt" + "github.com/bouncepaw/mycorrhiza/cfg" + "github.com/bouncepaw/mycorrhiza/user" + "github.com/bouncepaw/mycorrhiza/util" "github.com/bouncepaw/mycorrhiza/viewutil" "github.com/gorilla/mux" "log" @@ -9,12 +12,98 @@ import ( "net/http" "os" "sort" - - "github.com/bouncepaw/mycorrhiza/cfg" - "github.com/bouncepaw/mycorrhiza/user" - "github.com/bouncepaw/mycorrhiza/util" ) +const adminTranslationRu = ` +{{define "panel title"}}Панель админстратора{{end}} +{{define "panel safe section title"}}Безопасная секция{{end}} +{{define "panel link about"}}Об этой вики{{end}} +{{define "panel update header"}}Обновить ссылки в верхней панели{{end}} +{{define "panel link user list"}}Список пользователей{{end}} +{{define "panel users"}}Управление пользователями{{end}} +{{define "panel unsafe section title"}}Опасная секция{{end}} +{{define "panel shutdown"}}Выключить вики{{end}} +{{define "panel reindex hyphae"}}Переиндексировать гифы{{end}} +{{define "panel interwiki"}}Интервики{{end}} + +{{define "manage users"}}Управление пользователями{{end}} +{{define "create user"}}Создать пользователя{{end}} +{{define "reindex users"}}Переиндексировать пользователей{{end}} +{{define "name"}}Имя{{end}} +{{define "group"}}Группа{{end}} +{{define "registered at"}}Зарегистрирован{{end}} +{{define "actions"}}Действия{{end}} +{{define "edit"}}Изменить{{end}} + +{{define "new user"}}Новый пользователь{{end}} +{{define "password"}}Пароль{{end}} +{{define "confirm password"}}Подтвердить пароль{{end}} +{{define "change password"}}Изменить пароль{{end}} +{{define "non local password change"}}Поменять пароль можно только у локальных пользователей.{{end}} +{{define "create"}}Создать{{end}} + +{{define "change group"}}Изменить группу{{end}} +{{define "user x"}}Пользователь {{.}}{{end}} +{{define "update"}}Обновить{{end}} +{{define "delete user"}}Удалить пользователя{{end}} +{{define "delete user tip"}}Удаляет пользователя из базы данных. Правки пользователя будут сохранены. Имя пользователя освободится для повторной регистрации.{{end}} + +{{define "delete user?"}}Удалить пользователя {{.}}?{{end}} +{{define "delete user warning"}}Вы уверены, что хотите удалить этого пользователя из базы данных? Это действие нельзя отменить.{{end}} +` + +func viewPanel(meta viewutil.Meta) { + viewutil.ExecutePage(meta, panelChain, &viewutil.BaseData{}) +} + +type listData struct { + *viewutil.BaseData + UserHypha string + Users []*user.User +} + +func viewList(meta viewutil.Meta, users []*user.User) { + viewutil.ExecutePage(meta, listChain, listData{ + BaseData: &viewutil.BaseData{}, + UserHypha: cfg.UserHypha, + Users: users, + }) +} + +type newUserData struct { + *viewutil.BaseData + Form util.FormData +} + +func viewNewUser(meta viewutil.Meta, form util.FormData) { + viewutil.ExecutePage(meta, newUserChain, newUserData{ + BaseData: &viewutil.BaseData{}, + Form: form, + }) +} + +type editDeleteUserData struct { + *viewutil.BaseData + Form util.FormData + U *user.User +} + +func viewEditUser(meta viewutil.Meta, form util.FormData, u *user.User) { + viewutil.ExecutePage(meta, editUserChain, editDeleteUserData{ + BaseData: &viewutil.BaseData{}, + Form: form, + U: u, + }) +} + +func viewDeleteUser(meta viewutil.Meta, form util.FormData, u *user.User) { + viewutil.ExecutePage(meta, deleteUserChain, editDeleteUserData{ + BaseData: &viewutil.BaseData{}, + Form: form, + U: u, + }) +} + // handlerAdmin provides the admin panel. func handlerAdmin(w http.ResponseWriter, rq *http.Request) { w.Header().Set("Content-Type", "text/html;charset=utf-8") diff --git a/web/pages.go b/web/pages.go index d650166..30aab16 100644 --- a/web/pages.go +++ b/web/pages.go @@ -2,6 +2,7 @@ package web import ( "embed" + "github.com/bouncepaw/mycorrhiza/viewutil" "github.com/bouncepaw/mycorrhiza/web/newtmpl" ) @@ -10,7 +11,16 @@ var fs embed.FS var pageOrphans, pageBacklinks, pageUserList, pageChangePassword *newtmpl.Page +var panelChain, listChain, newUserChain, editUserChain, deleteUserChain viewutil.Chain + func initPages() { + + panelChain = viewutil.CopyEnRuWith(fs, "views/admin-panel.html", adminTranslationRu) + listChain = viewutil.CopyEnRuWith(fs, "views/admin-user-list.html", adminTranslationRu) + newUserChain = viewutil.CopyEnRuWith(fs, "views/admin-new-user.html", adminTranslationRu) + editUserChain = viewutil.CopyEnRuWith(fs, "views/admin-edit-user.html", adminTranslationRu) + deleteUserChain = viewutil.CopyEnRuWith(fs, "views/admin-delete-user.html", adminTranslationRu) + pageOrphans = newtmpl.NewPage(fs, "views/orphans.html", map[string]string{ "orphaned hyphae": "Гифы-сироты", "orphan description": "Ниже перечислены гифы без ссылок на них.", diff --git a/admin/view_delete_user.html b/web/views/admin-delete-user.html similarity index 100% rename from admin/view_delete_user.html rename to web/views/admin-delete-user.html diff --git a/admin/view_edit_user.html b/web/views/admin-edit-user.html similarity index 100% rename from admin/view_edit_user.html rename to web/views/admin-edit-user.html diff --git a/admin/view_new_user.html b/web/views/admin-new-user.html similarity index 100% rename from admin/view_new_user.html rename to web/views/admin-new-user.html diff --git a/admin/view_panel.html b/web/views/admin-panel.html similarity index 100% rename from admin/view_panel.html rename to web/views/admin-panel.html diff --git a/admin/view_user_list.html b/web/views/admin-user-list.html similarity index 100% rename from admin/view_user_list.html rename to web/views/admin-user-list.html diff --git a/web/web.go b/web/web.go index a3caf17..99694cb 100644 --- a/web/web.go +++ b/web/web.go @@ -13,7 +13,6 @@ import ( "net/url" "strings" - "github.com/bouncepaw/mycorrhiza/admin" "github.com/bouncepaw/mycorrhiza/auth" "github.com/bouncepaw/mycorrhiza/categories" "github.com/bouncepaw/mycorrhiza/help" @@ -84,7 +83,17 @@ func Handler() http.Handler { if cfg.UseAuth { adminRouter := r.PathPrefix("/admin").Subrouter() adminRouter.Use(groupMiddleware("admin")) - admin.Init(adminRouter) + + adminRouter.HandleFunc("/shutdown", handlerAdminShutdown).Methods(http.MethodPost) + adminRouter.HandleFunc("/reindex-users", handlerAdminReindexUsers).Methods(http.MethodPost) + + adminRouter.HandleFunc("/new-user", handlerAdminUserNew).Methods(http.MethodGet, http.MethodPost) + adminRouter.HandleFunc("/users/{username}/edit", handlerAdminUserEdit).Methods(http.MethodGet, http.MethodPost) + adminRouter.HandleFunc("/users/{username}/change-password", handlerAdminUserChangePassword).Methods(http.MethodPost) + adminRouter.HandleFunc("/users/{username}/delete", handlerAdminUserDelete).Methods(http.MethodGet, http.MethodPost) + adminRouter.HandleFunc("/users", handlerAdminUsers) + + adminRouter.HandleFunc("/", handlerAdmin) settingsRouter := r.PathPrefix("/settings").Subrouter() // TODO: check if necessary?