64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package webui
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"net/http"
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
// listsPage shows a mailbox's allow-list and block-list entries plus forms to add to
|
||
|
|
// either. A single handler set keyed by list_type, backing the single
|
||
|
|
// esrv_mailbox_allowblock table (not two near-identical resources).
|
||
|
|
func (a *App) listsPage(w http.ResponseWriter, r *http.Request) {
|
||
|
|
mailbox, ok := a.mailboxWithAccess(w, r)
|
||
|
|
if !ok {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
entries, err := a.DB.ListAllowBlock(mailbox.ID)
|
||
|
|
if err != nil {
|
||
|
|
setFlash(w, "error", "Error loading lists")
|
||
|
|
}
|
||
|
|
var allow, block []any
|
||
|
|
for _, e := range entries {
|
||
|
|
if e.ListType == "allow" {
|
||
|
|
allow = append(allow, e)
|
||
|
|
} else {
|
||
|
|
block = append(block, e)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
a.render(w, r, "mailbox_lists.html", M{"active": "mailboxes", "mailbox": mailbox, "allow": allow, "block": block})
|
||
|
|
}
|
||
|
|
|
||
|
|
func (a *App) addAllowBlockEntry(w http.ResponseWriter, r *http.Request) {
|
||
|
|
mailbox, ok := a.mailboxWithAccess(w, r)
|
||
|
|
if !ok {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
listType := r.FormValue("list_type")
|
||
|
|
pattern := strings.ToLower(strings.TrimSpace(r.FormValue("pattern")))
|
||
|
|
if (listType != "allow" && listType != "block") || pattern == "" {
|
||
|
|
setFlash(w, "error", "Please provide a valid address or @domain pattern")
|
||
|
|
http.Redirect(w, r, Prefix+"/mailboxes/"+idStr(r)+"/lists", http.StatusFound)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if _, err := a.DB.AddAllowBlockEntry(mailbox.ID, listType, pattern); err != nil {
|
||
|
|
setFlash(w, "error", "Error adding entry")
|
||
|
|
} else {
|
||
|
|
setFlash(w, "success", "Entry added")
|
||
|
|
}
|
||
|
|
http.Redirect(w, r, Prefix+"/mailboxes/"+idStr(r)+"/lists", http.StatusFound)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (a *App) removeAllowBlockEntry(w http.ResponseWriter, r *http.Request) {
|
||
|
|
mailbox, ok := a.mailboxWithAccess(w, r)
|
||
|
|
if !ok {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
entryID := int64(atoi(r.PathValue("entry_id")))
|
||
|
|
if err := a.DB.RemoveAllowBlockEntry(entryID, mailbox.ID); err != nil {
|
||
|
|
setFlash(w, "error", "Error removing entry")
|
||
|
|
} else {
|
||
|
|
setFlash(w, "success", "Entry removed")
|
||
|
|
}
|
||
|
|
http.Redirect(w, r, Prefix+"/mailboxes/"+idStr(r)+"/lists", http.StatusFound)
|
||
|
|
}
|