diff options
-rw-r--r-- | genesungswuensche.go (renamed from genesungswünsche.go) | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/genesungswünsche.go b/genesungswuensche.go index e9ed63a..8347d43 100644 --- a/genesungswünsche.go +++ b/genesungswuensche.go @@ -529,7 +529,6 @@ func escapeHTML(s string) string { // indexHandler serves the main HTML page func (s *Server) indexHandler(w http.ResponseWriter, r *http.Request) { - log.Println("access from", r.RemoteAddr) emails, err := s.parseMaildir() if err != nil { http.Error(w, "Error reading emails", http.StatusInternalServerError) @@ -697,6 +696,10 @@ func (s *Server) indexHandler(w http.ResponseWriter, r *http.Request) { white-space: pre-wrap; } + ol li { + color: #333; + } + @media (max-width: 768px) { .from { font-size: 13px; @@ -720,7 +723,9 @@ func (s *Server) indexHandler(w http.ResponseWriter, r *http.Request) { <body> <h1>Genesungswünsche</h1> <div id="email-list"> + <ol reversed> {{range .}} + <li> <div class="email-item {{if .IsRead}}read{{end}}" data-id="{{.ID}}" data-filename="{{.FileName}}" data-subdir="{{.Subdir}}"> <input type="checkbox" class="email-toggle" id="toggle-{{.ID}}"> <label for="toggle-{{.ID}}" class="email-header"> @@ -742,7 +747,9 @@ func (s *Server) indexHandler(w http.ResponseWriter, r *http.Request) { </button> </div> </div> + </li> {{end}} + </ol> </div> <script> @@ -782,7 +789,7 @@ func (s *Server) indexHandler(w http.ResponseWriter, r *http.Request) { } function markAsRead(filename, emailItem, autoExpand = false, button = null) { - fetch('/api/mark-read', { + fetch('/genesung/api/mark-read', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -822,7 +829,7 @@ func (s *Server) indexHandler(w http.ResponseWriter, r *http.Request) { } function markAsUnread(filename, emailItem, button) { - fetch('/api/mark-unread', { + fetch('/genesung/api/mark-unread', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -978,15 +985,30 @@ func (s *Server) markUnreadHandler(w http.ResponseWriter, r *http.Request) { }) } +func auth(handler http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + user, pass, ok := r.BasicAuth() + + if !ok || user != "secret" || pass != "lair" { + w.Header().Set("WWW-Authenticate", `Basic realm="Genesung"`) + http.Error(w, "Unauthorized", http.StatusUnauthorized) + return + } + + log.Println("authorized access from", r.Header.Get("X-Forwarded-For")) + handler(w, r) + } +} + func main() { if len(os.Args) < 2 { fmt.Println("Usage: go run maildir-server.go <maildir-path> [port]") - fmt.Println("Example: go run maildir-server.go ~/Maildir 8080") + fmt.Println("Example: go run maildir-server.go ~/Maildir 4242") os.Exit(1) } maildirPath := os.Args[1] - port := "8080" + port := "4242" if len(os.Args) >= 3 { port = os.Args[2] } @@ -995,9 +1017,9 @@ func main() { maildirPath: maildirPath, } - http.HandleFunc("/", server.indexHandler) - http.HandleFunc("/api/mark-read", server.markReadHandler) - http.HandleFunc("/api/mark-unread", server.markUnreadHandler) + http.HandleFunc("/", auth(server.indexHandler)) + http.HandleFunc("/genesung/api/mark-read", auth(server.markReadHandler)) + http.HandleFunc("/genesung/api/mark-unread", auth(server.markUnreadHandler)) fmt.Printf("Starting server on http://localhost:%s\n", port) fmt.Printf("Serving emails from: %s\n", maildirPath) |