Beispiel #1
0
    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']
Beispiel #2
0
    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.')
Beispiel #3
0
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()