75 lines
2.6 KiB
Go
75 lines
2.6 KiB
Go
package web
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"net/http"
|
|
|
|
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/templaterepo"
|
|
)
|
|
|
|
func (s *server) templateRepositoriesPage(w http.ResponseWriter, r *http.Request) {
|
|
data, ok := s.adminPageData(w, r, "Administration", "administration")
|
|
if !ok {
|
|
return
|
|
}
|
|
entries, err := s.repository.ListTemplateRepositories(r.Context())
|
|
if err != nil {
|
|
s.problem(w, http.StatusInternalServerError, message("error.internal"))
|
|
return
|
|
}
|
|
data.TemplateRepositories = entries
|
|
s.render(w, http.StatusOK, "settings.html", data)
|
|
}
|
|
|
|
func (s *server) templateRepositoryCreateForm(w http.ResponseWriter, r *http.Request) {
|
|
actor, ok := s.requireAdminMutation(w, r, false)
|
|
if !ok {
|
|
return
|
|
}
|
|
in := templaterepo.Input{Name: r.FormValue("name"), URL: r.FormValue("url")}
|
|
if _, err := s.repository.CreateTemplateRepository(r.Context(), in); err != nil {
|
|
if errors.Is(err, templaterepo.ErrInvalid) {
|
|
s.templateRepositoriesRender(w, r, http.StatusUnprocessableEntity, in, localized(s.language(r, actor.Language), "template_repositories.validation_error"))
|
|
return
|
|
}
|
|
s.templateRepositoriesRender(w, r, http.StatusUnprocessableEntity, in, localized(s.language(r, actor.Language), "template_repositories.duplicate_error"))
|
|
return
|
|
}
|
|
http.Redirect(w, r, "/administration#repositories", http.StatusSeeOther)
|
|
}
|
|
|
|
func (s *server) templateRepositoryDeleteForm(w http.ResponseWriter, r *http.Request) {
|
|
actor, ok := s.requireAdminMutation(w, r, false)
|
|
if !ok {
|
|
return
|
|
}
|
|
if err := s.repository.DeleteTemplateRepository(r.Context(), r.PathValue("id")); err != nil {
|
|
if errors.Is(err, templaterepo.ErrInvalid) || errors.Is(err, sql.ErrNoRows) {
|
|
s.problem(w, http.StatusNotFound, localized(s.language(r, actor.Language), "template_repositories.not_found"))
|
|
return
|
|
}
|
|
s.problem(w, http.StatusInternalServerError, message("error.internal"))
|
|
return
|
|
}
|
|
http.Redirect(w, r, "/administration#repositories", http.StatusSeeOther)
|
|
}
|
|
|
|
func (s *server) templateRepositoriesRender(w http.ResponseWriter, r *http.Request, status int, in templaterepo.Input, formError string) {
|
|
data, ok := s.adminPageData(w, r, "Template repositories", "administration")
|
|
if !ok {
|
|
return
|
|
}
|
|
entries, err := s.repository.ListTemplateRepositories(r.Context())
|
|
if err != nil {
|
|
s.problem(w, http.StatusInternalServerError, message("error.internal"))
|
|
return
|
|
}
|
|
data.TemplateRepositories, data.TemplateRepositoryInput, data.Error = entries, in, formError
|
|
if err := s.populateAdminUsers(r, &data); err != nil {
|
|
s.problem(w, http.StatusInternalServerError, "The users are unavailable.")
|
|
return
|
|
}
|
|
s.render(w, status, "settings.html", data)
|
|
}
|