60 lines
1.8 KiB
Go
60 lines
1.8 KiB
Go
package session
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/v2"
|
|
"github.com/influxdata/influxdb/v2/kit/feature"
|
|
)
|
|
|
|
var _ influxdb.SessionService = (*ServiceController)(nil)
|
|
|
|
// ServiceController is a temporary switching mechanism to allow
|
|
// a safe rollout of the new session service
|
|
type ServiceController struct {
|
|
flagger feature.Flagger
|
|
oldSessionService influxdb.SessionService
|
|
newSessionService influxdb.SessionService
|
|
}
|
|
|
|
func NewServiceController(flagger feature.Flagger, oldSessionService influxdb.SessionService, newSessionService influxdb.SessionService) *ServiceController {
|
|
return &ServiceController{
|
|
flagger: flagger,
|
|
oldSessionService: oldSessionService,
|
|
newSessionService: newSessionService,
|
|
}
|
|
}
|
|
|
|
func (s *ServiceController) useNew(ctx context.Context) bool {
|
|
return feature.SessionService().Enabled(ctx, s.flagger)
|
|
}
|
|
|
|
func (s *ServiceController) FindSession(ctx context.Context, key string) (*influxdb.Session, error) {
|
|
if s.useNew(ctx) {
|
|
return s.newSessionService.FindSession(ctx, key)
|
|
}
|
|
return s.oldSessionService.FindSession(ctx, key)
|
|
}
|
|
|
|
func (s *ServiceController) ExpireSession(ctx context.Context, key string) error {
|
|
if s.useNew(ctx) {
|
|
return s.newSessionService.ExpireSession(ctx, key)
|
|
}
|
|
return s.oldSessionService.ExpireSession(ctx, key)
|
|
}
|
|
|
|
func (s *ServiceController) CreateSession(ctx context.Context, user string) (*influxdb.Session, error) {
|
|
if s.useNew(ctx) {
|
|
return s.newSessionService.CreateSession(ctx, user)
|
|
}
|
|
return s.oldSessionService.CreateSession(ctx, user)
|
|
}
|
|
|
|
func (s *ServiceController) RenewSession(ctx context.Context, session *influxdb.Session, newExpiration time.Time) error {
|
|
if s.useNew(ctx) {
|
|
return s.newSessionService.RenewSession(ctx, session, newExpiration)
|
|
}
|
|
return s.oldSessionService.RenewSession(ctx, session, newExpiration)
|
|
}
|