package main
import (
"bytes"
"html/template"
"net/http"
"git.neuromancer.ovh/bastien-mrq/gitfed/internal/i18n"
"git.neuromancer.ovh/bastien-mrq/gitfed/internal/store"
)
var adminTrustTpl = newTpl("admin-trust", `
{{.Flash}}
<p><a href="/admin">← {{t .Lang "nav.admin"}}</a></p>
<h1>{{t .Lang "admin.trust_title"}}</h1>
<table>
<tr><th>{{t .Lang "admin.trust_col_domain"}}</th><th>{{t .Lang "admin.trust_col_status"}}</th><th>{{t .Lang "admin.trust_col_first_seen"}}</th><th></th></tr>
{{range .Trust}}
<tr>
<td>{{.Domain}}</td>
<td><span class="badge {{.Status}}">{{if eq (print .Status) "pending"}}{{t $.Lang "admin.trust_status_pending"}}{{else}}{{t $.Lang "admin.trust_status_trusted"}}{{end}}</span></td>
<td class="muted">{{.FirstSeenAt.Local.Format "2006-01-02 15:04"}}</td>
<td>
{{if eq (print .Status) "pending"}}
<form class="inline" method="post" action="/admin/trust/approve">
<input type="hidden" name="domain" value="{{.Domain}}">
<button type="submit">{{t $.Lang "admin.approve"}}</button>
</form>
{{end}}
</td>
</tr>
{{else}}
<tr><td colspan="4" class="muted">{{t .Lang "admin.trust_empty"}}</td></tr>
{{end}}
</table>
<p class="muted">{{t .Lang "admin.trust_note"}}</p>
`)
func (s *server) handleAdminTrustList(w http.ResponseWriter, r *http.Request) {
lang := s.lang(r)
trust, err := s.ops.ListTrustedCAs()
if err != nil {
s.serverError(w, r, err)
return
}
var buf bytes.Buffer
_ = adminTrustTpl.Execute(&buf, struct {
Trust []store.TrustedCA
Lang string
Flash template.HTML
}{trust, string(lang), flash(r)})
s.render(w, r, i18n.T(lang, "admin.trust_title"), "admin", template.HTML(buf.String()))
}
func (s *server) handleAdminTrustApprove(w http.ResponseWriter, r *http.Request) {
lang := s.lang(r)
domain := r.FormValue("domain")
if err := s.ops.ApproveDomain(domain); err != nil {
redirectWithMsg(w, r, "/admin/trust", err.Error(), true)
return
}
redirectWithMsg(w, r, "/admin/trust", i18n.T(lang, "admin.msg_domain_approved", domain), false)
}