mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 02:35:49 +08:00

* fix: fix potential bugs in init data * fix: improve code format * fix: fix bug when init plan and pricing and record
776 lines
17 KiB
Go
776 lines
17 KiB
Go
// Copyright 2022 The Casdoor Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package object
|
|
|
|
import (
|
|
"github.com/casdoor/casdoor/conf"
|
|
"github.com/casdoor/casdoor/util"
|
|
"github.com/casvisor/casvisor-go-sdk/casvisorsdk"
|
|
)
|
|
|
|
type InitData struct {
|
|
Organizations []*Organization `json:"organizations"`
|
|
Applications []*Application `json:"applications"`
|
|
Users []*User `json:"users"`
|
|
Certs []*Cert `json:"certs"`
|
|
Providers []*Provider `json:"providers"`
|
|
Ldaps []*Ldap `json:"ldaps"`
|
|
Models []*Model `json:"models"`
|
|
Permissions []*Permission `json:"permissions"`
|
|
Payments []*Payment `json:"payments"`
|
|
Products []*Product `json:"products"`
|
|
Resources []*Resource `json:"resources"`
|
|
Roles []*Role `json:"roles"`
|
|
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"`
|
|
Invitations []*Invitation `json:"invitations"`
|
|
Records []*casvisorsdk.Record `json:"records"`
|
|
Sessions []*Session `json:"sessions"`
|
|
Subscriptions []*Subscription `json:"subscriptions"`
|
|
Transactions []*Transaction `json:"transactions"`
|
|
}
|
|
|
|
func InitFromFile() {
|
|
initDataFile := conf.GetConfigString("initDataFile")
|
|
if initDataFile == "" {
|
|
return
|
|
}
|
|
|
|
initData, err := readInitDataFromFile(initDataFile)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if initData != nil {
|
|
for _, organization := range initData.Organizations {
|
|
initDefinedOrganization(organization)
|
|
}
|
|
for _, provider := range initData.Providers {
|
|
initDefinedProvider(provider)
|
|
}
|
|
for _, user := range initData.Users {
|
|
initDefinedUser(user)
|
|
}
|
|
for _, application := range initData.Applications {
|
|
initDefinedApplication(application)
|
|
}
|
|
for _, cert := range initData.Certs {
|
|
initDefinedCert(cert)
|
|
}
|
|
for _, ldap := range initData.Ldaps {
|
|
initDefinedLdap(ldap)
|
|
}
|
|
for _, model := range initData.Models {
|
|
initDefinedModel(model)
|
|
}
|
|
for _, permission := range initData.Permissions {
|
|
initDefinedPermission(permission)
|
|
}
|
|
for _, payment := range initData.Payments {
|
|
initDefinedPayment(payment)
|
|
}
|
|
for _, product := range initData.Products {
|
|
initDefinedProduct(product)
|
|
}
|
|
for _, resource := range initData.Resources {
|
|
initDefinedResource(resource)
|
|
}
|
|
for _, role := range initData.Roles {
|
|
initDefinedRole(role)
|
|
}
|
|
for _, syncer := range initData.Syncers {
|
|
initDefinedSyncer(syncer)
|
|
}
|
|
for _, token := range initData.Tokens {
|
|
initDefinedToken(token)
|
|
}
|
|
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)
|
|
}
|
|
for _, invitation := range initData.Invitations {
|
|
initDefinedInvitation(invitation)
|
|
}
|
|
for _, record := range initData.Records {
|
|
initDefinedRecord(record)
|
|
}
|
|
for _, session := range initData.Sessions {
|
|
initDefinedSession(session)
|
|
}
|
|
for _, subscription := range initData.Subscriptions {
|
|
initDefinedSubscription(subscription)
|
|
}
|
|
for _, transaction := range initData.Transactions {
|
|
initDefinedTransaction(transaction)
|
|
}
|
|
}
|
|
}
|
|
|
|
func readInitDataFromFile(filePath string) (*InitData, error) {
|
|
if !util.FileExist(filePath) {
|
|
return nil, nil
|
|
}
|
|
|
|
s := util.ReadStringFromPath(filePath)
|
|
|
|
data := &InitData{
|
|
Organizations: []*Organization{},
|
|
Applications: []*Application{},
|
|
Users: []*User{},
|
|
Certs: []*Cert{},
|
|
Providers: []*Provider{},
|
|
Ldaps: []*Ldap{},
|
|
Models: []*Model{},
|
|
Permissions: []*Permission{},
|
|
Payments: []*Payment{},
|
|
Products: []*Product{},
|
|
Resources: []*Resource{},
|
|
Roles: []*Role{},
|
|
Syncers: []*Syncer{},
|
|
Tokens: []*Token{},
|
|
Webhooks: []*Webhook{},
|
|
Groups: []*Group{},
|
|
Adapters: []*Adapter{},
|
|
Enforcers: []*Enforcer{},
|
|
Plans: []*Plan{},
|
|
Pricings: []*Pricing{},
|
|
Invitations: []*Invitation{},
|
|
Records: []*casvisorsdk.Record{},
|
|
Sessions: []*Session{},
|
|
Subscriptions: []*Subscription{},
|
|
Transactions: []*Transaction{},
|
|
}
|
|
err := util.JsonToStruct(s, data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// transform nil slice to empty slice
|
|
for _, organization := range data.Organizations {
|
|
if organization.Tags == nil {
|
|
organization.Tags = []string{}
|
|
}
|
|
}
|
|
for _, application := range data.Applications {
|
|
if application.Providers == nil {
|
|
application.Providers = []*ProviderItem{}
|
|
}
|
|
if application.SigninMethods == nil {
|
|
application.SigninMethods = []*SigninMethod{}
|
|
}
|
|
if application.SignupItems == nil {
|
|
application.SignupItems = []*SignupItem{}
|
|
}
|
|
if application.GrantTypes == nil {
|
|
application.GrantTypes = []string{}
|
|
}
|
|
if application.Tags == nil {
|
|
application.Tags = []string{}
|
|
}
|
|
if application.RedirectUris == nil {
|
|
application.RedirectUris = []string{}
|
|
}
|
|
if application.TokenFields == nil {
|
|
application.TokenFields = []string{}
|
|
}
|
|
}
|
|
for _, permission := range data.Permissions {
|
|
if permission.Actions == nil {
|
|
permission.Actions = []string{}
|
|
}
|
|
if permission.Resources == nil {
|
|
permission.Resources = []string{}
|
|
}
|
|
if permission.Roles == nil {
|
|
permission.Roles = []string{}
|
|
}
|
|
if permission.Users == nil {
|
|
permission.Users = []string{}
|
|
}
|
|
}
|
|
for _, role := range data.Roles {
|
|
if role.Roles == nil {
|
|
role.Roles = []string{}
|
|
}
|
|
if role.Users == nil {
|
|
role.Users = []string{}
|
|
}
|
|
}
|
|
for _, syncer := range data.Syncers {
|
|
if syncer.TableColumns == nil {
|
|
syncer.TableColumns = []*TableColumn{}
|
|
}
|
|
}
|
|
for _, webhook := range data.Webhooks {
|
|
if webhook.Events == nil {
|
|
webhook.Events = []string{}
|
|
}
|
|
if webhook.Headers == nil {
|
|
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{}
|
|
}
|
|
}
|
|
for _, session := range data.Sessions {
|
|
if session.SessionId == nil {
|
|
session.SessionId = []string{}
|
|
}
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
func initDefinedOrganization(organization *Organization) {
|
|
existed, err := getOrganization(organization.Owner, organization.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := deleteOrganization(organization)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete organization")
|
|
}
|
|
}
|
|
organization.CreatedTime = util.GetCurrentTime()
|
|
organization.AccountItems = getBuiltInAccountItems()
|
|
|
|
_, err = AddOrganization(organization)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedApplication(application *Application) {
|
|
existed, err := getApplication(application.Owner, application.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := deleteApplication(application)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete application")
|
|
}
|
|
}
|
|
application.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddApplication(application)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedUser(user *User) {
|
|
existed, err := getUser(user.Owner, user.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if existed != nil {
|
|
affected, err := deleteUser(user)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete user")
|
|
}
|
|
}
|
|
user.CreatedTime = util.GetCurrentTime()
|
|
user.Id = util.GenerateId()
|
|
if user.Properties == nil {
|
|
user.Properties = make(map[string]string)
|
|
}
|
|
_, err = AddUser(user)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedCert(cert *Cert) {
|
|
existed, err := getCert(cert.Owner, cert.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteCert(cert)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete cert")
|
|
}
|
|
}
|
|
cert.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddCert(cert)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedLdap(ldap *Ldap) {
|
|
existed, err := GetLdap(ldap.Id)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteLdap(ldap)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete ldap")
|
|
}
|
|
}
|
|
_, err = AddLdap(ldap)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedProvider(provider *Provider) {
|
|
existed, err := GetProvider(util.GetId("admin", provider.Name))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteProvider(provider)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete provider")
|
|
}
|
|
}
|
|
_, err = AddProvider(provider)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedModel(model *Model) {
|
|
existed, err := GetModel(model.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteModel(model)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete provider")
|
|
}
|
|
}
|
|
model.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddModel(model)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedPermission(permission *Permission) {
|
|
existed, err := GetPermission(permission.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := deletePermission(permission)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete permission")
|
|
}
|
|
}
|
|
permission.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddPermission(permission)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedPayment(payment *Payment) {
|
|
existed, err := GetPayment(payment.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeletePayment(payment)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete payment")
|
|
}
|
|
}
|
|
payment.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddPayment(payment)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedProduct(product *Product) {
|
|
existed, err := GetProduct(product.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteProduct(product)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete product")
|
|
}
|
|
}
|
|
product.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddProduct(product)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedResource(resource *Resource) {
|
|
existed, err := GetResource(resource.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteResource(resource)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete resource")
|
|
}
|
|
}
|
|
resource.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddResource(resource)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedRole(role *Role) {
|
|
existed, err := GetRole(role.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := deleteRole(role)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete role")
|
|
}
|
|
}
|
|
role.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddRole(role)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedSyncer(syncer *Syncer) {
|
|
existed, err := GetSyncer(syncer.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteSyncer(syncer)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete role")
|
|
}
|
|
}
|
|
syncer.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddSyncer(syncer)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedToken(token *Token) {
|
|
existed, err := GetToken(token.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteToken(token)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete token")
|
|
}
|
|
}
|
|
token.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddToken(token)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedWebhook(webhook *Webhook) {
|
|
existed, err := GetWebhook(webhook.GetId())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed != nil {
|
|
affected, err := DeleteWebhook(webhook)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete webhook")
|
|
}
|
|
}
|
|
webhook.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddWebhook(webhook)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedGroup(group *Group) {
|
|
existed, err := getGroup(group.Owner, group.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if existed != nil {
|
|
affected, err := deleteGroup(group)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete group")
|
|
}
|
|
}
|
|
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 {
|
|
affected, err := DeleteAdapter(adapter)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete adapter")
|
|
}
|
|
}
|
|
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 {
|
|
affected, err := DeleteEnforcer(enforcer)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete enforcer")
|
|
}
|
|
}
|
|
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 {
|
|
affected, err := DeletePlan(plan)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete plan")
|
|
}
|
|
}
|
|
plan.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddPlan(plan)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedPricing(pricing *Pricing) {
|
|
existed, err := getPricing(pricing.Owner, pricing.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if existed != nil {
|
|
affected, err := DeletePricing(pricing)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete pricing")
|
|
}
|
|
}
|
|
pricing.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddPricing(pricing)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedInvitation(invitation *Invitation) {
|
|
existed, err := getInvitation(invitation.Owner, invitation.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if existed != nil {
|
|
affected, err := DeleteInvitation(invitation)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete invitation")
|
|
}
|
|
}
|
|
invitation.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddInvitation(invitation, "en")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedRecord(record *casvisorsdk.Record) {
|
|
record.Id = 0
|
|
record.CreatedTime = util.GetCurrentTime()
|
|
_ = AddRecord(record)
|
|
}
|
|
|
|
func initDefinedSession(session *Session) {
|
|
session.CreatedTime = util.GetCurrentTime()
|
|
_, err := AddSession(session)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedSubscription(subscription *Subscription) {
|
|
existed, err := getSubscription(subscription.Owner, subscription.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if existed != nil {
|
|
affected, err := DeleteSubscription(subscription)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete subscription")
|
|
}
|
|
}
|
|
subscription.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddSubscription(subscription)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initDefinedTransaction(transaction *Transaction) {
|
|
existed, err := getTransaction(transaction.Owner, transaction.Name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if existed != nil {
|
|
affected, err := DeleteTransaction(transaction)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !affected {
|
|
panic("Fail to delete transaction")
|
|
}
|
|
}
|
|
transaction.CreatedTime = util.GetCurrentTime()
|
|
_, err = AddTransaction(transaction)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|