An atproto PDS written in Go
103
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 0.4.3 50 lines 1.3 kB view raw
1package server 2 3import ( 4 "fmt" 5 "time" 6 7 "github.com/haileyok/cocoon/internal/helpers" 8 "github.com/haileyok/cocoon/models" 9 "github.com/labstack/echo/v4" 10) 11 12type ComAtprotoServerRequestPasswordResetRequest struct { 13 Email string `json:"email" validate:"required"` 14} 15 16func (s *Server) handleServerRequestPasswordReset(e echo.Context) error { 17 urepo, ok := e.Get("repo").(*models.RepoActor) 18 if !ok { 19 var req ComAtprotoServerRequestPasswordResetRequest 20 if err := e.Bind(&req); err != nil { 21 return err 22 } 23 24 if err := e.Validate(req); err != nil { 25 return err 26 } 27 28 murepo, err := s.getRepoActorByEmail(req.Email) 29 if err != nil { 30 return err 31 } 32 33 urepo = murepo 34 } 35 36 code := fmt.Sprintf("%s-%s", helpers.RandomVarchar(5), helpers.RandomVarchar(5)) 37 eat := time.Now().Add(10 * time.Minute).UTC() 38 39 if err := s.db.Exec("UPDATE repos SET password_reset_code = ?, password_reset_code_expires_at = ? WHERE did = ?", nil, code, eat, urepo.Repo.Did).Error; err != nil { 40 s.logger.Error("error updating repo", "error", err) 41 return helpers.ServerError(e, nil) 42 } 43 44 if err := s.sendPasswordReset(urepo.Email, urepo.Handle, code); err != nil { 45 s.logger.Error("error sending email", "error", err) 46 return helpers.ServerError(e, nil) 47 } 48 49 return e.NoContent(200) 50}