diff --git a/echo_handlers.go b/echo_handlers.go index 9072cfe6..0bfec7ec 100644 --- a/echo_handlers.go +++ b/echo_handlers.go @@ -179,14 +179,22 @@ func (svc *Service) AppsCreateHandler(c echo.Context) error { return c.NoContent(http.StatusUnauthorized) } - name := c.FormValue("name") + var requestData api.CreateAppRequest + if err := c.Bind(&requestData); err != nil { + return c.JSON(http.StatusBadRequest, ErrorResponse{ + Error: true, + Message: fmt.Sprintf("Bad request: %s", err.Error()), + }) + } + + name := requestData.Name var pairingPublicKey string var pairingSecretKey string - if c.FormValue("pubkey") == "" { + if requestData.Pubkey == "" { pairingSecretKey = nostr.GeneratePrivateKey() pairingPublicKey, _ = nostr.GetPublicKey(pairingSecretKey) } else { - pairingPublicKey = c.FormValue("pubkey") + pairingPublicKey = requestData.Pubkey //validate public key decoded, err := hex.DecodeString(pairingPublicKey) if err != nil || len(decoded) != 32 { @@ -198,12 +206,12 @@ func (svc *Service) AppsCreateHandler(c echo.Context) error { } } app := App{Name: name, NostrPubkey: pairingPublicKey} - maxAmount, _ := strconv.Atoi(c.FormValue("maxAmount")) - budgetRenewal := c.FormValue("budgetRenewal") + maxAmount, _ := strconv.Atoi(requestData.MaxAmount) + budgetRenewal := requestData.BudgetRenewal expiresAt := time.Time{} - if c.FormValue("expiresAt") != "" { - expiresAt, err = time.Parse(time.RFC3339, c.FormValue("expiresAt")) + if requestData.ExpiresAt != "" { + expiresAt, err = time.Parse(time.RFC3339, requestData.ExpiresAt) if err != nil { svc.Logger.Errorf("Invalid expiresAt: %s", pairingPublicKey) return c.JSON(http.StatusBadRequest, ErrorResponse{ @@ -223,7 +231,7 @@ func (svc *Service) AppsCreateHandler(c echo.Context) error { return err } - requestMethods := c.FormValue("requestMethods") + requestMethods := requestData.RequestMethods if requestMethods == "" { return fmt.Errorf("Won't create an app without request methods.") } @@ -272,8 +280,8 @@ func (svc *Service) AppsCreateHandler(c echo.Context) error { responseBody.Pubkey = pairingPublicKey responseBody.PairingSecret = pairingSecretKey - if c.FormValue("returnTo") != "" { - returnToUrl, err := url.Parse(c.FormValue("returnTo")) + if requestData.ReturnTo != "" { + returnToUrl, err := url.Parse(requestData.ReturnTo) if err == nil { query := returnToUrl.Query() query.Add("relay", publicRelayUrl) diff --git a/frontend/src/components/QRCode.tsx b/frontend/src/components/QRCode.tsx index e33bc8e2..682cb8b2 100644 --- a/frontend/src/components/QRCode.tsx +++ b/frontend/src/components/QRCode.tsx @@ -19,7 +19,6 @@ export type Props = { function QRCode({ value, size, level, className }: Props) { const isDarkMode = useDarkMode(); - console.log(isDarkMode); const fgColor = isDarkMode ? "#FFFFFF" : "#242424"; const bgColor = isDarkMode ? "#242424" : "#FFFFFF"; diff --git a/frontend/src/screens/apps/NewApp.tsx b/frontend/src/screens/apps/NewApp.tsx index 9ccdc71e..717baeff 100644 --- a/frontend/src/screens/apps/NewApp.tsx +++ b/frontend/src/screens/apps/NewApp.tsx @@ -115,25 +115,14 @@ const NewApp = () => { throw new Error("No CSRF token"); } - const formData = new FormData(); - formData.append("name", appName); - formData.append("maxAmount", maxAmount.toString()); - formData.append("budgetRenewal", budgetRenewal); - formData.append("expiresAt", expiresAt); - formData.append("requestMethods", requestMethods); - formData.append("pubkey", pubkey); - formData.append("returnTo", returnTo); - try { const response = await fetch("/api/apps", { method: "POST", headers: { "X-CSRF-Token": csrf, + "Content-Type": "application/json", }, - body: formData, - - // TODO: send consider sending JSON data - /*body: JSON.stringify({ + body: JSON.stringify({ name: appName, pubkey: pubkey, maxAmount: maxAmount.toString(), @@ -141,7 +130,7 @@ const NewApp = () => { expiresAt: expiresAt, requestMethods: requestMethods, returnTo: returnTo, - }),*/ + }), }); await validateFetchResponse(response); diff --git a/models/api/api.go b/models/api/api.go index b560ea80..754e122c 100644 --- a/models/api/api.go +++ b/models/api/api.go @@ -22,6 +22,16 @@ type ListAppsResponse struct { Apps []App `json:"apps"` } +type CreateAppRequest struct { + Name string `json:"name"` + Pubkey string `json:"pubkey"` + MaxAmount string `json:"maxAmount"` + BudgetRenewal string `json:"budgetRenewal"` + ExpiresAt string `json:"expiresAt"` + RequestMethods string `json:"requestMethods"` + ReturnTo string `json:"returnTo"` +} + type CreateAppResponse struct { PairingUri string `json:"pairingUri"` PairingSecret string `json:"pairingSecretKey"`