github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/migration/migrations/1516643303_update_auth_providers.up.go (about) 1 package migrations 2 3 import ( 4 "database/sql" 5 "encoding/json" 6 ) 7 8 func (self *migrations) Up_1516643303() error { 9 10 type team struct { 11 id int64 12 basicAuth []byte 13 auth []byte 14 nonce sql.NullString 15 } 16 17 tx, err := self.DB.Begin() 18 if err != nil { 19 return err 20 } 21 22 rows, err := tx.Query("SELECT id, basic_auth, auth, nonce FROM teams") 23 if err != nil { 24 return err 25 } 26 27 teams := []team{} 28 29 for rows.Next() { 30 team := team{} 31 32 if err = rows.Scan(&team.id, &team.basicAuth, &team.auth, &team.nonce); err != nil { 33 return err 34 } 35 36 teams = append(teams, team) 37 } 38 39 for _, team := range teams { 40 41 var noncense *string 42 if team.nonce.Valid { 43 noncense = &team.nonce.String 44 } 45 46 decryptedAuth, err := self.Strategy.Decrypt(string(team.auth), noncense) 47 if err != nil { 48 tx.Rollback() 49 return err 50 } 51 52 var authConfig map[string]interface{} 53 json.Unmarshal(decryptedAuth, &authConfig) 54 55 if authConfig == nil { 56 authConfig = map[string]interface{}{} 57 } 58 59 var basicAuthConfig map[string]string 60 json.Unmarshal(team.basicAuth, &basicAuthConfig) 61 62 if basicAuthConfig == nil { 63 basicAuthConfig = map[string]string{} 64 } 65 66 username := basicAuthConfig["basic_auth_username"] 67 password := basicAuthConfig["basic_auth_password"] 68 69 if username != "" && password != "" { 70 authConfig["basicauth"] = map[string]string{ 71 "username": username, 72 "password": password, 73 } 74 } 75 76 if len(authConfig) == 0 { 77 authConfig["noauth"] = map[string]bool{ 78 "noauth": true, 79 } 80 } 81 82 newAuth, err := json.Marshal(authConfig) 83 if err != nil { 84 return rollback(tx, err) 85 } 86 87 encryptedAuth, noncense, err := self.Strategy.Encrypt(newAuth) 88 if err != nil { 89 return rollback(tx, err) 90 } 91 92 _, err = tx.Exec("UPDATE teams SET auth = $1, nonce = $2 WHERE id = $3", encryptedAuth, noncense, team.id) 93 if err != nil { 94 return rollback(tx, err) 95 } 96 } 97 98 _, err = tx.Exec("ALTER TABLE teams DROP COLUMN IF EXISTS basic_auth") 99 if err != nil { 100 return rollback(tx, err) 101 } 102 103 err = tx.Commit() 104 if err != nil { 105 return rollback(tx, err) 106 } 107 108 return nil 109 }