added IMAP, LetsEncrypt, update layout
This commit is contained in:
+55
-2
@@ -9,8 +9,10 @@ import (
|
||||
"time"
|
||||
|
||||
"gopkg.in/ini.v1"
|
||||
"mailgoserver/internal/acmecert"
|
||||
"mailgoserver/internal/db"
|
||||
"mailgoserver/internal/dkim"
|
||||
"mailgoserver/internal/mailstore"
|
||||
"mailgoserver/internal/toolbox"
|
||||
)
|
||||
|
||||
@@ -21,6 +23,8 @@ const Prefix = "/pymta-manager"
|
||||
type App struct {
|
||||
DB *db.DB
|
||||
DKIM *dkim.Manager
|
||||
Mailstore *mailstore.Store
|
||||
ACME *acmecert.Manager
|
||||
Cfg *ini.File
|
||||
ConfigPath string
|
||||
Logger *toolbox.Logger
|
||||
@@ -31,8 +35,8 @@ type App struct {
|
||||
|
||||
// New builds the web UI. Templates and static assets come from the embedded
|
||||
// filesystem (embed.go), not disk, so no directory paths are needed for them.
|
||||
func New(database *db.DB, dkimMgr *dkim.Manager, cfg *ini.File, configPath string, logger *toolbox.Logger, smtpUp func() bool) (*App, error) {
|
||||
a := &App{DB: database, DKIM: dkimMgr, Cfg: cfg, ConfigPath: configPath, Logger: logger, SMTPUp: smtpUp}
|
||||
func New(database *db.DB, dkimMgr *dkim.Manager, mstore *mailstore.Store, acmeMgr *acmecert.Manager, cfg *ini.File, configPath string, logger *toolbox.Logger, smtpUp func() bool) (*App, error) {
|
||||
a := &App{DB: database, DKIM: dkimMgr, Mailstore: mstore, ACME: acmeMgr, Cfg: cfg, ConfigPath: configPath, Logger: logger, SMTPUp: smtpUp}
|
||||
if err := a.loadTemplates(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -87,6 +91,29 @@ func (a *App) Mux() *http.ServeMux {
|
||||
outer.HandleFunc("POST "+Prefix+"/login/passkey/finish", a.passkeyLoginFinish)
|
||||
outer.HandleFunc("POST "+Prefix+"/logout", a.logout)
|
||||
|
||||
// Self-service webmail portal — entirely separate prefix, session cookie, and
|
||||
// context keys from the admin dashboard above (see webmail_auth.go).
|
||||
outer.HandleFunc("GET "+MailboxPrefix+"/login", a.webmailLoginForm)
|
||||
outer.HandleFunc("POST "+MailboxPrefix+"/login", a.webmailLoginSubmit)
|
||||
outer.HandleFunc("GET "+MailboxPrefix+"/login/mfa", a.webmailMFAForm)
|
||||
outer.HandleFunc("POST "+MailboxPrefix+"/login/mfa", a.webmailMFASubmit)
|
||||
outer.HandleFunc("GET "+MailboxPrefix+"/login/passkey/begin", a.webmailPasskeyLoginBegin)
|
||||
outer.HandleFunc("POST "+MailboxPrefix+"/login/passkey/finish", a.webmailPasskeyLoginFinish)
|
||||
outer.HandleFunc("POST "+MailboxPrefix+"/logout", a.webmailLogout)
|
||||
|
||||
webmailMux := http.NewServeMux()
|
||||
webmailMux.HandleFunc("GET "+MailboxPrefix+"/", a.webmailDashboard)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/password", a.webmailChangePassword)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/totp/setup", a.webmailTOTPSetupBegin)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/totp/confirm", a.webmailTOTPSetupConfirm)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/totp/disable", a.webmailTOTPDisable)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/passkey/begin", a.webmailPasskeyRegisterBegin)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/passkey/finish", a.webmailPasskeyRegisterFinish)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/passkey/{id}/remove", a.webmailPasskeyRemove)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/apppasswords/add", a.webmailAddAppPassword)
|
||||
webmailMux.HandleFunc("POST "+MailboxPrefix+"/account/apppasswords/{pw_id}/revoke", a.webmailRevokeAppPassword)
|
||||
outer.Handle(MailboxPrefix+"/", a.requireMailboxAuth(webmailMux))
|
||||
|
||||
mux := http.NewServeMux()
|
||||
|
||||
mux.HandleFunc("GET "+Prefix+"/", a.dashboard)
|
||||
@@ -127,6 +154,27 @@ func (a *App) Mux() *http.ServeMux {
|
||||
mux.HandleFunc("GET "+Prefix+"/senders/{id}/edit", a.editSenderForm)
|
||||
mux.HandleFunc("POST "+Prefix+"/senders/{id}/edit", a.editSender)
|
||||
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes", a.mailboxesList)
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes/add", a.addMailboxForm)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/add", a.addMailbox)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/delete", a.disableMailbox)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/enable", a.enableMailbox)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/remove", a.removeMailbox)
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes/{id}/edit", a.editMailboxForm)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/edit", a.editMailbox)
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes/{id}/apppasswords", a.appPasswordsList)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/apppasswords/add", a.addAppPassword)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/apppasswords/{pw_id}/revoke", a.revokeAppPassword)
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes/{id}/aliases", a.aliasesList)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/aliases/add", a.addAlias)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/aliases/{alias_id}/remove", a.removeAlias)
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes/{id}/lists", a.listsPage)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/lists/add", a.addAllowBlockEntry)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/lists/{entry_id}/remove", a.removeAllowBlockEntry)
|
||||
mux.HandleFunc("GET "+Prefix+"/mailboxes/{id}/rules", a.rulesList)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/rules/add", a.addRule)
|
||||
mux.HandleFunc("POST "+Prefix+"/mailboxes/{id}/rules/{rule_id}/remove", a.removeRule)
|
||||
|
||||
mux.HandleFunc("GET "+Prefix+"/ips", a.ipsList)
|
||||
mux.HandleFunc("GET "+Prefix+"/ips/add", a.addIPForm)
|
||||
mux.HandleFunc("POST "+Prefix+"/ips/add", a.addIP)
|
||||
@@ -146,6 +194,11 @@ func (a *App) Mux() *http.ServeMux {
|
||||
mux.HandleFunc("POST "+Prefix+"/dkim/check_dns", a.checkDKIMDNS)
|
||||
mux.HandleFunc("POST "+Prefix+"/dkim/check_spf", a.checkSPFDNS)
|
||||
|
||||
mux.HandleFunc("GET "+Prefix+"/letsencrypt", a.letsEncryptPage)
|
||||
mux.HandleFunc("POST "+Prefix+"/letsencrypt/save", a.letsEncryptSave)
|
||||
mux.HandleFunc("POST "+Prefix+"/letsencrypt/obtain", a.letsEncryptObtainNow)
|
||||
mux.HandleFunc("POST "+Prefix+"/api/letsencrypt/upload_gcloud_key", a.uploadGCloudServiceAccount)
|
||||
|
||||
mux.HandleFunc("GET "+Prefix+"/logs", a.logs)
|
||||
|
||||
mux.HandleFunc("GET "+Prefix+"/settings", a.settingsPage)
|
||||
|
||||
Reference in New Issue
Block a user