2023-09-06 20:49:18 +02:00
|
|
|
package main
|
|
|
|
|
2023-09-13 19:48:24 +02:00
|
|
|
import (
|
|
|
|
"context"
|
2023-10-11 00:19:33 +02:00
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"html/template"
|
2023-09-18 19:18:24 +00:00
|
|
|
"log"
|
2023-09-13 19:48:24 +02:00
|
|
|
|
|
|
|
"github.com/nbd-wtf/go-nostr"
|
|
|
|
)
|
|
|
|
|
2023-10-11 00:19:33 +02:00
|
|
|
func buildHTMLTree(entries []WhitelistEntry, invitedBy string) template.HTML {
|
|
|
|
html := "<ul>"
|
|
|
|
|
|
|
|
for _, entry := range entries {
|
|
|
|
if entry.InvitedBy == invitedBy {
|
|
|
|
user := getUserInfo(context.TODO(), entry.Pk)
|
|
|
|
html += fmt.Sprintf(`
|
|
|
|
<li>
|
|
|
|
<a class="user" href="nostr:%s">%s</a>
|
|
|
|
<a data-actionarg='[["p", "%v"]]' class="rembtn removefromrelay">x</a>
|
|
|
|
%s
|
|
|
|
</li>`, template.HTMLEscapeString(user.Npub),
|
|
|
|
template.HTMLEscapeString(user.Name),
|
|
|
|
entry.Pk,
|
|
|
|
buildHTMLTree(entries, entry.Pk))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
html += "</ul>"
|
|
|
|
return template.HTML(html)
|
|
|
|
}
|
|
|
|
|
2023-09-06 20:49:18 +02:00
|
|
|
func isPkInWhitelist(targetPk string) bool {
|
2023-10-11 00:19:33 +02:00
|
|
|
for i := 0; i < len(whitelist); i++ {
|
|
|
|
if whitelist[i].Pk == targetPk {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
2023-09-06 20:49:18 +02:00
|
|
|
}
|
|
|
|
|
2023-10-11 00:19:33 +02:00
|
|
|
func deleteFromWhitelistRecursively(ctx context.Context, target string) {
|
|
|
|
var updatedWhitelist []WhitelistEntry
|
2023-09-06 20:49:18 +02:00
|
|
|
var queue []string
|
|
|
|
|
2023-09-13 19:48:24 +02:00
|
|
|
// Remove from whitelist
|
2023-09-06 20:49:18 +02:00
|
|
|
for _, user := range whitelist {
|
|
|
|
if user.Pk != target {
|
|
|
|
updatedWhitelist = append(updatedWhitelist, user)
|
|
|
|
}
|
|
|
|
if user.InvitedBy == target {
|
2023-10-11 00:19:33 +02:00
|
|
|
queue = append(queue, user.Pk)
|
2023-09-06 20:49:18 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
whitelist = updatedWhitelist
|
2023-09-13 19:48:24 +02:00
|
|
|
|
|
|
|
// Remove all events
|
2023-09-18 19:18:24 +00:00
|
|
|
filter := nostr.Filter{
|
|
|
|
Authors: []string{target},
|
|
|
|
}
|
|
|
|
events, _ := db.QueryEvents(ctx, filter)
|
|
|
|
for ev := range events {
|
|
|
|
err := db.DeleteEvent(ctx, ev)
|
|
|
|
if err != nil {
|
|
|
|
log.Println("error while deleting event", err)
|
2023-09-13 19:48:24 +02:00
|
|
|
}
|
2023-09-18 19:18:24 +00:00
|
|
|
}
|
2023-09-13 19:48:24 +02:00
|
|
|
|
|
|
|
// Recursive
|
2023-09-06 20:49:18 +02:00
|
|
|
for _, pk := range queue {
|
2023-09-18 19:18:24 +00:00
|
|
|
deleteFromWhitelistRecursively(ctx, pk)
|
2023-09-06 20:49:18 +02:00
|
|
|
}
|
|
|
|
}
|
2023-10-11 00:19:33 +02:00
|
|
|
|
|
|
|
func getProfileInfoFromJson(jsonStr string) (string, string) {
|
|
|
|
fieldOrder := []string{"displayName", "display_name", "username", "name"}
|
|
|
|
|
|
|
|
var data map[string]interface{}
|
|
|
|
err := json.Unmarshal([]byte(jsonStr), &data)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("Error parsing JSON:", err)
|
|
|
|
return "", ""
|
|
|
|
}
|
|
|
|
|
|
|
|
var displayname string = "..."
|
|
|
|
var picture string = ""
|
|
|
|
|
|
|
|
for _, fieldName := range fieldOrder {
|
|
|
|
if val, ok := data[fieldName]; ok {
|
|
|
|
if strVal, ok := val.(string); ok && strVal != "" {
|
|
|
|
if fieldName == "picture" {
|
|
|
|
picture = strVal
|
|
|
|
}
|
|
|
|
if fieldName == "name" {
|
|
|
|
displayname = strVal
|
|
|
|
} else if displayname == "" {
|
|
|
|
displayname = strVal
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return displayname, picture
|
|
|
|
}
|