khatru-pyramid/utils.go

106 lines
2.3 KiB
Go
Raw Normal View History

2023-09-06 20:49:18 +02:00
package main
2023-09-13 19:48:24 +02:00
import (
"context"
"encoding/json"
"fmt"
"html/template"
2023-09-13 19:48:24 +02:00
"github.com/nbd-wtf/go-nostr"
)
func buildHTMLTree(entries []WhitelistEntry, invitedBy string) template.HTML {
html := "<ul>"
for _, entry := range entries {
if entry.InvitedBy == invitedBy {
2023-10-16 23:09:12 -03:00
user := getUserInfo(context.TODO(), entry.PublicKey)
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),
2023-10-16 23:09:12 -03:00
entry.PublicKey,
buildHTMLTree(entries, entry.PublicKey))
}
}
html += "</ul>"
return template.HTML(html)
}
2023-09-06 20:49:18 +02:00
func isPkInWhitelist(targetPk string) bool {
for i := 0; i < len(whitelist); i++ {
2023-10-16 23:09:12 -03:00
if whitelist[i].PublicKey == targetPk {
return true
}
}
return false
2023-09-06 20:49:18 +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 {
2023-10-16 23:09:12 -03:00
if user.PublicKey != target {
2023-09-06 20:49:18 +02:00
updatedWhitelist = append(updatedWhitelist, user)
}
if user.InvitedBy == target {
2023-10-16 23:09:12 -03:00
queue = append(queue, user.PublicKey)
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 {
2023-10-16 23:09:12 -03:00
log.Error().Err(err).Msg("failed to delete event")
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
}
}
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 {
2023-10-16 23:09:12 -03:00
log.Error().Err(err).Msg("failed to read profile from json")
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
}