...
1 package session
2
3 import (
4 "time"
5
6 "github.com/gin-contrib/sessions"
7
8 "edge-infra.dev/pkg/edge/auth-proxy/types"
9 "edge-infra.dev/pkg/lib/uuid"
10 )
11
12 const (
13
14 DefaultDuration = 15 * time.Minute
15 )
16
17
18 type Provider struct {
19 session sessions.Session
20 sessionDuration time.Duration
21 correlationID string
22 }
23
24
25 type UserInstance struct {
26 username string
27 email string
28 token string
29 refreshToken string
30 authType AuthProvider
31 roles []string
32 organization string
33 bannerEdgeIDs []string
34 }
35
36
37 func New(session sessions.Session, sessionDuration time.Duration, correlationID string) *Provider {
38 if sessionDuration == 0 {
39 sessionDuration = DefaultDuration
40 }
41 return &Provider{session: session, sessionDuration: sessionDuration, correlationID: correlationID}
42 }
43
44
45 func (s *Provider) CreateUserSession(usr *UserInstance) error {
46 s.session.Set(types.SessionIDField, uuid.New().UUID)
47 s.session.Set(types.SessionUsernameField, usr.username)
48 s.session.Set(types.SessionEmailField, usr.email)
49 s.session.Set(types.SessionTokenField, usr.token)
50 s.session.Set(types.SessionRefreshTokenField, usr.refreshToken)
51 s.session.Set(types.SessionAuthTypeField, usr.authType.String())
52 s.session.Set(types.SessionRolesField, usr.roles)
53 s.session.Set(types.SessionOrganizationField, usr.organization)
54 s.session.Set(types.SessionBannerEdgeIDs, usr.bannerEdgeIDs)
55 createdAt := time.Now().UTC()
56 s.session.Set(types.SessionCreationField, createdAt)
57 s.session.Set(types.SessionExpirationField, createdAt.Add(s.sessionDuration))
58 s.session.Set(types.SessionCorrelationID, s.correlationID)
59 return s.session.Save()
60 }
61
View as plain text