summaryrefslogtreecommitdiff
path: root/boardvoting.go
diff options
context:
space:
mode:
Diffstat (limited to 'boardvoting.go')
-rw-r--r--boardvoting.go18
1 files changed, 16 insertions, 2 deletions
diff --git a/boardvoting.go b/boardvoting.go
index 3b62116..93b1532 100644
--- a/boardvoting.go
+++ b/boardvoting.go
@@ -18,6 +18,7 @@ import (
"io/ioutil"
"net/http"
"os"
+ "sort"
"strconv"
"strings"
"time"
@@ -61,11 +62,14 @@ const (
)
func authenticateRequest(w http.ResponseWriter, r *http.Request, handler func(http.ResponseWriter, *http.Request)) {
+ emailsTried := make(map[string]bool)
for _, cert := range r.TLS.PeerCertificates {
for _, extKeyUsage := range cert.ExtKeyUsage {
if extKeyUsage == x509.ExtKeyUsageClientAuth {
for _, emailAddress := range cert.EmailAddresses {
- voter, err := FindVoterByAddress(emailAddress)
+ emailLower := strings.ToLower(emailAddress)
+ emailsTried[emailLower] = true
+ voter, err := FindVoterByAddress(emailLower)
if err != nil {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
return
@@ -82,8 +86,18 @@ func authenticateRequest(w http.ResponseWriter, r *http.Request, handler func(ht
}
needsAuth, ok := r.Context().Value(ctxNeedsAuth).(bool)
if ok && needsAuth {
+ var templateContext struct {
+ PageTitle string
+ Voter *Voter
+ Flashes interface{}
+ Emails []string
+ }
+ for k := range emailsTried {
+ templateContext.Emails = append(templateContext.Emails, k)
+ }
+ sort.Strings(templateContext.Emails)
w.WriteHeader(http.StatusForbidden)
- renderTemplate(w, []string{"denied.html", "header.html", "footer.html"}, nil)
+ renderTemplate(w, []string{"denied.html", "header.html", "footer.html"}, templateContext)
return
}
handler(w, r)