You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by wa...@apache.org on 2022/06/06 15:49:50 UTC

[incubator-devlake] 02/04: fix(jira): modify migrationscripts to spread basicAuthEncoded to username/password

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

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

commit ab0dc9e8160c624d68fe5b33019f38b63768e5b3
Author: Yingchu Chen <yi...@merico.dev>
AuthorDate: Wed Jun 1 18:43:12 2022 +0800

    fix(jira): modify migrationscripts to spread basicAuthEncoded to username/password
---
 plugins/helper/connection.go                       |  6 +--
 plugins/jira/jira.go                               |  2 +-
 ...Schemas20220524.go => updateSchemas20220601.go} | 59 ++++++++++++++++++----
 3 files changed, 52 insertions(+), 15 deletions(-)

diff --git a/plugins/helper/connection.go b/plugins/helper/connection.go
index 93974f73..85163068 100644
--- a/plugins/helper/connection.go
+++ b/plugins/helper/connection.go
@@ -190,10 +190,8 @@ func doDecrypt(dataVal reflect.Value, fieldName string) error {
 		return err
 	}
 	if len(fieldName) > 0 {
-		decryptStr, err := core.Decrypt(encryptCode, dataVal.Elem().FieldByName(fieldName).String())
-		if err != nil {
-			return err
-		}
+		decryptStr, _ := core.Decrypt(encryptCode, dataVal.Elem().FieldByName(fieldName).String())
+
 		dataVal.Elem().FieldByName(fieldName).Set(reflect.ValueOf(decryptStr))
 	}
 	return nil
diff --git a/plugins/jira/jira.go b/plugins/jira/jira.go
index 2a40b901..a36177da 100644
--- a/plugins/jira/jira.go
+++ b/plugins/jira/jira.go
@@ -150,10 +150,10 @@ func (plugin Jira) MigrationScripts() []migration.Script {
 		new(migrationscripts.UpdateSchemas20220505),
 		new(migrationscripts.UpdateSchemas20220507),
 		new(migrationscripts.UpdateSchemas20220518),
-		new(migrationscripts.UpdateSchemas20220524),
 		new(migrationscripts.UpdateSchemas20220525),
 		new(migrationscripts.UpdateSchemas20220526),
 		new(migrationscripts.UpdateSchemas20220527),
+		new(migrationscripts.UpdateSchemas20220601),
 	}
 }
 
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220524.go b/plugins/jira/models/migrationscripts/updateSchemas20220601.go
similarity index 51%
rename from plugins/jira/models/migrationscripts/updateSchemas20220524.go
rename to plugins/jira/models/migrationscripts/updateSchemas20220601.go
index 9c753610..ec528dcb 100644
--- a/plugins/jira/models/migrationscripts/updateSchemas20220524.go
+++ b/plugins/jira/models/migrationscripts/updateSchemas20220601.go
@@ -19,11 +19,14 @@ package migrationscripts
 
 import (
 	"context"
+	"encoding/base64"
 	"github.com/apache/incubator-devlake/plugins/helper"
 	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
+	"strings"
 )
 
-type JiraConnection20220524 struct {
+type JiraConnection20220601 struct {
 	helper.RestConnection
 	helper.BasicAuth
 	EpicKeyField               string `gorm:"type:varchar(50);" json:"epicKeyField"`
@@ -31,29 +34,65 @@ type JiraConnection20220524 struct {
 	RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
 }
 
-func (JiraConnection20220524) TableName() string {
+func (JiraConnection20220601) TableName() string {
 	return "_tool_jira_connections"
 }
 
-type UpdateSchemas20220524 struct{}
+type UpdateSchemas20220601 struct{}
 
-func (*UpdateSchemas20220524) Up(ctx context.Context, db *gorm.DB) error {
+func (*UpdateSchemas20220601) Up(ctx context.Context, db *gorm.DB) error {
 	var err error
 	if !db.Migrator().HasColumn(&JiraConnection20220505{}, "password") {
-		err = db.Migrator().AddColumn(&JiraConnection20220524{}, "password")
+		err = db.Migrator().AddColumn(&JiraConnection20220601{}, "password")
 		if err != nil {
 			return err
 		}
 	}
 
 	if !db.Migrator().HasColumn(&JiraConnection20220505{}, "username") {
-		err = db.Migrator().AddColumn(&JiraConnection20220524{}, "username")
+		err = db.Migrator().AddColumn(&JiraConnection20220601{}, "username")
 		if err != nil {
 			return err
 		}
 	}
 
 	if db.Migrator().HasColumn(&JiraConnection20220505{}, "basic_auth_encoded") {
+		connections := make([]*JiraConnection20220505, 0)
+		db.Find(&connections)
+		for i, _ := range connections {
+			err = helper.DecryptConnection(connections[i], "BasicAuthEncoded")
+			if err != nil {
+				return err
+			}
+			decodedStr, err := base64.StdEncoding.DecodeString(connections[i].BasicAuthEncoded)
+			if err != nil {
+				return err
+			}
+			strList := strings.Split(string(decodedStr), ":")
+			if len(strList) > 1 {
+				newConnection := JiraConnection20220601{
+					RestConnection: helper.RestConnection{
+						BaseConnection: helper.BaseConnection{
+							Name:  connections[i].Name,
+							Model: connections[i].Model,
+						},
+						Endpoint:  connections[i].Endpoint,
+						Proxy:     connections[i].Proxy,
+						RateLimit: connections[i].RateLimit,
+					},
+					BasicAuth: helper.BasicAuth{
+						Username: strList[0],
+						Password: strList[1],
+					},
+					EpicKeyField:               connections[i].EpicKeyField,
+					StoryPointField:            connections[i].StoryPointField,
+					RemotelinkCommitShaPattern: connections[i].RemotelinkCommitShaPattern,
+				}
+				db.Clauses(clause.OnConflict{UpdateAll: true}).Create(newConnection)
+
+			}
+			connections[i].Name = strList[0]
+		}
 		err = db.Migrator().DropColumn(&JiraConnection20220505{}, "basic_auth_encoded")
 		if err != nil {
 			return err
@@ -63,10 +102,10 @@ func (*UpdateSchemas20220524) Up(ctx context.Context, db *gorm.DB) error {
 	return nil
 }
 
-func (*UpdateSchemas20220524) Version() uint64 {
-	return 20220507154646
+func (*UpdateSchemas20220601) Version() uint64 {
+	return 20220601154646
 }
 
-func (*UpdateSchemas20220524) Name() string {
-	return "Add icon_url column to JiraIssue"
+func (*UpdateSchemas20220601) Name() string {
+	return "change basic_auth to username/password"
 }