262 lines
7.6 KiB
Go
262 lines
7.6 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"infinite-canvas/backend/internal/auth"
|
|
"infinite-canvas/backend/internal/model"
|
|
)
|
|
|
|
const SessionCookieName = auth.SessionCookieName
|
|
|
|
type (
|
|
EmailCodeCooldownError = auth.EmailCodeCooldownError
|
|
RegisterRequest = auth.RegisterRequest
|
|
LoginRequest = auth.LoginRequest
|
|
PublicAuthSettings = auth.PublicAuthSettings
|
|
AuthSessionResult = auth.AuthSessionResult
|
|
AuthUser = auth.AuthUser
|
|
RegistrationSettingRequest = auth.RegistrationSettingRequest
|
|
PublicRegistrationSetting = auth.PublicRegistrationSetting
|
|
PasswordResetRequest = auth.PasswordResetRequest
|
|
EmailSettingRequest = auth.EmailSettingRequest
|
|
PublicEmailSetting = auth.PublicEmailSetting
|
|
LinuxDOSettingRequest = auth.LinuxDOSettingRequest
|
|
PublicLinuxDOSetting = auth.PublicLinuxDOSetting
|
|
LinuxDOCallbackResult = auth.LinuxDOCallbackResult
|
|
LibTVSettingRequest = auth.LibTVSettingRequest
|
|
PublicLibTVSetting = auth.PublicLibTVSetting
|
|
LibTVImportRequest = auth.LibTVImportRequest
|
|
LibTVImportResult = auth.LibTVImportResult
|
|
LibTVCanvasConnection = auth.LibTVCanvasConnection
|
|
LibTVCanvasNode = auth.LibTVCanvasNode
|
|
LibTVImportIssue = auth.LibTVImportIssue
|
|
LibTVImportMetadata = auth.LibTVImportMetadata
|
|
LibTVImportWarning = auth.LibTVImportWarning
|
|
TapNowImportRequest = auth.TapNowImportRequest
|
|
TapNowImportResult = auth.TapNowImportResult
|
|
TapNowCanvasConnection = auth.TapNowCanvasConnection
|
|
TapNowCanvasNode = auth.TapNowCanvasNode
|
|
TapNowImportIssue = auth.TapNowImportIssue
|
|
TapNowImportMetadata = auth.TapNowImportMetadata
|
|
TapNowImportWarning = auth.TapNowImportWarning
|
|
)
|
|
|
|
type authHost struct {
|
|
svc *Service
|
|
}
|
|
|
|
func (h authHost) RequireAdmin(user *model.User) error {
|
|
if h.svc == nil {
|
|
return nil
|
|
}
|
|
return h.svc.RequireAdmin(user)
|
|
}
|
|
|
|
func (h authHost) EncryptSecret(value string) (string, error) {
|
|
if h.svc == nil {
|
|
return value, nil
|
|
}
|
|
return h.svc.encryptSettingSecret(value)
|
|
}
|
|
|
|
func (h authHost) DecryptSecret(value string) (string, error) {
|
|
if h.svc == nil {
|
|
return value, nil
|
|
}
|
|
return h.svc.decryptSettingSecret(value)
|
|
}
|
|
|
|
func (h authHost) SettingsEncryptionKey() ([]byte, error) {
|
|
if h.svc == nil {
|
|
return nil, nil
|
|
}
|
|
return h.svc.settingsEncryptionKey()
|
|
}
|
|
|
|
func (h authHost) BrandName() string {
|
|
if h.svc == nil {
|
|
return auth.DefaultBrandName
|
|
}
|
|
return h.svc.appearanceBrandName()
|
|
}
|
|
|
|
func (h authHost) EnsureSignupBonus(userID string) error {
|
|
if h.svc == nil {
|
|
return nil
|
|
}
|
|
return h.svc.ensureSignupBonus(userID)
|
|
}
|
|
|
|
func (h authHost) RecordActivity(userID string, event string, count int) {
|
|
if h.svc == nil {
|
|
return
|
|
}
|
|
h.svc.recordActivity(userID, event, count)
|
|
}
|
|
|
|
func (h authHost) AllowRequest(ctx context.Context, key string, limit int, window time.Duration) (bool, error) {
|
|
if h.svc == nil {
|
|
return true, nil
|
|
}
|
|
return h.svc.AllowRequest(ctx, key, limit, window)
|
|
}
|
|
|
|
func (h authHost) RequestRetryAfter(ctx context.Context, key string, window time.Duration) time.Duration {
|
|
if h.svc == nil {
|
|
return 0
|
|
}
|
|
return h.svc.RequestRetryAfter(ctx, key, window)
|
|
}
|
|
|
|
func (s *Service) authDomain() *auth.Service {
|
|
if s == nil {
|
|
return auth.New(nil, nil, nil)
|
|
}
|
|
if s.auth != nil {
|
|
return s.auth
|
|
}
|
|
return auth.New(s.repo, authHost{svc: s}, nil)
|
|
}
|
|
|
|
func (s *Service) PublicAuthSettings() (*PublicAuthSettings, error) {
|
|
return s.authDomain().PublicAuthSettings()
|
|
}
|
|
|
|
func (s *Service) Register(req RegisterRequest) (*AuthSessionResult, error) {
|
|
return s.authDomain().Register(req)
|
|
}
|
|
|
|
func (s *Service) Login(req LoginRequest) (*AuthSessionResult, error) {
|
|
return s.authDomain().Login(req)
|
|
}
|
|
|
|
func (s *Service) Logout(cookieValue string) error {
|
|
return s.authDomain().Logout(cookieValue)
|
|
}
|
|
|
|
func (s *Service) CurrentUser(cookieValue string) (*model.User, error) {
|
|
return s.authDomain().CurrentUser(cookieValue)
|
|
}
|
|
|
|
func (s *Service) PublicAuthUser(user *model.User) (AuthUser, error) {
|
|
return s.authDomain().PublicAuthUser(user)
|
|
}
|
|
|
|
func (s *Service) AdminRegistrationSetting(actor *model.User) (*PublicRegistrationSetting, error) {
|
|
return s.authDomain().AdminRegistrationSetting(actor)
|
|
}
|
|
|
|
func (s *Service) UpdateRegistrationSetting(actor *model.User, req RegistrationSettingRequest) (*PublicRegistrationSetting, error) {
|
|
return s.authDomain().UpdateRegistrationSetting(actor, req)
|
|
}
|
|
|
|
func (s *Service) RegistrationEnabled() (bool, error) {
|
|
return s.authDomain().RegistrationEnabled()
|
|
}
|
|
|
|
func (s *Service) SendPasswordResetEmailCode(rawEmail string) error {
|
|
return s.authDomain().SendPasswordResetEmailCode(rawEmail)
|
|
}
|
|
|
|
func (s *Service) ResetPassword(req PasswordResetRequest) error {
|
|
return s.authDomain().ResetPassword(req)
|
|
}
|
|
|
|
func (s *Service) AdminEmailSetting(actor *model.User) (*PublicEmailSetting, error) {
|
|
return s.authDomain().AdminEmailSetting(actor)
|
|
}
|
|
|
|
func (s *Service) UpdateEmailSetting(actor *model.User, req EmailSettingRequest) (*PublicEmailSetting, error) {
|
|
return s.authDomain().UpdateEmailSetting(actor, req)
|
|
}
|
|
|
|
func (s *Service) EmailEnabled() (bool, error) {
|
|
return s.authDomain().EmailEnabled()
|
|
}
|
|
|
|
func (s *Service) SendRegistrationEmailCode(rawEmail string) error {
|
|
return s.authDomain().SendRegistrationEmailCode(rawEmail)
|
|
}
|
|
|
|
func (s *Service) VerifyRegistrationEmailCode(email string, rawCode string) (*model.EmailVerificationCode, error) {
|
|
return s.authDomain().VerifyRegistrationEmailCode(email, rawCode)
|
|
}
|
|
|
|
func (s *Service) AdminLinuxDOSetting(actor *model.User) (*PublicLinuxDOSetting, error) {
|
|
return s.authDomain().AdminLinuxDOSetting(actor)
|
|
}
|
|
|
|
func (s *Service) UpdateLinuxDOSetting(actor *model.User, req LinuxDOSettingRequest) (*PublicLinuxDOSetting, error) {
|
|
return s.authDomain().UpdateLinuxDOSetting(actor, req)
|
|
}
|
|
|
|
func (s *Service) LinuxDOEnabled() bool {
|
|
return s.authDomain().LinuxDOEnabled()
|
|
}
|
|
|
|
func (s *Service) BeginLinuxDOLogin(nextPath string) (string, error) {
|
|
return s.authDomain().BeginLinuxDOLogin(nextPath)
|
|
}
|
|
|
|
func (s *Service) CompleteLinuxDOLogin(stateValue string, code string) (*LinuxDOCallbackResult, error) {
|
|
return s.authDomain().CompleteLinuxDOLogin(stateValue, code)
|
|
}
|
|
|
|
func (s *Service) AdminLibTVSetting(actor *model.User) (*PublicLibTVSetting, error) {
|
|
return s.authDomain().AdminLibTVSetting(actor)
|
|
}
|
|
|
|
func (s *Service) UpdateLibTVSetting(actor *model.User, req LibTVSettingRequest) (*PublicLibTVSetting, error) {
|
|
return s.authDomain().UpdateLibTVSetting(actor, req)
|
|
}
|
|
|
|
func (s *Service) TestLibTV(actor *model.User, projectUUID string) error {
|
|
return s.authDomain().TestLibTV(actor, projectUUID)
|
|
}
|
|
|
|
func (s *Service) ImportLibTV(userID, canvasProjectID, projectUUID string) (*LibTVImportResult, error) {
|
|
return s.authDomain().ImportLibTV(userID, canvasProjectID, projectUUID)
|
|
}
|
|
|
|
func (s *Service) ImportTapNow(userID, canvasProjectID, shareID string) (*TapNowImportResult, error) {
|
|
return s.authDomain().ImportTapNow(userID, canvasProjectID, shareID)
|
|
}
|
|
|
|
func hashPassword(password string) (string, error) {
|
|
return auth.HashPassword(password)
|
|
}
|
|
|
|
func normalizeUsername(value string) string {
|
|
return auth.NormalizeUsername(value)
|
|
}
|
|
|
|
func normalizeEmail(value string) string {
|
|
return auth.NormalizeEmail(value)
|
|
}
|
|
|
|
func normalizeDisplayName(value string, fallback string) string {
|
|
return auth.NormalizeDisplayName(value, fallback)
|
|
}
|
|
|
|
func validateUsername(value string) error {
|
|
return auth.ValidateUsername(value)
|
|
}
|
|
|
|
func validatePassword(value string) error {
|
|
return auth.ValidatePassword(value)
|
|
}
|
|
|
|
func validateEmail(value string) error {
|
|
return auth.ValidateEmail(value)
|
|
}
|
|
|
|
func hashToken(token string) string {
|
|
return auth.HashToken(token)
|
|
}
|
|
|
|
func randomToken() string {
|
|
return auth.RandomToken()
|
|
}
|