def setUp(self): conn = connect_db() cur = conn.cursor() cur.execute('''DELETE FROM job''') cur.execute('''DELETE FROM auth_token''') cur.execute('''DELETE FROM collaborator''') cur.execute('''DELETE FROM project''') cur.execute('''DELETE FROM "user"''') cur.execute('''DELETE FROM source_upload''') cur.execute('''DELETE FROM build''') cur.execute('''DELETE FROM test_run''') cur.execute('''DELETE FROM measurement''') cur.execute('''DELETE FROM job_markup''') cur.execute('''DELETE FROM secret''') cur.execute('''INSERT INTO "user"(id, github_id, avatar_url, name, email, github_api_token, username) VALUES(%s, 1, 'avatar', 'name', 'email', 'token', 'login')''', (self.user_id,)) cur.execute('''INSERT INTO project(name, type, id, public) VALUES('test', 'upload', %s, true)''', (self.project_id,)) cur.execute('''INSERT INTO collaborator(project_id, user_id, role) VALUES(%s, %s, 'Owner')''', (self.project_id, self.user_id,)) cur.execute('''INSERT INTO auth_token(project_id, id, description, scope_push, scope_pull) VALUES(%s, %s, 'asd', true, true)''', (self.project_id, self.token_id,)) cur.execute('''INSERT INTO secret(project_id, name, value) VALUES(%s, 'SECRET_ENV', %s)''', (self.project_id, encrypt_secret('hello world'))) conn.commit() os.environ['INFRABOX_CLI_TOKEN'] = encode_project_token(self.token_id, self.project_id, 'myproject') self.root_url = os.environ['INFRABOX_ROOT_URL']
def post(self, project_id): b = request.get_json() if not Secrets.name_pattern.match(b['name']): abort(400, 'Secret name must be not empty alphanumeric string.') result = g.db.execute_one_dict( """ SELECT COUNT(*) as cnt FROM secret WHERE project_id = %s """, [project_id]) if result['cnt'] > 50: abort(400, 'Too many secrets.') r = g.db.execute_one( """ SELECT count(*) FROM secret WHERE project_id = %s AND name = %s """, [project_id, b['name']]) if r[0] > 0: abort(400, 'Secret with this name already exist.') value = encrypt_secret(b['value']) g.db.execute( ''' INSERT INTO secret (project_id, name, value) VALUES(%s, %s, %s) ''', [project_id, b['name'], value]) g.db.commit() return OK('Successfully added secret.')
def migrate(conn): cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute(''' SELECT id, value FROM secret ''') secrets = cur.fetchall() cur.close() for s in secrets: new_value = encrypt_secret(s['value']) cur = conn.cursor() cur.execute( ''' UPDATE secret SET value = %s WHERE id = %s ''', [new_value, s['id']]) cur.close()