93
86
# retrieve user id and update keys
95
cmd = ('gerrit gsql --format json -c "SELECT account_id '
96
'FROM account_external_ids WHERE external_id=\'username:%s\'"'
88
sql = ("SELECT account_id FROM account_external_ids WHERE "
89
"external_id='username:%s'" % (user))
90
cmd = ('gerrit gsql --format json -c "%s"' % (sql))
98
91
stdout, stderr = self._run_cmd(cmd)
100
93
# load and decode json, extract account id
101
94
lines = stdout.splitlines()
103
96
res = json.loads(lines[0])
105
98
account_id = res['columns']['account_id']
109
102
# if found, update ssh keys
111
cmd = ('gerrit gsql -c "DELETE FROM account_ssh_keys '
112
'WHERE account_id=%s' % account_id)
104
sql = ("DELETE FROM account_ssh_keys WHERE account_id=%s"
106
cmd = ('gerrit gsql -c "%s"' % (sql))
113
107
stdout, stderr = self._run_cmd(cmd)
116
cmd = ('gerrit gsql -c "INSERT INTO account_ssh_keys '
117
'(ssh_public_key, valid, account_id, seq) VALUES (\'%s\', \'Y\', '
118
'\'%s\', 0)" ' % (ssh_key, account_id))
110
sql = ("INSERT INTO account_ssh_keys (ssh_public_key, "
111
"valid, account_id, seq) VALUES ('%s', 'Y', "
112
"'%s', 0)" % (ssh_key, account_id))
113
cmd = ('gerrit gsql -c "%s"' % (sql))
119
114
stdout, stderr = self._run_cmd(cmd)
121
116
# reboot gerrit to refresh accounts
143
138
# retrieve user id
145
cmd = ('gerrit gsql --format json -c "SELECT account_id '
146
'FROM account_external_ids WHERE external_id=\'username:%s\'"'
140
sql = ("SELECT account_id FROM account_external_ids WHERE "
141
"external_id='username:%s'" % (login))
142
cmd = ('gerrit gsql --format json -c "%s"' % (sql))
148
143
stdout, stderr = self._run_cmd(cmd)
150
145
# load and decode json, extract account id
151
146
lines = stdout.splitlines()
153
148
res = json.loads(lines[0])
155
150
account_id = res['columns']['account_id']
159
154
# if found, update ssh keys and openid
161
156
# remove old keys and add new
163
cmd = ('gerrit gsql -c "DELETE FROM account_ssh_keys '
164
'WHERE account_id=%s AND ssh_public_key NOT IN (%s)"' %
165
(account_id, (', '.join('\''+item+'\'' for item in ssh)) ))
158
sql = ("DELETE FROM account_ssh_keys WHERE account_id=%s "
159
"AND ssh_public_key NOT IN (%s)" %
161
(', '.join("'%s'" % item for item in ssh))))
162
cmd = ('gerrit gsql -c "%s"' % (sql))
167
164
cmd = ('gerrit gsql -c "DELETE FROM account_ssh_keys '
168
165
'WHERE account_id=%s' % account_id)
173
170
for ssh_key in ssh:
174
171
# insert new keys
175
cmd = ('gerrit gsql -c "INSERT INTO account_ssh_keys '
176
'(ssh_public_key, valid, account_id, seq) SELECT '
177
'%(ssh_key)s, %(valid)s, %(account_id)s, %(num_key)s '
178
'WHERE NOT EXISTS (SELECT '
179
'account_id FROM account_ssh_keys WHERE '
180
'account_id=%(account_id)s AND ssh_public_key=%(ssh_key)s)"' %
181
{'ssh_key': '\''+ssh_key+'\'', 'valid':'\'Y\'',
182
'account_id': '\''+account_id+'\'', 'num_key': num_key})
172
sql = ("INSERT INTO account_ssh_keys (ssh_public_key, "
173
"valid, account_id, seq) SELECT %(ssh_key)s, "
174
"%(valid)s, %(account_id)s, %(num_key)s WHERE NOT "
175
"EXISTS (SELECT account_id FROM account_ssh_keys "
176
"WHERE account_id=%(account_id)s AND "
177
"ssh_public_key=%(ssh_key)s)" %
178
{'ssh_key': "'%s'" % ssh_key,
180
'account_id': "'%s'" % account_id,
182
cmd = ('gerrit gsql -c "%s"' % (sql))
184
184
stdout, stderr = self._run_cmd(cmd)
186
186
# replace external id
188
openid = openid.replace('login.launchpad.net', 'login.ubuntu.com')
189
cmd = ('gerrit gsql -c "DELETE FROM account_external_ids '
190
'WHERE account_id=%s AND external_id NOT IN (%s) AND '
191
'external_id LIKE \'http%%\'"' % (account_id, '\''+openid+'\''))
188
openid = openid.replace('login.launchpad.net',
190
sql = ("DELETE FROM account_external_ids WHERE "
191
"account_id=%s AND external_id NOT IN (%s) AND "
192
"external_id LIKE 'http%%'" %
193
(account_id, "'%s'" % openid))
194
cmd = ('gerrit gsql -c "%s"' % (sql))
192
195
stdout, stderr = self._run_cmd(cmd)
194
197
# replace launchpad for ubuntu account
195
cmd = ('gerrit gsql -c "INSERT INTO account_external_ids '
196
'(account_id, email_address, external_id) SELECT '
197
'%(account_id)s, %(email_address)s, %(external_id)s WHERE '
198
'NOT EXISTS (SELECT account_id FROM account_external_ids '
199
'WHERE account_id=%(account_id)s AND external_id=%(external_id)s)"' %
200
{'account_id':'\''+account_id+'\'',
201
'email_address':'\''+str(email)+'\'',
202
'external_id': '\''+openid+'\''})
198
sql = ("INSERT INTO account_external_ids "
199
"(account_id, email_address, external_id) SELECT "
200
"%(account_id)s, %(email_address)s, "
201
"%(external_id)s WHERE NOT EXISTS (SELECT "
202
"account_id FROM account_external_ids WHERE "
203
"account_id=%(account_id)s AND "
204
"external_id=%(external_id)s)" %
205
{'account_id': "'%s'" % account_id,
206
'email_address': "'%s'" % str(email),
207
'external_id': "'%s'" % openid})
208
cmd = ('gerrit gsql -c "%s"' % (sql))
203
209
stdout, stderr = self._run_cmd(cmd)
206
211
def create_project(self, project):
207
212
log('Creating gerrit project %s' % project)
208
213
cmd = ('gerrit create-project %s' % project)