Gitfed
bastien-mrq/gitfed / cmd / gitfed-web / handlers_admin_trust.go
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">&larr; {{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)
}