This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 3a0f52ee fix: jira connection is deleted when enckey is error (#2648)
3a0f52ee is described below

commit 3a0f52eec956c2bd98ab196335fcfd0ec096cc01
Author: abeizn <[email protected]>
AuthorDate: Mon Aug 1 16:00:09 2022 +0800

    fix: jira connection is deleted when enckey is error (#2648)
    
    * fix: jira connection is deleted when enckey is error
    
    * fix: jira connection is deleted when enckey is error
    
    * fix: jira connection is deleted when enckey is error and update jira 
migration scripts
    
    * fix: jira connection is deleted when enckey is error and update jira 
migration scripts
---
 .../migrationscripts/20220407_add_source_table.go  | 28 +++++++
 .../20220505_rename_source_table.go                |  9 +-
 .../migrationscripts/20220716_add_init_tables.go   | 98 +++++++++++-----------
 plugins/jira/models/migrationscripts/register.go   |  1 +
 4 files changed, 83 insertions(+), 53 deletions(-)

diff --git a/plugins/jira/models/migrationscripts/20220407_add_source_table.go 
b/plugins/jira/models/migrationscripts/20220407_add_source_table.go
new file mode 100644
index 00000000..d8c3eb29
--- /dev/null
+++ b/plugins/jira/models/migrationscripts/20220407_add_source_table.go
@@ -0,0 +1,28 @@
+package migrationscripts
+
+import (
+       "context"
+
+       
"github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived"
+       "gorm.io/gorm"
+)
+
+type InitSchemas struct{}
+
+func (*InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
+       m := db.Migrator()
+       if m.HasTable(&archived.JiraConnection{}) {
+               return nil
+       }
+       return db.Migrator().AutoMigrate(
+               &archived.JiraSource{},
+       )
+}
+
+func (*InitSchemas) Version() uint64 {
+       return 20220407201138
+}
+
+func (*InitSchemas) Name() string {
+       return "Jira init schemas"
+}
diff --git 
a/plugins/jira/models/migrationscripts/20220505_rename_source_table.go 
b/plugins/jira/models/migrationscripts/20220505_rename_source_table.go
index 2056c7a6..ef201aa5 100644
--- a/plugins/jira/models/migrationscripts/20220505_rename_source_table.go
+++ b/plugins/jira/models/migrationscripts/20220505_rename_source_table.go
@@ -42,12 +42,9 @@ func (JiraConnectionV010) TableName() string {
 type renameSourceTable struct{}
 
 func (*renameSourceTable) Up(ctx context.Context, db *gorm.DB) error {
-       m := db.Migrator()
-       if m.HasTable(&archived.JiraSource{}) && 
!m.HasTable(&archived.JiraConnection{}) {
-               err := db.Migrator().RenameTable(archived.JiraSource{}, 
JiraConnectionV010{})
-               if err != nil {
-                       return err
-               }
+       err := db.Migrator().RenameTable(archived.JiraSource{}, 
JiraConnectionV010{})
+       if err != nil {
+               return err
        }
        return nil
 }
diff --git a/plugins/jira/models/migrationscripts/20220716_add_init_tables.go 
b/plugins/jira/models/migrationscripts/20220716_add_init_tables.go
index 557d6351..defc0f15 100644
--- a/plugins/jira/models/migrationscripts/20220716_add_init_tables.go
+++ b/plugins/jira/models/migrationscripts/20220716_add_init_tables.go
@@ -30,6 +30,15 @@ import (
        "gorm.io/gorm"
 )
 
+type JiraConnectionTemp struct {
+       archived.RestConnection `mapstructure:",squash"`
+       archived.BasicAuth      `mapstructure:",squash"`
+}
+
+func (JiraConnectionTemp) TableName() string {
+       return "_tool_jira_connections_temp"
+}
+
 type JiraConnectionV011 struct {
        ID                         uint64    `gorm:"primaryKey" json:"id"`
        CreatedAt                  time.Time `json:"createdAt"`
@@ -84,66 +93,61 @@ func (*addInitTables) Up(ctx context.Context, db *gorm.DB) 
error {
        }
 
        // get connection history data
-       var result *gorm.DB
-       m := db.Migrator()
-
-       if m.HasTable(&JiraConnectionV011{}) {
-               var jiraConns []JiraConnectionV011
-               result = db.Find(&jiraConns)
+       err = db.Migrator().AutoMigrate(&JiraConnectionTemp{})
+       if err != nil {
+               return err
+       }
+       defer db.Migrator().DropTable(&JiraConnectionTemp{})
 
-               if result.Error == nil {
-                       err := db.Migrator().DropTable(&JiraConnectionV011{})
+       var result *gorm.DB
+       var jiraConns []JiraConnectionV011
+       result = db.Find(&jiraConns)
+
+       if result.Error == nil {
+               for _, v := range jiraConns {
+                       conn := &JiraConnectionTemp{}
+                       conn.ID = v.ID
+                       conn.Name = v.Name
+                       conn.Endpoint = v.Endpoint
+                       conn.Proxy = v.Proxy
+                       conn.RateLimitPerHour = v.RateLimit
+
+                       c := config.GetConfig()
+                       encKey := c.GetString(core.EncodeKeyEnvStr)
+                       if encKey == "" {
+                               return fmt.Errorf("jira v0.11 invalid encKey")
+                       }
+                       auth, err := core.Decrypt(encKey, v.BasicAuthEncoded)
                        if err != nil {
                                return err
                        }
-                       err = 
db.Migrator().AutoMigrate(&archived.JiraConnection{})
+                       pk, err := base64.StdEncoding.DecodeString(auth)
                        if err != nil {
                                return err
                        }
-
-                       for _, v := range jiraConns {
-                               conn := &archived.JiraConnection{}
-                               conn.ID = v.ID
-                               conn.Name = v.Name
-                               conn.Endpoint = v.Endpoint
-                               conn.Proxy = v.Proxy
-                               conn.RateLimitPerHour = v.RateLimit
-
-                               c := config.GetConfig()
-                               encKey := c.GetString(core.EncodeKeyEnvStr)
-                               if encKey == "" {
-                                       return fmt.Errorf("jira v0.11 invalid 
encKey")
-                               }
-                               auth, err := core.Decrypt(encKey, 
v.BasicAuthEncoded)
+                       originInfo := strings.Split(string(pk), ":")
+                       if len(originInfo) == 2 {
+                               conn.Username = originInfo[0]
+                               conn.Password, err = core.Encrypt(encKey, 
originInfo[1])
                                if err != nil {
                                        return err
                                }
-                               pk, err := base64.StdEncoding.DecodeString(auth)
-                               if err != nil {
-                                       return err
-                               }
-                               originInfo := strings.Split(string(pk), ":")
-                               if len(originInfo) == 2 {
-                                       conn.Username = originInfo[0]
-                                       conn.Password, err = 
core.Encrypt(encKey, originInfo[1])
-                                       if err != nil {
-                                               return err
-                                       }
-                                       // create
-                                       db.Create(&conn)
+                               // create
+                               err := db.Create(&conn)
+                               if err.Error != nil {
+                                       return err.Error
                                }
                        }
                }
-       } else {
-               c := config.GetConfig()
-               encKey := c.GetString("ENCODE_KEY")
-               if encKey == "" {
-                       return fmt.Errorf("jira invalid encKey")
-               }
-               err := db.Migrator().AutoMigrate(&archived.JiraConnection{})
-               if err != nil {
-                       return err
-               }
+       }
+
+       err = db.Migrator().DropTable(&JiraConnectionV011{})
+       if err != nil {
+               return err
+       }
+       err = db.Migrator().RenameTable(JiraConnectionTemp{}, 
archived.JiraConnection{})
+       if err != nil {
+               return err
        }
 
        return db.Migrator().AutoMigrate(
diff --git a/plugins/jira/models/migrationscripts/register.go 
b/plugins/jira/models/migrationscripts/register.go
index 3c89eaff..4825b43d 100644
--- a/plugins/jira/models/migrationscripts/register.go
+++ b/plugins/jira/models/migrationscripts/register.go
@@ -24,6 +24,7 @@ import (
 // All return all the migration scripts
 func All() []migration.Script {
        return []migration.Script{
+               new(InitSchemas),
                new(renameSourceTable),
                new(addInitTables),
        }

Reply via email to