Files
CTFd/migrations/versions/8369118943a1_initial_revision.py
2019-04-17 01:36:30 -04:00

237 lines
10 KiB
Python

"""Initial Revision
Revision ID: 8369118943a1
Revises:
Create Date: 2018-11-05 01:06:24.495010
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy import TypeDecorator, String, func, types, CheckConstraint, and_
from sqlalchemy.sql.expression import union_all
from sqlalchemy.types import JSON, NullType
from sqlalchemy.orm import validates, column_property
from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method
import json
# revision identifiers, used by Alembic.
revision = '8369118943a1'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('challenges',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=80), nullable=True),
sa.Column('description', sa.Text(), nullable=True),
sa.Column('max_attempts', sa.Integer(), nullable=True),
sa.Column('value', sa.Integer(), nullable=True),
sa.Column('category', sa.String(length=80), nullable=True),
sa.Column('type', sa.String(length=80), nullable=True),
sa.Column('state', sa.String(length=80), nullable=False),
sa.Column('requirements', sa.JSON(), nullable=True),
sa.PrimaryKeyConstraint('id')
)
op.create_table('config',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('key', sa.Text(), nullable=True),
sa.Column('value', sa.Text(), nullable=True),
sa.PrimaryKeyConstraint('id')
)
op.create_table('pages',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('title', sa.String(length=80), nullable=True),
sa.Column('route', sa.String(length=128), nullable=True),
sa.Column('content', sa.Text(), nullable=True),
sa.Column('draft', sa.Boolean(), nullable=True),
sa.Column('hidden', sa.Boolean(), nullable=True),
sa.Column('auth_required', sa.Boolean(), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('route')
)
op.create_table('teams',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('oauth_id', sa.Integer(), nullable=True),
sa.Column('name', sa.String(length=128), nullable=True),
sa.Column('email', sa.String(length=128), nullable=True),
sa.Column('password', sa.String(length=128), nullable=True),
sa.Column('secret', sa.String(length=128), nullable=True),
sa.Column('website', sa.String(length=128), nullable=True),
sa.Column('affiliation', sa.String(length=128), nullable=True),
sa.Column('country', sa.String(length=32), nullable=True),
sa.Column('bracket', sa.String(length=32), nullable=True),
sa.Column('hidden', sa.Boolean(), nullable=True),
sa.Column('banned', sa.Boolean(), nullable=True),
sa.Column('created', sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('email'),
sa.UniqueConstraint('id', 'oauth_id'),
sa.UniqueConstraint('oauth_id')
)
op.create_table('dynamic_challenge',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('initial', sa.Integer(), nullable=True),
sa.Column('minimum', sa.Integer(), nullable=True),
sa.Column('decay', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['id'], ['challenges.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('files',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('type', sa.String(length=80), nullable=True),
sa.Column('location', sa.Text(), nullable=True),
sa.Column('challenge_id', sa.Integer(), nullable=True),
sa.Column('page_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['challenge_id'], ['challenges.id'], ),
sa.ForeignKeyConstraint(['page_id'], ['pages.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('flags',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('challenge_id', sa.Integer(), nullable=True),
sa.Column('type', sa.String(length=80), nullable=True),
sa.Column('content', sa.Text(), nullable=True),
sa.Column('data', sa.Text(), nullable=True),
sa.ForeignKeyConstraint(['challenge_id'], ['challenges.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('hints',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('type', sa.String(length=80), nullable=True),
sa.Column('challenge_id', sa.Integer(), nullable=True),
sa.Column('content', sa.Text(), nullable=True),
sa.Column('cost', sa.Integer(), nullable=True),
sa.Column('requirements', sa.JSON(), nullable=True),
sa.ForeignKeyConstraint(['challenge_id'], ['challenges.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('tags',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('challenge_id', sa.Integer(), nullable=True),
sa.Column('value', sa.String(length=80), nullable=True),
sa.ForeignKeyConstraint(['challenge_id'], ['challenges.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('users',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('oauth_id', sa.Integer(), nullable=True),
sa.Column('name', sa.String(length=128), nullable=True),
sa.Column('password', sa.String(length=128), nullable=True),
sa.Column('email', sa.String(length=128), nullable=True),
sa.Column('type', sa.String(length=80), nullable=True),
sa.Column('secret', sa.String(length=128), nullable=True),
sa.Column('website', sa.String(length=128), nullable=True),
sa.Column('affiliation', sa.String(length=128), nullable=True),
sa.Column('country', sa.String(length=32), nullable=True),
sa.Column('bracket', sa.String(length=32), nullable=True),
sa.Column('hidden', sa.Boolean(), nullable=True),
sa.Column('banned', sa.Boolean(), nullable=True),
sa.Column('verified', sa.Boolean(), nullable=True),
sa.Column('team_id', sa.Integer(), nullable=True),
sa.Column('created', sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('email'),
sa.UniqueConstraint('id', 'oauth_id'),
sa.UniqueConstraint('oauth_id')
)
op.create_table('awards',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('team_id', sa.Integer(), nullable=True),
sa.Column('name', sa.String(length=80), nullable=True),
sa.Column('description', sa.Text(), nullable=True),
sa.Column('date', sa.DateTime(), nullable=True),
sa.Column('value', sa.Integer(), nullable=True),
sa.Column('category', sa.String(length=80), nullable=True),
sa.Column('icon', sa.Text(), nullable=True),
sa.Column('requirements', sa.JSON(), nullable=True),
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('notifications',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('title', sa.Text(), nullable=True),
sa.Column('content', sa.Text(), nullable=True),
sa.Column('date', sa.DateTime(), nullable=True),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('team_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('submissions',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('challenge_id', sa.Integer(), nullable=True),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('team_id', sa.Integer(), nullable=True),
sa.Column('ip', sa.String(length=46), nullable=True),
sa.Column('provided', sa.Text(), nullable=True),
sa.Column('type', sa.String(length=32), nullable=True),
sa.Column('date', sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(['challenge_id'], ['challenges.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_table('tracking',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('type', sa.String(length=32), nullable=True),
sa.Column('ip', sa.String(length=46), nullable=True),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('date', sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('unlocks',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('team_id', sa.Integer(), nullable=True),
sa.Column('target', sa.Integer(), nullable=True),
sa.Column('date', sa.DateTime(), nullable=True),
sa.Column('type', sa.String(length=32), nullable=True),
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('solves',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('challenge_id', sa.Integer(), nullable=True),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('team_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['challenge_id'], ['challenges.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['id'], ['submissions.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('challenge_id', 'team_id'),
sa.UniqueConstraint('challenge_id', 'user_id')
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('solves')
op.drop_table('unlocks')
op.drop_table('tracking')
op.drop_table('submissions')
op.drop_table('notifications')
op.drop_table('awards')
op.drop_table('users')
op.drop_table('tags')
op.drop_table('hints')
op.drop_table('flags')
op.drop_table('files')
op.drop_table('dynamic_challenge')
op.drop_table('teams')
op.drop_table('pages')
op.drop_table('config')
op.drop_table('challenges')
# ### end Alembic commands ###