1package server
2
3import (
4 "github.com/haileyok/cocoon/internal/helpers"
5 "github.com/labstack/echo/v4"
6)
7
8type AccountRevokeInput struct {
9 Token string `form:"token"`
10}
11
12func (s *Server) handleAccountRevoke(e echo.Context) error {
13 ctx := e.Request().Context()
14
15 var req AccountRevokeInput
16 if err := e.Bind(&req); err != nil {
17 s.logger.Error("could not bind account revoke request", "error", err)
18 return helpers.ServerError(e, nil)
19 }
20
21 repo, sess, err := s.getSessionRepoOrErr(e)
22 if err != nil {
23 return e.Redirect(303, "/account/signin")
24 }
25
26 if err := s.db.Exec(ctx, "DELETE FROM oauth_tokens WHERE sub = ? AND token = ?", nil, repo.Repo.Did, req.Token).Error; err != nil {
27 s.logger.Error("couldnt delete oauth session for account", "did", repo.Repo.Did, "token", req.Token, "error", err)
28 sess.AddFlash("Unable to revoke session. See server logs for more details.", "error")
29 sess.Save(e.Request(), e.Response())
30 return e.Redirect(303, "/account")
31 }
32
33 sess.AddFlash("Session successfully revoked!", "success")
34 sess.Save(e.Request(), e.Response())
35 return e.Redirect(303, "/account")
36}