Live video on the AT Protocol
1package model
2
3import (
4 "errors"
5
6 "gorm.io/gorm"
7 "stream.place/streamplace/pkg/oproxy"
8)
9
10func (m *DBModel) CreateOAuthSession(id string, session *oproxy.OAuthSession) error {
11 return m.DB.Create(session).Error
12}
13
14func (m *DBModel) LoadOAuthSession(id string) (*oproxy.OAuthSession, error) {
15 var session oproxy.OAuthSession
16 if err := m.DB.Where("downstream_dpop_jkt = ?", id).First(&session).Error; err != nil {
17 if errors.Is(err, gorm.ErrRecordNotFound) {
18 return nil, nil
19 }
20 return nil, err
21 }
22 return &session, nil
23}
24
25func (m *DBModel) UpdateOAuthSession(id string, session *oproxy.OAuthSession) error {
26 res := m.DB.Model(&oproxy.OAuthSession{}).Where("downstream_dpop_jkt = ?", id).Updates(session)
27 if res.Error != nil {
28 return res.Error
29 }
30 if res.RowsAffected == 0 {
31 return errors.New("no rows affected")
32 }
33 return nil
34}
35
36func (m *DBModel) ListOAuthSessions() ([]oproxy.OAuthSession, error) {
37 var sessions []oproxy.OAuthSession
38 if err := m.DB.Find(&sessions).Error; err != nil {
39 return nil, err
40 }
41 return sessions, nil
42}
43
44func (m *DBModel) GetSessionByDID(did string) (*oproxy.OAuthSession, error) {
45 var session oproxy.OAuthSession
46 if err := m.DB.Where("repo_did = ? AND revoked_at IS NULL", did).Order("updated_at DESC").First(&session).Error; err != nil {
47 return nil, err
48 }
49 return &session, nil
50}