An atproto PDS written in Go
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}