Skip to content

Commit cc410ff

Browse files
authored
Merge pull request #242 from LalitDeore/license-1
Onprem features
2 parents 4003566 + 9b13784 commit cc410ff

File tree

2 files changed

+127
-62
lines changed

2 files changed

+127
-62
lines changed

db-connector.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5798,6 +5798,51 @@ func GetEnvironments(ctx context.Context, orgId string) ([]Environment, error) {
57985798
}
57995799
}
58005800

5801+
hideEnvs := false
5802+
multiEnvLimit := 0
5803+
if project.Environment == "onprem" {
5804+
currentOrg, err := GetOrg(ctx, orgId)
5805+
if err != nil {
5806+
log.Printf("[WARNING] Failed to get current org %s: %v", orgId, err)
5807+
return environments, nil
5808+
}
5809+
5810+
parentOrg := currentOrg
5811+
if len(currentOrg.CreatorOrg) > 0 {
5812+
parentOrg, err = GetOrg(ctx, currentOrg.CreatorOrg)
5813+
if err != nil {
5814+
log.Printf("[WARNING] Failed to get parent org %s: %v", currentOrg.CreatorOrg, err)
5815+
parentOrg = currentOrg
5816+
}
5817+
}
5818+
5819+
licenseOrg := HandleCheckLicense(ctx, *parentOrg)
5820+
multiEnvLimit = int(licenseOrg.SyncFeatures.MultiEnv.Limit)
5821+
log.Printf("multiEnvLimit is: %d", multiEnvLimit)
5822+
if !licenseOrg.SyncFeatures.MultiEnv.Active && int64(len(environments)) > int64(multiEnvLimit) {
5823+
hideEnvs = true
5824+
}
5825+
}
5826+
5827+
if hideEnvs && len(environments) > multiEnvLimit {
5828+
sort.Slice(environments, func(i, j int) bool {
5829+
return environments[i].Created < environments[j].Created
5830+
})
5831+
5832+
newEnvs := []Environment{}
5833+
for i, env := range environments {
5834+
if env.Default {
5835+
env.Archived = false
5836+
} else if i < multiEnvLimit {
5837+
env.Archived = false
5838+
} else {
5839+
env.Archived = true
5840+
}
5841+
newEnvs = append(newEnvs, env)
5842+
}
5843+
environments = newEnvs
5844+
}
5845+
58015846
//log.Printf("\n\n[DEBUG2] Getting environments2 for orgId %s\n\n", orgId)
58025847

58035848
if project.CacheDb {

shared.go

Lines changed: 82 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,6 +2615,39 @@ func HandleSetEnvironments(resp http.ResponseWriter, request *http.Request) {
26152615
//}
26162616
}
26172617

2618+
if project.Environment == "onprem" {
2619+
currentOrg, err := GetOrg(ctx, user.ActiveOrg.Id)
2620+
if err != nil {
2621+
resp.WriteHeader(401)
2622+
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed find your organization"}`)))
2623+
return
2624+
}
2625+
2626+
parentOrg := currentOrg
2627+
if len(currentOrg.CreatorOrg) > 0 {
2628+
parentOrg, err = GetOrg(ctx, currentOrg.CreatorOrg)
2629+
if err != nil {
2630+
resp.WriteHeader(401)
2631+
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed find your organization"}`)))
2632+
return
2633+
}
2634+
}
2635+
envs, err := GetEnvironments(ctx, currentOrg.Id)
2636+
if err != nil {
2637+
resp.WriteHeader(401)
2638+
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed to get environments of organization"}`)))
2639+
return
2640+
}
2641+
2642+
licenseOrg := HandleCheckLicense(ctx, *parentOrg)
2643+
if !licenseOrg.SyncFeatures.MultiEnv.Active && int64(len(envs)) > licenseOrg.SyncFeatures.MultiEnv.Limit {
2644+
resp.WriteHeader(401)
2645+
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "You have reached the limit of %d environments for your subscription. Upgrade to an enterprise plan or contact [email protected] for more info."}`, licenseOrg.SyncFeatures.MultiEnv.Limit)))
2646+
return
2647+
}
2648+
2649+
}
2650+
26182651
// Validate input here
26192652
defaults := 0
26202653
parsedEnvs := []Environment{}
@@ -3036,12 +3069,42 @@ func HandleGetEnvironments(resp http.ResponseWriter, request *http.Request) {
30363069
}
30373070
}
30383071

3072+
hideEnvs := false
3073+
if project.Environment == "onprem" {
3074+
currentOrg, err := GetOrg(ctx, user.ActiveOrg.Id)
3075+
if err != nil {
3076+
resp.WriteHeader(401)
3077+
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed find your organization"}`)))
3078+
return
3079+
}
3080+
3081+
parentOrg := currentOrg
3082+
if len(currentOrg.CreatorOrg) > 0 {
3083+
parentOrg, err = GetOrg(ctx, currentOrg.CreatorOrg)
3084+
if err != nil {
3085+
resp.WriteHeader(401)
3086+
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed find your organization"}`)))
3087+
return
3088+
}
3089+
}
3090+
3091+
licenseOrg := HandleCheckLicense(ctx, *parentOrg)
3092+
if !licenseOrg.SyncFeatures.MultiEnv.Active && int64(len(environments)) > licenseOrg.SyncFeatures.MultiEnv.Limit {
3093+
hideEnvs = true
3094+
}
3095+
}
3096+
30393097
newEnvironments := []Environment{}
30403098
for _, environment := range environments {
30413099
if len(environment.Id) == 0 {
30423100
environment.Id = uuid.NewV4().String()
30433101
}
30443102

3103+
// For onprem users without a valid license, only display default environments on the frontend.
3104+
if hideEnvs && !environment.Default {
3105+
continue
3106+
}
3107+
30453108
found := false
30463109
for _, oldEnv := range newEnvironments {
30473110
if oldEnv.Name == environment.Name {
@@ -30475,7 +30538,6 @@ func fixOrgUsers(ctx context.Context, foundOrg Org) error {
3047530538
func HandleCheckLicense(ctx context.Context, org Org) Org {
3047630539

3047730540
shuffleLicenseKey := os.Getenv("SHUFFLE_LICENSE")
30478-
3047930541
if org.CloudSync {
3048030542
cacheKey := fmt.Sprintf("org_sync_features_%s", org.Id)
3048130543
syncFeatures, err := GetCache(ctx, cacheKey)
@@ -30486,66 +30548,10 @@ func HandleCheckLicense(ctx context.Context, org Org) Org {
3048630548
features := SyncFeatures{}
3048730549
if data, ok := syncFeatures.([]byte); ok {
3048830550
if err := json.Unmarshal(data, &features); err == nil {
30489-
30490-
// Syncing all features from cloud to onprem
30491-
org.SyncFeatures.AppExecutions.Limit = features.AppExecutions.Limit
30492-
org.SyncFeatures.AppExecutions.Active = features.AppExecutions.Active
30493-
30494-
org.SyncFeatures.MultiEnv.Limit = features.MultiEnv.Limit
30495-
org.SyncFeatures.MultiEnv.Active = features.MultiEnv.Active
30496-
30497-
org.SyncFeatures.MultiTenant.Limit = features.MultiTenant.Limit
30498-
org.SyncFeatures.MultiTenant.Active = features.MultiTenant.Active
30499-
30500-
org.SyncFeatures.MultiRegion.Limit = features.MultiRegion.Limit
30501-
org.SyncFeatures.MultiRegion.Active = features.MultiRegion.Active
30502-
30503-
org.SyncFeatures.Webhook.Limit = features.Webhook.Limit
30504-
org.SyncFeatures.Webhook.Active = features.Webhook.Active
30505-
30506-
org.SyncFeatures.Schedules.Limit = features.Schedules.Limit
30507-
org.SyncFeatures.Schedules.Active = features.Schedules.Active
30508-
30509-
org.SyncFeatures.UserInput.Limit = features.UserInput.Limit
30510-
org.SyncFeatures.UserInput.Active = features.UserInput.Active
30511-
30512-
org.SyncFeatures.SendMail.Limit = features.SendMail.Limit
30513-
org.SyncFeatures.SendMail.Active = features.SendMail.Active
30514-
30515-
org.SyncFeatures.SendSms.Limit = features.SendSms.Limit
30516-
org.SyncFeatures.SendSms.Active = features.SendSms.Active
30517-
30518-
org.SyncFeatures.EmailTrigger.Limit = features.EmailTrigger.Limit
30519-
org.SyncFeatures.EmailTrigger.Active = features.EmailTrigger.Active
30520-
30521-
org.SyncFeatures.Notifications.Limit = features.Notifications.Limit
30522-
org.SyncFeatures.Notifications.Active = features.Notifications.Active
30523-
30524-
org.SyncFeatures.Workflows.Limit = features.Workflows.Limit
30525-
org.SyncFeatures.Workflows.Active = features.Workflows.Active
30526-
30527-
org.SyncFeatures.Autocomplete.Limit = features.Autocomplete.Limit
30528-
org.SyncFeatures.Autocomplete.Active = features.Autocomplete.Active
30529-
30530-
org.SyncFeatures.WorkflowExecutions.Limit = features.WorkflowExecutions.Limit
30531-
org.SyncFeatures.WorkflowExecutions.Active = features.WorkflowExecutions.Active
30532-
30533-
org.SyncFeatures.Authentication.Limit = features.Authentication.Limit
30534-
org.SyncFeatures.Authentication.Active = features.Authentication.Active
30535-
30536-
org.SyncFeatures.ShuffleGPT.Limit = features.ShuffleGPT.Limit
30537-
org.SyncFeatures.ShuffleGPT.Active = features.ShuffleGPT.Active
30538-
30539-
if features.MultiTenant.Limit < 3 {
30551+
org.SyncFeatures = features
30552+
if !features.MultiTenant.Active && features.MultiTenant.Limit > 3 {
3054030553
org.SyncFeatures.MultiTenant.Limit = 3
30541-
} else {
30542-
org.SyncFeatures.MultiTenant.Limit = features.MultiTenant.Limit
3054330554
}
30544-
30545-
org.SyncFeatures.MultiTenant.Active = features.MultiTenant.Active
30546-
30547-
org.SyncFeatures.Branding.Limit = features.Branding.Limit
30548-
org.SyncFeatures.Branding.Active = features.Branding.Active
3054930555
}
3055030556
}
3055130557

@@ -30573,12 +30579,26 @@ func HandleCheckLicense(ctx context.Context, org Org) Org {
3057330579

3057430580
org.SyncFeatures.MultiTenant.Limit = 1000
3057530581
org.SyncFeatures.MultiTenant.Active = true
30576-
30577-
org.SyncFeatures.Branding.Limit = 100
3057830582
org.SyncFeatures.Branding.Active = true
30583+
30584+
org.SyncFeatures.AppExecutions.Active = true
30585+
org.SyncFeatures.Webhook.Active = true
30586+
org.SyncFeatures.Schedules.Active = true
30587+
org.SyncFeatures.UserInput.Active = true
30588+
org.SyncFeatures.SendMail.Active = true
30589+
org.SyncFeatures.SendSms.Active = true
30590+
org.SyncFeatures.Updates.Active = true
30591+
org.SyncFeatures.EmailTrigger.Active = true
30592+
org.SyncFeatures.Notifications.Active = true
30593+
org.SyncFeatures.Workflows.Active = true
30594+
org.SyncFeatures.Autocomplete.Active = true
30595+
org.SyncFeatures.WorkflowExecutions.Active = true
30596+
org.SyncFeatures.Authentication.Active = true
30597+
org.SyncFeatures.Schedule.Active = true
30598+
org.SyncFeatures.Apps.Active = true
30599+
org.SyncFeatures.ShuffleGPT.Active = true
3057930600
}
3058030601

30581-
// Add the static subscription data for the licensed (No internet orgs) orgs
3058230602
}
3058330603

3058430604
return org

0 commit comments

Comments
 (0)