Cleaned up some of the webhooks stuff

This commit is contained in:
2024-08-19 22:19:57 -06:00
parent 96dff182cd
commit 43d29792e6
7 changed files with 23 additions and 213 deletions

View File

@ -1,42 +0,0 @@
package api
import (
"net/http"
"os"
"strings"
"github.com/clerkinc/clerk-sdk-go/clerk"
"github.com/labstack/echo/v4"
)
func Authed(c echo.Context) error {
apiKey := os.Getenv("CLERK_SECRET_KEY")
client, err := clerk.NewClient(apiKey)
if err != nil {
// handle error
println(err.Error())
}
// get session token from Authorization header
sessionToken := c.Request().Header.Get("Authorization")
sessionToken = strings.TrimPrefix(sessionToken, "Bearer ")
println(sessionToken)
// verify the session
sessClaims, err := client.VerifyToken(sessionToken)
if err != nil {
println(err.Error())
return c.String(http.StatusUnauthorized, "Unauthorized!")
}
// get the user, and say welcome!
user, err := client.Users().Read(sessClaims.Claims.Subject)
if err != nil {
panic(err)
}
return c.String(http.StatusOK, "Welcome "+*user.FirstName)
}

View File

@ -1,77 +0,0 @@
package webhooks
import (
"encoding/json"
"io"
"net/http"
"os"
"atri.dad/lib"
"github.com/labstack/echo/v4"
svix "github.com/svix/svix-webhooks/go"
)
// Types
type ClerkEventEmail struct {
EmailAddress string `json:"email_address"`
}
type ClerkEventData struct {
EmailAddresses []ClerkEventEmail `json:"email_addresses,omitempty"`
Id string `json:"id"`
}
type ClerkEvent struct {
Data ClerkEventData
Type string
}
// Event Handlers
func userCreatedHandler(event ClerkEvent) {
welcomeEmail := `
<h1>Thank you for making an atri.dad account!</h1>
<h2>There are a number of apps this account give you access to!</h2>
<br/>
<ul>
<li>Pollo: https://pollo.atri.dad/</li>
</ul>
`
lib.SendEmail(event.Data.EmailAddresses[0].EmailAddress, "apps@atri.dad", "Atri's Apps", welcomeEmail, "Welcome to Atri's Apps!")
}
// Main Handler/Router
func ClerkWebhookHandler(c echo.Context) error {
secret := os.Getenv("CLERK_WEBHOOK_SECRET")
wh, err := svix.NewWebhook(secret)
if err != nil {
return c.String(http.StatusBadRequest, "Unknown Validation Error")
}
headers := c.Request().Header
payload, err := io.ReadAll(c.Request().Body)
if err != nil {
return c.String(http.StatusBadRequest, "Failed to read request body!")
}
err = wh.Verify(payload, headers)
if err != nil {
return c.String(http.StatusBadRequest, "Cannot validate webhook authenticity!")
}
var parsed ClerkEvent
err = json.Unmarshal(payload, &parsed)
if err != nil {
return c.String(http.StatusBadRequest, "Invalid Json!")
}
switch parsed.Type {
case "user.created":
userCreatedHandler(parsed)
}
return c.String(http.StatusOK, "Success!")
}