mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-03 12:30:19 +08:00
Improve adapter error handling
This commit is contained in:
@ -176,9 +176,7 @@
|
|||||||
],
|
],
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
"actions": [
|
"actions": [],
|
||||||
""
|
|
||||||
],
|
|
||||||
"displayName": "",
|
"displayName": "",
|
||||||
"effect": "",
|
"effect": "",
|
||||||
"isEnabled": true,
|
"isEnabled": true,
|
||||||
@ -186,15 +184,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"owner": "",
|
"owner": "",
|
||||||
"resourceType": "",
|
"resourceType": "",
|
||||||
"resources": [
|
"resources": [],
|
||||||
""
|
"roles": [],
|
||||||
],
|
"users": []
|
||||||
"roles": [
|
|
||||||
""
|
|
||||||
],
|
|
||||||
"users": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"payments": [
|
"payments": [
|
||||||
@ -236,9 +228,7 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"owner": "",
|
"owner": "",
|
||||||
"price": 0,
|
"price": 0,
|
||||||
"providers": [
|
"providers": [],
|
||||||
""
|
|
||||||
],
|
|
||||||
"quantity": 0,
|
"quantity": 0,
|
||||||
"returnUrl": "",
|
"returnUrl": "",
|
||||||
"sold": 0,
|
"sold": 0,
|
||||||
@ -268,12 +258,8 @@
|
|||||||
"isEnabled": true,
|
"isEnabled": true,
|
||||||
"name": "",
|
"name": "",
|
||||||
"owner": "",
|
"owner": "",
|
||||||
"roles": [
|
"roles": [],
|
||||||
""
|
"users": []
|
||||||
],
|
|
||||||
"users": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"syncers": [
|
"syncers": [
|
||||||
@ -284,7 +270,7 @@
|
|||||||
"databaseType": "",
|
"databaseType": "",
|
||||||
"errorText": "",
|
"errorText": "",
|
||||||
"host": "",
|
"host": "",
|
||||||
"isEnabled": true,
|
"isEnabled": false,
|
||||||
"name": "",
|
"name": "",
|
||||||
"organization": "",
|
"organization": "",
|
||||||
"owner": "",
|
"owner": "",
|
||||||
@ -298,9 +284,7 @@
|
|||||||
"isHashed": true,
|
"isHashed": true,
|
||||||
"name": "",
|
"name": "",
|
||||||
"type": "",
|
"type": "",
|
||||||
"values": [
|
"values": []
|
||||||
""
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tablePrimaryKey": "",
|
"tablePrimaryKey": "",
|
||||||
@ -330,9 +314,7 @@
|
|||||||
"webhooks": [
|
"webhooks": [
|
||||||
{
|
{
|
||||||
"contentType": "",
|
"contentType": "",
|
||||||
"events": [
|
"events": [],
|
||||||
""
|
|
||||||
],
|
|
||||||
"headers": [
|
"headers": [
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
|
@ -86,7 +86,11 @@ func InitAdapter() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ormer = NewAdapter(conf.GetConfigString("driverName"), conf.GetConfigDataSourceName(), conf.GetConfigString("dbName"))
|
var err error
|
||||||
|
ormer, err = NewAdapter(conf.GetConfigString("driverName"), conf.GetConfigDataSourceName(), conf.GetConfigString("dbName"))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
tableNamePrefix := conf.GetConfigString("tableNamePrefix")
|
tableNamePrefix := conf.GetConfigString("tableNamePrefix")
|
||||||
tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, tableNamePrefix)
|
tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, tableNamePrefix)
|
||||||
@ -121,19 +125,22 @@ func finalizer(a *Ormer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewAdapter is the constructor for Ormer.
|
// NewAdapter is the constructor for Ormer.
|
||||||
func NewAdapter(driverName string, dataSourceName string, dbName string) *Ormer {
|
func NewAdapter(driverName string, dataSourceName string, dbName string) (*Ormer, error) {
|
||||||
a := &Ormer{}
|
a := &Ormer{}
|
||||||
a.driverName = driverName
|
a.driverName = driverName
|
||||||
a.dataSourceName = dataSourceName
|
a.dataSourceName = dataSourceName
|
||||||
a.dbName = dbName
|
a.dbName = dbName
|
||||||
|
|
||||||
// Open the DB, create it if not existed.
|
// Open the DB, create it if not existed.
|
||||||
a.open()
|
err := a.open()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Call the destructor when the object is released.
|
// Call the destructor when the object is released.
|
||||||
runtime.SetFinalizer(a, finalizer)
|
runtime.SetFinalizer(a, finalizer)
|
||||||
|
|
||||||
return a
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func refineDataSourceNameForPostgres(dataSourceName string) string {
|
func refineDataSourceNameForPostgres(dataSourceName string) string {
|
||||||
@ -192,7 +199,7 @@ func (a *Ormer) CreateDatabase() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Ormer) open() {
|
func (a *Ormer) open() error {
|
||||||
dataSourceName := a.dataSourceName + a.dbName
|
dataSourceName := a.dataSourceName + a.dbName
|
||||||
if a.driverName != "mysql" {
|
if a.driverName != "mysql" {
|
||||||
dataSourceName = a.dataSourceName
|
dataSourceName = a.dataSourceName
|
||||||
@ -200,8 +207,9 @@ func (a *Ormer) open() {
|
|||||||
|
|
||||||
engine, err := xorm.NewEngine(a.driverName, dataSourceName)
|
engine, err := xorm.NewEngine(a.driverName, dataSourceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.driverName == "postgres" {
|
if a.driverName == "postgres" {
|
||||||
schema := util.GetValueFromDataSourceName("search_path", dataSourceName)
|
schema := util.GetValueFromDataSourceName("search_path", dataSourceName)
|
||||||
if schema != "" {
|
if schema != "" {
|
||||||
@ -210,6 +218,7 @@ func (a *Ormer) open() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.Engine = engine
|
a.Engine = engine
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Ormer) close() {
|
func (a *Ormer) close() {
|
||||||
|
@ -252,6 +252,10 @@ func (syncer *Syncer) getKey() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RunSyncer(syncer *Syncer) error {
|
func RunSyncer(syncer *Syncer) error {
|
||||||
syncer.initAdapter()
|
err := syncer.initAdapter()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return syncer.syncUsers()
|
return syncer.syncUsers()
|
||||||
}
|
}
|
||||||
|
@ -50,9 +50,12 @@ func addSyncerJob(syncer *Syncer) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
syncer.initAdapter()
|
err := syncer.initAdapter()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
err := syncer.syncUsers()
|
err = syncer.syncUsers()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,11 @@ func getEnabledSyncerForOrganization(organization string) (*Syncer, error) {
|
|||||||
|
|
||||||
for _, syncer := range syncers {
|
for _, syncer := range syncers {
|
||||||
if syncer.Organization == organization && syncer.IsEnabled {
|
if syncer.Organization == organization && syncer.IsEnabled {
|
||||||
syncer.initAdapter()
|
err = syncer.initAdapter()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return syncer, nil
|
return syncer, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,27 +162,31 @@ func (syncer *Syncer) calculateHash(user *OriginalUser) string {
|
|||||||
return util.GetMd5Hash(s)
|
return util.GetMd5Hash(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (syncer *Syncer) initAdapter() {
|
func (syncer *Syncer) initAdapter() error {
|
||||||
if syncer.Ormer == nil {
|
if syncer.Ormer != nil {
|
||||||
var dataSourceName string
|
return nil
|
||||||
if syncer.DatabaseType == "mssql" {
|
|
||||||
dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", syncer.User, syncer.Password, syncer.Host, syncer.Port, syncer.Database)
|
|
||||||
} else if syncer.DatabaseType == "postgres" {
|
|
||||||
sslMode := "disable"
|
|
||||||
if syncer.SslMode != "" {
|
|
||||||
sslMode = syncer.SslMode
|
|
||||||
}
|
|
||||||
dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%d sslmode=%s dbname=%s", syncer.User, syncer.Password, syncer.Host, syncer.Port, sslMode, syncer.Database)
|
|
||||||
} else {
|
|
||||||
dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%d)/", syncer.User, syncer.Password, syncer.Host, syncer.Port)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !isCloudIntranet {
|
|
||||||
dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
|
|
||||||
}
|
|
||||||
|
|
||||||
syncer.Ormer = NewAdapter(syncer.DatabaseType, dataSourceName, syncer.Database)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var dataSourceName string
|
||||||
|
if syncer.DatabaseType == "mssql" {
|
||||||
|
dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", syncer.User, syncer.Password, syncer.Host, syncer.Port, syncer.Database)
|
||||||
|
} else if syncer.DatabaseType == "postgres" {
|
||||||
|
sslMode := "disable"
|
||||||
|
if syncer.SslMode != "" {
|
||||||
|
sslMode = syncer.SslMode
|
||||||
|
}
|
||||||
|
dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%d sslmode=%s dbname=%s", syncer.User, syncer.Password, syncer.Host, syncer.Port, sslMode, syncer.Database)
|
||||||
|
} else {
|
||||||
|
dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%d)/", syncer.User, syncer.Password, syncer.Host, syncer.Port)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isCloudIntranet {
|
||||||
|
dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
syncer.Ormer, err = NewAdapter(syncer.DatabaseType, dataSourceName, syncer.Database)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunSyncUsersJob() {
|
func RunSyncUsersJob() {
|
||||||
|
Reference in New Issue
Block a user