Move admin-related stuff to the web
This commit is contained in:
parent
f34773e028
commit
5522542a7f
126
admin/view.go
126
admin/view.go
@ -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,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@ -1,7 +1,10 @@
|
|||||||
package admin
|
package web
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/bouncepaw/mycorrhiza/cfg"
|
||||||
|
"github.com/bouncepaw/mycorrhiza/user"
|
||||||
|
"github.com/bouncepaw/mycorrhiza/util"
|
||||||
"github.com/bouncepaw/mycorrhiza/viewutil"
|
"github.com/bouncepaw/mycorrhiza/viewutil"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"log"
|
"log"
|
||||||
@ -9,12 +12,98 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"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.
|
// handlerAdmin provides the admin panel.
|
||||||
func handlerAdmin(w http.ResponseWriter, rq *http.Request) {
|
func handlerAdmin(w http.ResponseWriter, rq *http.Request) {
|
||||||
w.Header().Set("Content-Type", "text/html;charset=utf-8")
|
w.Header().Set("Content-Type", "text/html;charset=utf-8")
|
||||||
10
web/pages.go
10
web/pages.go
@ -2,6 +2,7 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"embed"
|
"embed"
|
||||||
|
"github.com/bouncepaw/mycorrhiza/viewutil"
|
||||||
"github.com/bouncepaw/mycorrhiza/web/newtmpl"
|
"github.com/bouncepaw/mycorrhiza/web/newtmpl"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -10,7 +11,16 @@ var fs embed.FS
|
|||||||
|
|
||||||
var pageOrphans, pageBacklinks, pageUserList, pageChangePassword *newtmpl.Page
|
var pageOrphans, pageBacklinks, pageUserList, pageChangePassword *newtmpl.Page
|
||||||
|
|
||||||
|
var panelChain, listChain, newUserChain, editUserChain, deleteUserChain viewutil.Chain
|
||||||
|
|
||||||
func initPages() {
|
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{
|
pageOrphans = newtmpl.NewPage(fs, "views/orphans.html", map[string]string{
|
||||||
"orphaned hyphae": "Гифы-сироты",
|
"orphaned hyphae": "Гифы-сироты",
|
||||||
"orphan description": "Ниже перечислены гифы без ссылок на них.",
|
"orphan description": "Ниже перечислены гифы без ссылок на них.",
|
||||||
|
|||||||
13
web/web.go
13
web/web.go
@ -13,7 +13,6 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/bouncepaw/mycorrhiza/admin"
|
|
||||||
"github.com/bouncepaw/mycorrhiza/auth"
|
"github.com/bouncepaw/mycorrhiza/auth"
|
||||||
"github.com/bouncepaw/mycorrhiza/categories"
|
"github.com/bouncepaw/mycorrhiza/categories"
|
||||||
"github.com/bouncepaw/mycorrhiza/help"
|
"github.com/bouncepaw/mycorrhiza/help"
|
||||||
@ -84,7 +83,17 @@ func Handler() http.Handler {
|
|||||||
if cfg.UseAuth {
|
if cfg.UseAuth {
|
||||||
adminRouter := r.PathPrefix("/admin").Subrouter()
|
adminRouter := r.PathPrefix("/admin").Subrouter()
|
||||||
adminRouter.Use(groupMiddleware("admin"))
|
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()
|
settingsRouter := r.PathPrefix("/settings").Subrouter()
|
||||||
// TODO: check if necessary?
|
// TODO: check if necessary?
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user