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}