107 lines
2.8 KiB
Go
107 lines
2.8 KiB
Go
|
package model
|
||
|
|
||
|
import (
|
||
|
"encoding/base64"
|
||
|
"encoding/json"
|
||
|
"time"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
basemodel "go.signoz.io/signoz/pkg/query-service/model"
|
||
|
)
|
||
|
|
||
|
type License struct {
|
||
|
Key string `json:"key" db:"key"`
|
||
|
ActivationId string `json:"activationId" db:"activationId"`
|
||
|
CreatedAt time.Time `db:"created_at"`
|
||
|
|
||
|
// PlanDetails contains the encrypted plan info
|
||
|
PlanDetails string `json:"planDetails" db:"planDetails"`
|
||
|
|
||
|
// stores parsed license details
|
||
|
LicensePlan
|
||
|
|
||
|
FeatureSet basemodel.FeatureSet
|
||
|
|
||
|
// populated in case license has any errors
|
||
|
ValidationMessage string `db:"validationMessage"`
|
||
|
|
||
|
// used only for sending details to front-end
|
||
|
IsCurrent bool `json:"isCurrent"`
|
||
|
}
|
||
|
|
||
|
func (l *License) MarshalJSON() ([]byte, error) {
|
||
|
|
||
|
return json.Marshal(&struct {
|
||
|
Key string `json:"key" db:"key"`
|
||
|
ActivationId string `json:"activationId" db:"activationId"`
|
||
|
ValidationMessage string `db:"validationMessage"`
|
||
|
IsCurrent bool `json:"isCurrent"`
|
||
|
PlanKey string `json:"planKey"`
|
||
|
ValidFrom time.Time `json:"ValidFrom"`
|
||
|
ValidUntil time.Time `json:"ValidUntil"`
|
||
|
Status string `json:"status"`
|
||
|
}{
|
||
|
Key: l.Key,
|
||
|
ActivationId: l.ActivationId,
|
||
|
IsCurrent: l.IsCurrent,
|
||
|
PlanKey: l.PlanKey,
|
||
|
ValidFrom: time.Unix(l.ValidFrom, 0),
|
||
|
ValidUntil: time.Unix(l.ValidUntil, 0),
|
||
|
Status: l.Status,
|
||
|
ValidationMessage: l.ValidationMessage,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
type LicensePlan struct {
|
||
|
PlanKey string `json:"planKey"`
|
||
|
ValidFrom int64 `json:"validFrom"`
|
||
|
ValidUntil int64 `json:"validUntil"`
|
||
|
Status string `json:"status"`
|
||
|
}
|
||
|
|
||
|
func (l *License) ParsePlan() error {
|
||
|
l.LicensePlan = LicensePlan{}
|
||
|
|
||
|
planData, err := base64.StdEncoding.DecodeString(l.PlanDetails)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
plan := LicensePlan{}
|
||
|
err = json.Unmarshal([]byte(planData), &plan)
|
||
|
if err != nil {
|
||
|
l.ValidationMessage = "failed to parse plan from license"
|
||
|
return errors.Wrap(err, "failed to parse plan from license")
|
||
|
}
|
||
|
|
||
|
l.LicensePlan = plan
|
||
|
l.ParseFeatures()
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (l *License) ParseFeatures() {
|
||
|
switch l.PlanKey {
|
||
|
case Pro:
|
||
|
l.FeatureSet = ProPlan
|
||
|
case Enterprise:
|
||
|
l.FeatureSet = EnterprisePlan
|
||
|
default:
|
||
|
l.FeatureSet = BasicPlan
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type Licenses struct {
|
||
|
TrialStart int64 `json:"trialStart"`
|
||
|
TrialEnd int64 `json:"trialEnd"`
|
||
|
OnTrial bool `json:"onTrial"`
|
||
|
WorkSpaceBlock bool `json:"workSpaceBlock"`
|
||
|
TrialConvertedToSubscription bool `json:"trialConvertedToSubscription"`
|
||
|
GracePeriodEnd int64 `json:"gracePeriodEnd"`
|
||
|
Licenses []License `json:"licenses"`
|
||
|
}
|
||
|
|
||
|
type SubscriptionServerResp struct {
|
||
|
Status string `json:"status"`
|
||
|
Data Licenses `json:"data"`
|
||
|
}
|