An atproto PDS written in Go
103
fork

Configure Feed

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

at v0.8.0 52 lines 1.5 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 12func (s *Server) handleServerRequestAccountDelete(e echo.Context) error { 13 ctx := e.Request().Context() 14 logger := s.logger.With("name", "handleServerRequestAccountDelete") 15 16 urepo := e.Get("repo").(*models.RepoActor) 17 18 token := fmt.Sprintf("%s-%s", helpers.RandomVarchar(5), helpers.RandomVarchar(5)) 19 expiresAt := time.Now().UTC().Add(15 * time.Minute) 20 21 if err := s.db.Exec(ctx, "UPDATE repos SET account_delete_code = ?, account_delete_code_expires_at = ? WHERE did = ?", nil, token, expiresAt, urepo.Repo.Did).Error; err != nil { 22 logger.Error("error setting deletion token", "error", err) 23 return helpers.ServerError(e, nil) 24 } 25 26 if urepo.Email != "" { 27 if err := s.sendAccountDeleteEmail(urepo.Email, urepo.Actor.Handle, token); err != nil { 28 logger.Error("error sending account deletion email", "error", err) 29 } 30 } 31 32 return e.NoContent(200) 33} 34 35func (s *Server) sendAccountDeleteEmail(email, handle, token string) error { 36 if s.mail == nil { 37 return nil 38 } 39 40 s.mailLk.Lock() 41 defer s.mailLk.Unlock() 42 43 s.mail.To(email) 44 s.mail.Subject("Account Deletion Request for " + s.config.Hostname) 45 s.mail.Plain().Set(fmt.Sprintf("Hello %s. Your account deletion code is %s. This code will expire in fifteen minutes. If you did not request this, please ignore this email.", handle, token)) 46 47 if err := s.mail.Send(); err != nil { 48 return err 49 } 50 51 return nil 52}