button to delete all events from removed users.

This commit is contained in:
fiatjaf 2024-12-10 23:23:15 -03:00
parent 83b962b1fd
commit 18e098b536
3 changed files with 47 additions and 3 deletions

View File

@ -10,10 +10,11 @@ import (
)
func inviteTreeHandler(w http.ResponseWriter, r *http.Request) {
loggedUser := getLoggedUser(r)
content := inviteTreePageHTML(r.Context(), InviteTreePageParams{
loggedUser: getLoggedUser(r),
loggedUser: loggedUser,
})
htmlgo.Fprint(w, baseHTML(content), r.Context())
htmlgo.Fprint(w, baseHTML(content, loggedUser), r.Context())
}
func addToWhitelistHandler(w http.ResponseWriter, r *http.Request) {
@ -49,6 +50,41 @@ func removeFromWhitelistHandler(w http.ResponseWriter, r *http.Request) {
htmlgo.Fprint(w, content, r.Context())
}
// this deletes all events from users not in the relay anymore
func cleanupStuffFromExcludedUsersHandler(w http.ResponseWriter, r *http.Request) {
loggedUser := getLoggedUser(r)
if loggedUser != s.RelayPubkey {
http.Error(w, "unauthorized, only the relay owner can do this", 403)
return
}
oldLimit := db.MaxLimit
db.MaxLimit = 999999
ch, err := db.QueryEvents(r.Context(), nostr.Filter{Limit: db.MaxLimit})
if err != nil {
http.Error(w, "failed to query", 500)
return
}
db.MaxLimit = oldLimit
count := 0
for evt := range ch {
if isPublicKeyInWhitelist(evt.PubKey) {
continue
}
if err := db.DeleteEvent(r.Context(), evt); err != nil {
http.Error(w, fmt.Sprintf(
"failed to delete %s: %s -- stopping, %d events were deleted before this error", evt, err, count), 500)
return
}
count++
}
fmt.Fprintf(w, "deleted %d events", count)
}
func reportsViewerHandler(w http.ResponseWriter, r *http.Request) {
events, err := db.QueryEvents(r.Context(), nostr.Filter{
Kinds: []int{1984},

View File

@ -106,6 +106,7 @@ func main() {
// http routes
relay.Router().HandleFunc("/add-to-whitelist", addToWhitelistHandler)
relay.Router().HandleFunc("/remove-from-whitelist", removeFromWhitelistHandler)
relay.Router().HandleFunc("/cleanup", cleanupStuffFromExcludedUsersHandler)
relay.Router().HandleFunc("/reports", reportsViewerHandler)
relay.Router().HandleFunc("/browse/", joubleHandler)
relay.Router().Handle("/static/", http.FileServer(http.FS(static)))

View File

@ -9,9 +9,14 @@ import (
const buttonClass = "rounded-md text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300"
func baseHTML(inside HTMLComponent) HTMLComponent {
func baseHTML(inside HTMLComponent, loggedUser string) HTMLComponent {
navItemClass := "text-gray-600 hover:bg-gray-200 rounded-md px-3 py-2 font-medium"
cleanupButton := Span("")
if loggedUser == s.RelayPubkey {
cleanupButton = A().Text("clear stuff").Href("/cleanup").Class(navItemClass)
}
return HTML(
Head(
Meta().Charset("utf-8"),
@ -30,6 +35,7 @@ func baseHTML(inside HTMLComponent) HTMLComponent {
A().Text("invite tree").Href("/").Class(navItemClass).Attr("hx-boost", "true", "hx-target", "main", "hx-select", "main"),
A().Text("browse").Href("/browse").Class(navItemClass),
A().Text("reports").Href("/reports").Class(navItemClass).Attr("hx-boost", "true", "hx-target", "main", "hx-select", "main"),
cleanupButton,
A().Text("").Href("#").Class(navItemClass).
Attr("_", `
on click if my innerText is equal to "login" get window.nostr.signEvent({created_at: Math.round(Date.now()/1000), kind: 27235, tags: [['domain', "`+s.Domain+`"]], content: ''}) then get JSON.stringify(it) then set cookies['nip98'] to it otherwise call cookies.clear('nip98') end then call location.reload()
@ -137,5 +143,6 @@ func reportsPageHTML(ctx context.Context, params ReportsPageParams) HTMLComponen
H1("reports received").Class("text-xl p-4"),
Div(items...),
),
params.loggedUser,
)
}