An atproto PDS written in Go
at v0.5.1 1.4 kB view raw
1package server 2 3import ( 4 "github.com/haileyok/cocoon/internal/helpers" 5 "github.com/haileyok/cocoon/models" 6 "github.com/labstack/echo/v4" 7) 8 9type ComAtprotoServerRefreshSessionResponse struct { 10 AccessJwt string `json:"accessJwt"` 11 RefreshJwt string `json:"refreshJwt"` 12 Handle string `json:"handle"` 13 Did string `json:"did"` 14 Active bool `json:"active"` 15 Status *string `json:"status,omitempty"` 16} 17 18func (s *Server) handleRefreshSession(e echo.Context) error { 19 token := e.Get("token").(string) 20 repo := e.Get("repo").(*models.RepoActor) 21 22 if err := s.db.Exec("DELETE FROM refresh_tokens WHERE token = ?", nil, token).Error; err != nil { 23 s.logger.Error("error getting refresh token from db", "error", err) 24 return helpers.ServerError(e, nil) 25 } 26 27 if err := s.db.Exec("DELETE FROM tokens WHERE refresh_token = ?", nil, token).Error; err != nil { 28 s.logger.Error("error deleting access token from db", "error", err) 29 return helpers.ServerError(e, nil) 30 } 31 32 sess, err := s.createSession(&repo.Repo) 33 if err != nil { 34 s.logger.Error("error creating new session for refresh", "error", err) 35 return helpers.ServerError(e, nil) 36 } 37 38 return e.JSON(200, ComAtprotoServerRefreshSessionResponse{ 39 AccessJwt: sess.AccessToken, 40 RefreshJwt: sess.RefreshToken, 41 Handle: repo.Handle, 42 Did: repo.Repo.Did, 43 Active: repo.Active(), 44 Status: repo.Status(), 45 }) 46}