mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-12 08:16:37 +08:00
fix: honor licensed user limits
This commit is contained in:
+31
-13
@@ -3,6 +3,7 @@ package service
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"github.com/ShukeBta/MediaStationGo/internal/repository"
|
||||
@@ -16,19 +17,28 @@ const (
|
||||
)
|
||||
|
||||
type LicenseActivationState struct {
|
||||
Valid bool `json:"valid"`
|
||||
LicenseType string `json:"license_type,omitempty"`
|
||||
ExpiryDate string `json:"expiry_date,omitempty"`
|
||||
MaxDevices int `json:"max_devices,omitempty"`
|
||||
DaysRemaining *int `json:"days_remaining,omitempty"`
|
||||
NextHeartbeat string `json:"next_heartbeat,omitempty"`
|
||||
DeviceID string `json:"device_id,omitempty"`
|
||||
DeviceName string `json:"device_name,omitempty"`
|
||||
UpdatedAt string `json:"updated_at,omitempty"`
|
||||
Valid bool `json:"valid"`
|
||||
LicenseType string `json:"license_type,omitempty"`
|
||||
ExpiryDate string `json:"expiry_date,omitempty"`
|
||||
MaxDevices int `json:"max_devices,omitempty"`
|
||||
MaxUsers *int `json:"max_users,omitempty"`
|
||||
UnlimitedUsers bool `json:"unlimited_users,omitempty"`
|
||||
DaysRemaining *int `json:"days_remaining,omitempty"`
|
||||
NextHeartbeat string `json:"next_heartbeat,omitempty"`
|
||||
DeviceID string `json:"device_id,omitempty"`
|
||||
DeviceName string `json:"device_name,omitempty"`
|
||||
UpdatedAt string `json:"updated_at,omitempty"`
|
||||
}
|
||||
|
||||
func LicensedMaxUsers(ctx context.Context, repos *repository.Container) int64 {
|
||||
if LicenseActive(ctx, repos) {
|
||||
state, ok := loadLicenseActivationState(ctx, repos)
|
||||
if ok && state.Valid && !licenseExpired(state.ExpiryDate) {
|
||||
if state.UnlimitedUsers {
|
||||
return math.MaxInt64
|
||||
}
|
||||
if state.MaxUsers != nil && *state.MaxUsers > 0 {
|
||||
return int64(*state.MaxUsers)
|
||||
}
|
||||
return LicensedUserLimit
|
||||
}
|
||||
return OpenSourceUserLimit
|
||||
@@ -38,15 +48,23 @@ func LicenseActive(ctx context.Context, repos *repository.Container) bool {
|
||||
if repos == nil || repos.Setting == nil {
|
||||
return false
|
||||
}
|
||||
state, ok := loadLicenseActivationState(ctx, repos)
|
||||
return ok && state.Valid && !licenseExpired(state.ExpiryDate)
|
||||
}
|
||||
|
||||
func loadLicenseActivationState(ctx context.Context, repos *repository.Container) (LicenseActivationState, bool) {
|
||||
if repos == nil || repos.Setting == nil {
|
||||
return LicenseActivationState{}, false
|
||||
}
|
||||
raw, err := repos.Setting.Get(ctx, LicenseSettingActivation)
|
||||
if err != nil || raw == "" {
|
||||
return false
|
||||
return LicenseActivationState{}, false
|
||||
}
|
||||
var state LicenseActivationState
|
||||
if err := json.Unmarshal([]byte(raw), &state); err != nil {
|
||||
return false
|
||||
return LicenseActivationState{}, false
|
||||
}
|
||||
return state.Valid && !licenseExpired(state.ExpiryDate)
|
||||
return state, true
|
||||
}
|
||||
|
||||
func licenseExpired(expiry string) bool {
|
||||
|
||||
Reference in New Issue
Block a user