diff --git a/init_data.json.template b/init_data.json.template index db278a60..2e586e04 100644 --- a/init_data.json.template +++ b/init_data.json.template @@ -146,7 +146,8 @@ "isForbidden": false, "isDeleted": false, "signupApplication": "", - "createdIp": "" + "createdIp": "", + "groups": [] } ], "providers": [ @@ -349,5 +350,74 @@ "owner": "", "url": "" } + ], + "groups": [ + { + "owner": "", + "name":"", + "displayName": "", + "manager": "", + "contactEmail": "", + "type": "", + "parent_id": "", + "isTopGroup": true, + "title": "", + "key": "", + "children": "", + "isEnabled": true + } + ], + "adapters": [ + { + "owner": "", + "name": "", + "table": "", + "useSameDb": true, + "type": "", + "databaseType": "", + "database": "", + "host": "", + "port": 0, + "user": "", + "password": "", + } + ], + "enforcers": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "model": "", + "adapter": "", + "enforcer": "" + } + ], + "plans": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "price": 0, + "currency": "", + "period": "", + "product": "", + "paymentProviders": [], + "isEnabled": true, + "role", "" + } + ], + "pricings": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "plans": [], + "isEnabled": true, + "trialDuration": 0, + "application": "", + } ] } diff --git a/main.go b/main.go index c5d7ab8e..efe03345 100644 --- a/main.go +++ b/main.go @@ -36,12 +36,12 @@ func main() { object.CreateTables() object.InitDb() - object.InitFromFile() object.InitDefaultStorageProvider() object.InitLdapAutoSynchronizer() proxy.InitHttpClient() authz.InitApi() object.InitUserManager() + object.InitFromFile() object.InitCasvisorConfig() util.SafeGoroutine(func() { object.RunSyncUsersJob() }) diff --git a/object/init_data.go b/object/init_data.go index d3991c8a..34ba700e 100644 --- a/object/init_data.go +++ b/object/init_data.go @@ -35,6 +35,11 @@ type InitData struct { Syncers []*Syncer `json:"syncers"` Tokens []*Token `json:"tokens"` Webhooks []*Webhook `json:"webhooks"` + Groups []*Group `json:"groups"` + Adapters []*Adapter `json:"adapters"` + Enforcers []*Enforcer `json:"enforcers"` + Plans []*Plan `json:"plans"` + Pricings []*Pricing `json:"pricings"` } func InitFromFile() { @@ -94,6 +99,21 @@ func InitFromFile() { for _, webhook := range initData.Webhooks { initDefinedWebhook(webhook) } + for _, group := range initData.Groups { + initDefinedGroup(group) + } + for _, adapter := range initData.Adapters { + initDefinedAdapter(adapter) + } + for _, enforcer := range initData.Enforcers { + initDefinedEnforcer(enforcer) + } + for _, plan := range initData.Plans { + initDefinedPlan(plan) + } + for _, pricing := range initData.Pricings { + initDefinedPricing(pricing) + } } } @@ -120,6 +140,11 @@ func readInitDataFromFile(filePath string) (*InitData, error) { Syncers: []*Syncer{}, Tokens: []*Token{}, Webhooks: []*Webhook{}, + Groups: []*Group{}, + Adapters: []*Adapter{}, + Enforcers: []*Enforcer{}, + Plans: []*Plan{}, + Pricings: []*Pricing{}, } err := util.JsonToStruct(s, data) if err != nil { @@ -190,7 +215,16 @@ func readInitDataFromFile(filePath string) (*InitData, error) { webhook.Headers = []*Header{} } } - + for _, plan := range data.Plans { + if plan.PaymentProviders == nil { + plan.PaymentProviders = []string{} + } + } + for _, pricing := range data.Pricings { + if pricing.Plans == nil { + pricing.Plans = []string{} + } + } return data, nil } @@ -434,3 +468,78 @@ func initDefinedWebhook(webhook *Webhook) { panic(err) } } + +func initDefinedGroup(group *Group) { + existed, err := getGroup(group.Owner, group.Name) + if err != nil { + panic(err) + } + if existed != nil { + return + } + group.CreatedTime = util.GetCurrentTime() + _, err = AddGroup(group) + if err != nil { + panic(err) + } +} + +func initDefinedAdapter(adapter *Adapter) { + existed, err := getAdapter(adapter.Owner, adapter.Name) + if err != nil { + panic(err) + } + if existed != nil { + return + } + adapter.CreatedTime = util.GetCurrentTime() + _, err = AddAdapter(adapter) + if err != nil { + panic(err) + } +} + +func initDefinedEnforcer(enforcer *Enforcer) { + existed, err := getEnforcer(enforcer.Owner, enforcer.Name) + if err != nil { + panic(err) + } + if existed != nil { + return + } + enforcer.CreatedTime = util.GetCurrentTime() + _, err = AddEnforcer(enforcer) + if err != nil { + panic(err) + } +} + +func initDefinedPlan(plan *Plan) { + existed, err := getPlan(plan.Owner, plan.Name) + if err != nil { + panic(err) + } + if existed != nil { + return + } + plan.CreatedTime = util.GetCurrentTime() + _, err = AddPlan(plan) + if err != nil { + panic(err) + } +} + +func initDefinedPricing(pricing *Pricing) { + existed, err := getPlan(pricing.Owner, pricing.Name) + if err != nil { + panic(err) + } + if existed != nil { + return + } + pricing.CreatedTime = util.GetCurrentTime() + _, err = AddPricing(pricing) + if err != nil { + panic(err) + } +} diff --git a/object/init_data_dump.go b/object/init_data_dump.go index 4ad8d194..73d1f847 100644 --- a/object/init_data_dump.go +++ b/object/init_data_dump.go @@ -96,6 +96,31 @@ func writeInitDataToFile(filePath string) error { return err } + groups, err := GetGroups("") + if err != nil { + return err + } + + adapters, err := GetAdapters("") + if err != nil { + return err + } + + enforcers, err := GetEnforcers("") + if err != nil { + return err + } + + plans, err := GetPlans("") + if err != nil { + return err + } + + pricings, err := GetPricings("") + if err != nil { + return err + } + data := &InitData{ Organizations: organizations, Applications: applications, @@ -112,6 +137,11 @@ func writeInitDataToFile(filePath string) error { Syncers: syncers, Tokens: tokens, Webhooks: webhooks, + Groups: groups, + Adapters: adapters, + Enforcers: enforcers, + Plans: plans, + Pricings: pricings, } text := util.StructToJsonFormatted(data) diff --git a/object/user.go b/object/user.go index 028bd435..55035e4a 100644 --- a/object/user.go +++ b/object/user.go @@ -793,6 +793,13 @@ func AddUser(user *User) (bool, error) { } user.Ranking = int(count + 1) + if user.Groups != nil && len(user.Groups) > 0 { + _, err = userEnforcer.UpdateGroupsForUser(user.GetId(), user.Groups) + if err != nil { + return false, err + } + } + affected, err := ormer.Engine.Insert(user) if err != nil { return false, err @@ -822,6 +829,13 @@ func AddUsers(users []*User) (bool, error) { if err != nil { return false, err } + + if user.Groups != nil && len(user.Groups) > 0 { + _, err = userEnforcer.UpdateGroupsForUser(user.GetId(), user.Groups) + if err != nil { + return false, err + } + } } affected, err := ormer.Engine.Insert(users)