forked from vmware-archive/atc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sqldb_teams.go
132 lines (111 loc) · 2.56 KB
/
sqldb_teams.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package db
import (
"database/sql"
"encoding/json"
"github.com/concourse/atc"
)
func (db *SQLDB) GetTeams() ([]SavedTeam, error) {
rows, err := db.conn.Query(`
SELECT id, name, admin, basic_auth, github_auth, uaa_auth FROM teams
`)
if err != nil {
return nil, err
}
defer rows.Close()
teams := []SavedTeam{}
for rows.Next() {
team, err := scanTeam(rows)
if err != nil {
return nil, err
}
teams = append(teams, team)
}
return teams, nil
}
func (db *SQLDB) CreateDefaultTeamIfNotExists() error {
_, err := db.conn.Exec(`
INSERT INTO teams (
name, admin
)
SELECT $1, true
WHERE NOT EXISTS (
SELECT id FROM teams WHERE LOWER(name) = LOWER($1)
)
`, atc.DefaultTeamName)
if err != nil {
return err
}
_, err = db.conn.Exec(`
UPDATE teams
SET admin = true
WHERE LOWER(name) = LOWER($1)
`, atc.DefaultTeamName)
return err
}
func (db *SQLDB) CreateTeam(team Team) (SavedTeam, error) {
jsonEncodedBasicAuth, err := team.BasicAuth.EncryptedJSON()
if err != nil {
return SavedTeam{}, err
}
var gitHubAuth *GitHubAuth
if team.GitHubAuth != nil && team.GitHubAuth.ClientID != "" && team.GitHubAuth.ClientSecret != "" {
gitHubAuth = team.GitHubAuth
}
jsonEncodedGitHubAuth, err := json.Marshal(gitHubAuth)
if err != nil {
return SavedTeam{}, err
}
jsonEncodedUAAAuth, err := json.Marshal(team.UAAAuth)
if err != nil {
return SavedTeam{}, err
}
return scanTeam(db.conn.QueryRow(`
INSERT INTO teams (
name, basic_auth, github_auth, uaa_auth
) VALUES (
$1, $2, $3, $4
)
RETURNING id, name, admin, basic_auth, github_auth, uaa_auth
`, team.Name, jsonEncodedBasicAuth, string(jsonEncodedGitHubAuth), string(jsonEncodedUAAAuth)))
}
func scanTeam(rows scannable) (SavedTeam, error) {
var basicAuth, gitHubAuth, uaaAuth sql.NullString
var savedTeam SavedTeam
err := rows.Scan(
&savedTeam.ID,
&savedTeam.Name,
&savedTeam.Admin,
&basicAuth,
&gitHubAuth,
&uaaAuth,
)
if err != nil {
return savedTeam, err
}
if basicAuth.Valid {
err = json.Unmarshal([]byte(basicAuth.String), &savedTeam.BasicAuth)
if err != nil {
return savedTeam, err
}
}
if gitHubAuth.Valid {
err = json.Unmarshal([]byte(gitHubAuth.String), &savedTeam.GitHubAuth)
if err != nil {
return savedTeam, err
}
}
if uaaAuth.Valid {
err = json.Unmarshal([]byte(uaaAuth.String), &savedTeam.UAAAuth)
if err != nil {
return savedTeam, err
}
}
return savedTeam, nil
}
func (db *SQLDB) DeleteTeamByName(teamName string) error {
_, err := db.conn.Exec(`
DELETE FROM teams
WHERE LOWER(name) = LOWER($1)
`, teamName)
return err
}