Replaced legacy `*.orly` module imports with `next.orly.dev/pkg` paths across the codebase for consistency. Removed legacy `go.mod` files from sub-packages, consolidating dependency management. Added Dockerfiles and configurations for benchmarking environments.
81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"sort"
|
|
|
|
"lol.mleku.dev/chk"
|
|
"lol.mleku.dev/log"
|
|
"next.orly.dev/pkg/protocol/relayinfo"
|
|
"next.orly.dev/pkg/version"
|
|
)
|
|
|
|
// HandleRelayInfo generates and returns a relay information document in JSON
|
|
// format based on the server's configuration and supported NIPs.
|
|
//
|
|
// # Parameters
|
|
//
|
|
// - w: HTTP response writer used to send the generated document.
|
|
//
|
|
// - r: HTTP request object containing incoming client request data.
|
|
//
|
|
// # Expected Behaviour
|
|
//
|
|
// The function constructs a relay information document using either the
|
|
// Informer interface implementation or predefined server configuration. It
|
|
// returns this document as a JSON response to the client.
|
|
func (s *Server) HandleRelayInfo(w http.ResponseWriter, r *http.Request) {
|
|
r.Header.Set("Content-Type", "application/json")
|
|
log.D.Ln("handling relay information document")
|
|
var info *relayinfo.T
|
|
supportedNIPs := relayinfo.GetList(
|
|
relayinfo.BasicProtocol,
|
|
// relayinfo.Authentication,
|
|
// relayinfo.EncryptedDirectMessage,
|
|
relayinfo.EventDeletion,
|
|
relayinfo.RelayInformationDocument,
|
|
// relayinfo.GenericTagQueries,
|
|
// relayinfo.NostrMarketplace,
|
|
relayinfo.EventTreatment,
|
|
// relayinfo.CommandResults,
|
|
relayinfo.ParameterizedReplaceableEvents,
|
|
// relayinfo.ExpirationTimestamp,
|
|
relayinfo.ProtectedEvents,
|
|
relayinfo.RelayListMetadata,
|
|
)
|
|
if s.Config.ACLMode != "none" {
|
|
supportedNIPs = relayinfo.GetList(
|
|
relayinfo.BasicProtocol,
|
|
relayinfo.Authentication,
|
|
// relayinfo.EncryptedDirectMessage,
|
|
relayinfo.EventDeletion,
|
|
relayinfo.RelayInformationDocument,
|
|
// relayinfo.GenericTagQueries,
|
|
// relayinfo.NostrMarketplace,
|
|
relayinfo.EventTreatment,
|
|
// relayinfo.CommandResults,
|
|
// relayinfo.ParameterizedReplaceableEvents,
|
|
// relayinfo.ExpirationTimestamp,
|
|
relayinfo.ProtectedEvents,
|
|
relayinfo.RelayListMetadata,
|
|
)
|
|
}
|
|
sort.Sort(supportedNIPs)
|
|
log.T.Ln("supported NIPs", supportedNIPs)
|
|
info = &relayinfo.T{
|
|
Name: s.Config.AppName,
|
|
Description: version.Description,
|
|
Nips: supportedNIPs,
|
|
Software: version.URL,
|
|
Version: version.V,
|
|
Limitation: relayinfo.Limits{
|
|
AuthRequired: s.Config.ACLMode != "none",
|
|
RestrictedWrites: s.Config.ACLMode != "none",
|
|
},
|
|
Icon: "https://cdn.satellite.earth/ac9778868fbf23b63c47c769a74e163377e6ea94d3f0f31711931663d035c4f6.png",
|
|
}
|
|
if err := json.NewEncoder(w).Encode(info); chk.E(err) {
|
|
}
|
|
}
|