mirror of
https://github.com/0ceanSlim/grain.git
synced 2024-10-30 01:26:32 +00:00
added NIP05 domains to whitelist
This commit is contained in:
parent
2ef15d6e17
commit
2ef7d4fe42
@ -12,6 +12,10 @@ pubkey_whitelist:
|
|||||||
kind_whitelist:
|
kind_whitelist:
|
||||||
enabled: false
|
enabled: false
|
||||||
kinds: #[0, 1]
|
kinds: #[0, 1]
|
||||||
|
#If pubkey_whitelist not enabled, domain_whitelist will be ignored
|
||||||
|
domain_whitelist:
|
||||||
|
enabled: false
|
||||||
|
domains: #["happytavern.co", "nostrplebs.com"]
|
||||||
rate_limit:
|
rate_limit:
|
||||||
ws_limit: 100 # Global rate limit for WebSocket messages (50 messages per second)
|
ws_limit: 100 # Global rate limit for WebSocket messages (50 messages per second)
|
||||||
ws_burst: 200 # Global burst limit for WebSocket messages (allows a burst of 100 messages)
|
ws_burst: 200 # Global burst limit for WebSocket messages (allows a burst of 100 messages)
|
||||||
|
@ -11,4 +11,5 @@ type ServerConfig struct {
|
|||||||
RateLimit RateLimitConfig `yaml:"rate_limit"`
|
RateLimit RateLimitConfig `yaml:"rate_limit"`
|
||||||
PubkeyWhitelist PubkeyWhitelistConfig `yaml:"pubkey_whitelist"`
|
PubkeyWhitelist PubkeyWhitelistConfig `yaml:"pubkey_whitelist"`
|
||||||
KindWhitelist KindWhitelistConfig `yaml:"kind_whitelist"`
|
KindWhitelist KindWhitelistConfig `yaml:"kind_whitelist"`
|
||||||
|
DomainWhitelist DomainWhitelistConfig `yaml:"domain_whitelist"`
|
||||||
}
|
}
|
||||||
|
6
config/types/whitelistDomainConfig.go
Normal file
6
config/types/whitelistDomainConfig.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type DomainWhitelistConfig struct {
|
||||||
|
Enabled bool `yaml:"enabled"`
|
||||||
|
Domains []string `yaml:"domains"`
|
||||||
|
}
|
@ -60,6 +60,19 @@ func HandleKind(ctx context.Context, evt relay.Event, ws *websocket.Conn, eventS
|
|||||||
rateLimiter := config.GetRateLimiter()
|
rateLimiter := config.GetRateLimiter()
|
||||||
sizeLimiter := config.GetSizeLimiter()
|
sizeLimiter := config.GetSizeLimiter()
|
||||||
|
|
||||||
|
if config.GetConfig().DomainWhitelist.Enabled {
|
||||||
|
domains := config.GetConfig().DomainWhitelist.Domains
|
||||||
|
pubkeys, err := utils.FetchPubkeysFromDomains(domains)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error fetching pubkeys from domains:", err)
|
||||||
|
response.SendNotice(ws, "", "Error fetching pubkeys from domains")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, pubkey := range pubkeys {
|
||||||
|
config.GetConfig().PubkeyWhitelist.Pubkeys = append(config.GetConfig().PubkeyWhitelist.Pubkeys, pubkey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the kind is whitelisted
|
// Check if the kind is whitelisted
|
||||||
if config.GetConfig().KindWhitelist.Enabled && !isKindWhitelisted(evt.Kind) {
|
if config.GetConfig().KindWhitelist.Enabled && !isKindWhitelisted(evt.Kind) {
|
||||||
response.SendOK(ws, evt.ID, false, "not allowed: event kind is not whitelisted")
|
response.SendOK(ws, evt.ID, false, "not allowed: event kind is not whitelisted")
|
||||||
|
48
server/utils/fetchPubkeysFromDomain.go
Normal file
48
server/utils/fetchPubkeysFromDomain.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NostrJSON struct {
|
||||||
|
Names map[string]string `json:"names"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func FetchPubkeysFromDomains(domains []string) ([]string, error) {
|
||||||
|
var pubkeys []string
|
||||||
|
for _, domain := range domains {
|
||||||
|
url := fmt.Sprintf("https://%s/.well-known/nostr.json", domain)
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error fetching nostr.json from domain:", domain, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
fmt.Println("Invalid response from domain:", domain, resp.Status)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error reading response body from domain:", domain, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var nostrData NostrJSON
|
||||||
|
err = json.Unmarshal(body, &nostrData)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error unmarshaling JSON from domain:", domain, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, pubkey := range nostrData.Names {
|
||||||
|
pubkeys = append(pubkeys, pubkey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pubkeys, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user