Initial Email-Forwarder scaffold
This commit is contained in:
commit
91e52aecd0
22 changed files with 1007 additions and 0 deletions
79
backend/00-router.go
Normal file
79
backend/00-router.go
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
package backend
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func RegisterRoutes(mux *http.ServeMux) {
|
||||
mux.HandleFunc("/", homeHandler)
|
||||
mux.HandleFunc("/login", loginHandler)
|
||||
|
||||
// Umzug (Konten pflegen + starten/beobachten)
|
||||
mux.HandleFunc("/accounts", accountsHandler) // TODO Codex (02/07)
|
||||
mux.HandleFunc("/accounts/save", accountSaveHandler) // TODO Codex
|
||||
mux.HandleFunc("/accounts/delete", accountDeleteHandler) // TODO Codex
|
||||
mux.HandleFunc("/accounts/test", accountTestHandler) // TODO Codex: Quelle+Ziel-Login pruefen
|
||||
mux.HandleFunc("/migrate/run", migrateRunHandler) // TODO Codex: RunMigration im Hintergrund
|
||||
mux.HandleFunc("/migrate/status", migrateStatusHandler) // TODO Codex: jobs-Fortschritt (HTMX-Poll)
|
||||
|
||||
// Viewer (lokale mbox betrachten + weiterleiten)
|
||||
mux.HandleFunc("/view", viewerHandler)
|
||||
mux.HandleFunc("/view/message", messageHandler)
|
||||
mux.HandleFunc("/view/forward", forwardHandler)
|
||||
}
|
||||
|
||||
// homeHandler rendert die Outlook-2013-Oberflaeche (Dreispalter). Der linke
|
||||
// Baum, die Nachrichtenliste und der Lesebereich werden per HTMX nachgeladen.
|
||||
func homeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// "active" ist die CSS-Klasse fuer den hervorgehobenen Reiter. Wenn Codex
|
||||
// weitere Seiten baut, jeweils den passenden Reiter aktiv setzen.
|
||||
renderShell(w, "active", `<div class="ef-empty">Konto links waehlen oder unter „Postfaecher" anlegen.</div>`)
|
||||
}
|
||||
|
||||
// renderShell ist das Grundgeruest im Outlook-2013-Look:
|
||||
// [ Ribbon: Umzug | Postfaecher | Betrachten | Weiterleiten | Einstellungen ]
|
||||
// [ Ordnerbaum (links) | Nachrichtenliste (mitte) | Lesebereich (rechts) ]
|
||||
func renderShell(w http.ResponseWriter, active, readingPane string) {
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>Email-Forwarder</title>
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
<script src="/static/htmx.min.js"></script></head>
|
||||
<body class="ol2013">
|
||||
<header class="ribbon">
|
||||
<div class="ribbon-title">Email-Forwarder</div>
|
||||
<nav class="ribbon-tabs">
|
||||
<a class="tab %s" href="/">Umzug</a>
|
||||
<a class="tab" href="/accounts">Postfächer</a>
|
||||
<a class="tab" href="/view">Betrachten</a>
|
||||
<a class="tab" href="/accounts">Einstellungen</a>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="three-pane">
|
||||
<aside class="pane pane-tree" id="tree"
|
||||
hx-get="/view" hx-trigger="load" hx-target="#tree" hx-swap="innerHTML">
|
||||
<div class="pane-head">Postfächer</div>
|
||||
</aside>
|
||||
<section class="pane pane-list" id="list">
|
||||
<div class="pane-head">Nachrichten</div>
|
||||
</section>
|
||||
<section class="pane pane-read" id="read">
|
||||
<div class="pane-head">Lesebereich</div>
|
||||
<div class="read-body">%s</div>
|
||||
</section>
|
||||
</div>
|
||||
<footer class="statusbar"><span id="mig-status"
|
||||
hx-get="/migrate/status" hx-trigger="every 3s" hx-swap="innerHTML">bereit</span></footer>
|
||||
</body></html>`, active, readingPane)
|
||||
}
|
||||
|
||||
// --- Stubs fuer die noch nicht gebauten Handler (TODO Codex) ---
|
||||
|
||||
func accountsHandler(w http.ResponseWriter, r *http.Request) {}
|
||||
func accountSaveHandler(w http.ResponseWriter, r *http.Request) {}
|
||||
func accountDeleteHandler(w http.ResponseWriter, r *http.Request) {}
|
||||
func accountTestHandler(w http.ResponseWriter, r *http.Request) {}
|
||||
func migrateRunHandler(w http.ResponseWriter, r *http.Request) {}
|
||||
func migrateStatusHandler(w http.ResponseWriter, r *http.Request) {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue