diff --git a/nostr/nostr.go b/nostr/nostr.go index 65511ab..015e4e0 100644 --- a/nostr/nostr.go +++ b/nostr/nostr.go @@ -21,6 +21,10 @@ type nostrWellKnown struct { Relays map[string][]string `json:"relays,omitempty"` } +type jsonErrorMessage struct { + Error string `json:"error"` +} + type NostrRequest struct { Name string `json:"name"` Key string `json:"key"` @@ -33,7 +37,6 @@ func RequestNostrAddr(w http.ResponseWriter, r *http.Request) { l := logger.Get() switch r.Method { case "GET": - l.Debug().Msg("get nostr register form") http.ServeFile(w, r, "html/nostr_form.html") case "POST": r.ParseForm() @@ -43,20 +46,28 @@ func RequestNostrAddr(w http.ResponseWriter, r *http.Request) { exists := redisCli.Exists(ctx, rKey) if exists.Val() == 1 { w.WriteHeader(http.StatusConflict) + json.NewEncoder(w).Encode(&jsonErrorMessage{ + Error: "username already registered", + }) return } rKey = getRkey("requested", r.FormValue("Name"), getHostname(r.Host)) exists = redisCli.Exists(ctx, rKey) if exists.Val() == 1 { w.WriteHeader(http.StatusConflict) + json.NewEncoder(w).Encode(&jsonErrorMessage{ + Error: "username already requested, try again in a few minutes", + }) return } // get the hexkey hexKey, err := convertNpubToHex(r.FormValue("Key")) if err != nil { - l.Error().Msg("unable to convert npub to hex") w.WriteHeader(http.StatusBadRequest) + json.NewEncoder(w).Encode(&jsonErrorMessage{ + Error: err.Error(), + }) return } @@ -81,6 +92,9 @@ func RequestNostrAddr(w http.ResponseWriter, r *http.Request) { _, err = lnd.Request(rKey, jsonUser, exp) if err != nil { w.WriteHeader(http.StatusServiceUnavailable) + json.NewEncoder(w).Encode(&jsonErrorMessage{ + Error: "service unavailable", + }) return } requestKey := getRkey("requested", r.FormValue("Name"), getHostname(r.Host)) @@ -105,11 +119,17 @@ func GetNostrAddr(w http.ResponseWriter, r *http.Request) { addr, err := redisCli.Get(ctx, search).Result() if err != nil { w.WriteHeader(http.StatusNotFound) + json.NewEncoder(w).Encode(&jsonErrorMessage{ + Error: "username not registered", + }) return } dec, err := b64.StdEncoding.DecodeString(addr) if err != nil { w.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(w).Encode(&jsonErrorMessage{ + Error: "internal server error", + }) return } @@ -154,11 +174,11 @@ func getHostname(hostname string) string { func convertNpubToHex(npub string) (string, error) { if !strings.HasPrefix(npub, "npub1") { - return "", errors.New("Not an npub key") + return "", errors.New("key does not start with npub1 prefix") } _, hex, err := nip19.Decode(npub) if err != nil { - return "", errors.New("Unable to decode npub") + return "", errors.New("unable to decode npub key") } return hex.(string), nil