forked from hailey.at/cocoon
An atproto PDS written in Go
at main 1.3 kB view raw
1package server 2 3import ( 4 "github.com/google/uuid" 5 "github.com/haileyok/cocoon/internal/helpers" 6 "github.com/haileyok/cocoon/models" 7 "github.com/labstack/echo/v4" 8) 9 10type ComAtprotoServerCreateInviteCodeRequest struct { 11 UseCount int `json:"useCount" validate:"required"` 12 ForAccount *string `json:"forAccount,omitempty"` 13} 14 15type ComAtprotoServerCreateInviteCodeResponse struct { 16 Code string `json:"code"` 17} 18 19func (s *Server) handleCreateInviteCode(e echo.Context) error { 20 ctx := e.Request().Context() 21 logger := s.logger.With("name", "handleServerCreateInviteCode") 22 23 var req ComAtprotoServerCreateInviteCodeRequest 24 if err := e.Bind(&req); err != nil { 25 logger.Error("error binding", "error", err) 26 return helpers.ServerError(e, nil) 27 } 28 29 if err := e.Validate(req); err != nil { 30 logger.Error("error validating", "error", err) 31 return helpers.InputError(e, nil) 32 } 33 34 ic := uuid.NewString() 35 36 var acc string 37 if req.ForAccount == nil { 38 acc = "admin" 39 } else { 40 acc = *req.ForAccount 41 } 42 43 if err := s.db.Create(ctx, &models.InviteCode{ 44 Code: ic, 45 Did: acc, 46 RemainingUseCount: req.UseCount, 47 }, nil).Error; err != nil { 48 logger.Error("error creating invite code", "error", err) 49 return helpers.ServerError(e, nil) 50 } 51 52 return e.JSON(200, ComAtprotoServerCreateInviteCodeResponse{ 53 Code: ic, 54 }) 55}