1package server
2
3import (
4 "time"
5
6 "github.com/haileyok/cocoon/oauth/provider"
7 "github.com/labstack/echo/v4"
8)
9
10func (s *Server) handleAccount(e echo.Context) error {
11 repo, sess, err := s.getSessionRepoOrErr(e)
12 if err != nil {
13 return e.Redirect(303, "/account/signin")
14 }
15
16 now := time.Now()
17
18 var tokens []provider.OauthToken
19 if err := s.db.Raw("SELECT * FROM oauth_tokens WHERE sub = ? AND expires_at >= ? ORDER BY created_at ASC", nil, repo.Repo.Did, now).Scan(&tokens).Error; err != nil {
20 s.logger.Error("couldnt fetch oauth sessions for account", "did", repo.Repo.Did, "error", err)
21 sess.AddFlash("Unable to fetch sessions. See server logs for more details.", "error")
22 sess.Save(e.Request(), e.Response())
23 return e.Render(200, "account.html", map[string]any{
24 "flashes": getFlashesFromSession(e, sess),
25 })
26 }
27
28 tokenInfo := []map[string]string{}
29 for _, t := range tokens {
30 tokenInfo = append(tokenInfo, map[string]string{
31 "ClientId": t.ClientId,
32 "CreatedAt": t.CreatedAt.Format("02 Jan 06 15:04 MST"),
33 "UpdatedAt": t.CreatedAt.Format("02 Jan 06 15:04 MST"),
34 "ExpiresAt": t.CreatedAt.Format("02 Jan 06 15:04 MST"),
35 "Token": t.Token,
36 })
37 }
38
39 return e.Render(200, "account.html", map[string]any{
40 "Repo": repo,
41 "Tokens": tokenInfo,
42 "flashes": getFlashesFromSession(e, sess),
43 })
44}