forked from vmware-archive/atc
/
sqldb_teams.go
146 lines (122 loc) · 2.94 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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, genericoauth_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
}
jsonEncodedGenericOAuth, err := json.Marshal(team.GenericOAuth)
if err != nil {
return SavedTeam{}, err
}
return scanTeam(db.conn.QueryRow(`
INSERT INTO teams (
name, basic_auth, github_auth, uaa_auth, genericoauth_auth
) VALUES (
$1, $2, $3, $4, $5
)
RETURNING id, name, admin, basic_auth, github_auth, uaa_auth, genericoauth_auth
`, team.Name, jsonEncodedBasicAuth, string(jsonEncodedGitHubAuth), string(jsonEncodedUAAAuth), string(jsonEncodedGenericOAuth)))
}
func scanTeam(rows scannable) (SavedTeam, error) {
var basicAuth, gitHubAuth, uaaAuth, genericOAuth sql.NullString
var savedTeam SavedTeam
err := rows.Scan(
&savedTeam.ID,
&savedTeam.Name,
&savedTeam.Admin,
&basicAuth,
&gitHubAuth,
&uaaAuth,
&genericOAuth,
)
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
}
}
if genericOAuth.Valid {
err = json.Unmarshal([]byte(genericOAuth.String), &savedTeam.GenericOAuth)
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
}