mirror of https://github.com/EasyCTF/librectf
452 lines
18 KiB
Python
452 lines
18 KiB
Python
"""Initial.
|
|
|
|
Revision ID: 59f8fa2f0c98
|
|
Revises:
|
|
Create Date: 2018-02-21 04:34:27.788175
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = "59f8fa2f0c98"
|
|
down_revision = None
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table(
|
|
"classrooms",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("name", sa.Unicode(length=64), nullable=False),
|
|
sa.Column("owner", sa.Integer(), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"config",
|
|
sa.Column("cid", sa.Integer(), nullable=False),
|
|
sa.Column("key", sa.Unicode(length=32), nullable=True),
|
|
sa.Column("value", sa.Text(), nullable=True),
|
|
sa.PrimaryKeyConstraint("cid"),
|
|
)
|
|
op.create_index(op.f("ix_config_key"), "config", ["key"], unique=False)
|
|
op.create_table(
|
|
"eggs",
|
|
sa.Column("eid", sa.Integer(), nullable=False),
|
|
sa.Column("flag", sa.Unicode(length=64), nullable=False),
|
|
sa.PrimaryKeyConstraint("eid"),
|
|
)
|
|
op.create_index(op.f("ix_eggs_flag"), "eggs", ["flag"], unique=True)
|
|
op.create_table(
|
|
"judge_api_keys",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("key", sa.String(length=64), nullable=True),
|
|
sa.Column("ip", sa.Integer(), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_judge_api_keys_key"), "judge_api_keys", ["key"], unique=False
|
|
)
|
|
op.create_table(
|
|
"problems",
|
|
sa.Column("pid", sa.Integer(), nullable=False),
|
|
sa.Column("author", sa.Unicode(length=32), nullable=True),
|
|
sa.Column("name", sa.String(length=32), nullable=True),
|
|
sa.Column("title", sa.Unicode(length=64), nullable=True),
|
|
sa.Column("description", sa.Text(), nullable=True),
|
|
sa.Column("hint", sa.Text(), nullable=True),
|
|
sa.Column("category", sa.Unicode(length=64), nullable=True),
|
|
sa.Column("value", sa.Integer(), nullable=True),
|
|
sa.Column("grader", sa.UnicodeText(), nullable=True),
|
|
sa.Column("autogen", sa.Boolean(), nullable=True),
|
|
sa.Column("programming", sa.Boolean(), nullable=True),
|
|
sa.Column("threshold", sa.Integer(), nullable=True),
|
|
sa.Column("weightmap", sa.PickleType(), nullable=True),
|
|
sa.Column("test_cases", sa.Integer(), nullable=True),
|
|
sa.Column("time_limit", sa.Integer(), nullable=True),
|
|
sa.Column("memory_limit", sa.Integer(), nullable=True),
|
|
sa.Column("generator", sa.Text(), nullable=True),
|
|
sa.Column("source_verifier", sa.Text(), nullable=True),
|
|
sa.Column("path", sa.String(length=128), nullable=True),
|
|
sa.PrimaryKeyConstraint("pid"),
|
|
sa.UniqueConstraint("name"),
|
|
)
|
|
op.create_index(op.f("ix_problems_pid"), "problems", ["pid"], unique=False)
|
|
op.create_table(
|
|
"teams",
|
|
sa.Column("tid", sa.Integer(), nullable=False),
|
|
sa.Column("teamname", sa.Unicode(length=32), nullable=True),
|
|
sa.Column("school", sa.Unicode(length=64), nullable=True),
|
|
sa.Column("owner", sa.Integer(), nullable=True),
|
|
sa.Column("admin", sa.Boolean(), nullable=True),
|
|
sa.Column("shell_user", sa.String(length=16), nullable=True),
|
|
sa.Column("shell_pass", sa.String(length=32), nullable=True),
|
|
sa.Column("banned", sa.Boolean(), nullable=True),
|
|
sa.Column("avatar", sa.String(length=128), nullable=True),
|
|
sa.PrimaryKeyConstraint("tid"),
|
|
sa.UniqueConstraint("shell_user"),
|
|
sa.UniqueConstraint("teamname"),
|
|
)
|
|
op.create_index(op.f("ix_teams_tid"), "teams", ["tid"], unique=False)
|
|
op.create_table(
|
|
"autogen_files",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("pid", sa.Integer(), nullable=True),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("filename", sa.Unicode(length=64), nullable=True),
|
|
sa.Column("url", sa.String(length=128), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["pid"],
|
|
["problems.pid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_autogen_files_filename"), "autogen_files", ["filename"], unique=False
|
|
)
|
|
op.create_index(op.f("ix_autogen_files_id"), "autogen_files", ["id"], unique=False)
|
|
op.create_index(
|
|
op.f("ix_autogen_files_pid"), "autogen_files", ["pid"], unique=False
|
|
)
|
|
op.create_index(
|
|
op.f("ix_autogen_files_tid"), "autogen_files", ["tid"], unique=False
|
|
)
|
|
op.create_table(
|
|
"classroom_invitation",
|
|
sa.Column("team_id", sa.Integer(), nullable=False),
|
|
sa.Column("classroom_id", sa.Integer(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["classroom_id"],
|
|
["classrooms.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["team_id"],
|
|
["teams.tid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("team_id", "classroom_id"),
|
|
)
|
|
op.create_table(
|
|
"files",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("pid", sa.Integer(), nullable=True),
|
|
sa.Column("filename", sa.Unicode(length=64), nullable=True),
|
|
sa.Column("url", sa.String(length=128), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["pid"],
|
|
["problems.pid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_files_id"), "files", ["id"], unique=False)
|
|
op.create_index(op.f("ix_files_pid"), "files", ["pid"], unique=False)
|
|
op.create_table(
|
|
"team_classroom",
|
|
sa.Column("team_id", sa.Integer(), nullable=False),
|
|
sa.Column("classroom_id", sa.Integer(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["classroom_id"],
|
|
["classrooms.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["team_id"],
|
|
["teams.tid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("team_id", "classroom_id"),
|
|
)
|
|
op.create_table(
|
|
"users",
|
|
sa.Column("uid", sa.Integer(), nullable=False),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("name", sa.Unicode(length=32), nullable=True),
|
|
sa.Column("easyctf", sa.Boolean(), nullable=True),
|
|
sa.Column("username", sa.String(length=16), nullable=True),
|
|
sa.Column("email", sa.String(length=128), nullable=True),
|
|
sa.Column("password", sa.String(length=128), nullable=True),
|
|
sa.Column("admin", sa.Boolean(), nullable=True),
|
|
sa.Column("level", sa.Integer(), nullable=True),
|
|
sa.Column("register_time", sa.DateTime(), nullable=True),
|
|
sa.Column("reset_token", sa.String(length=32), nullable=True),
|
|
sa.Column("otp_secret", sa.String(length=16), nullable=True),
|
|
sa.Column("otp_confirmed", sa.Boolean(), nullable=True),
|
|
sa.Column("email_token", sa.String(length=32), nullable=True),
|
|
sa.Column("email_verified", sa.Boolean(), nullable=True),
|
|
sa.Column("avatar", sa.String(length=128), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["tid"],
|
|
["teams.tid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("uid"),
|
|
sa.UniqueConstraint("email"),
|
|
)
|
|
op.create_index(op.f("ix_users_easyctf"), "users", ["easyctf"], unique=False)
|
|
op.create_index(op.f("ix_users_uid"), "users", ["uid"], unique=False)
|
|
op.create_index(op.f("ix_users_username"), "users", ["username"], unique=True)
|
|
op.create_table(
|
|
"egg_solves",
|
|
sa.Column("sid", sa.Integer(), nullable=False),
|
|
sa.Column("eid", sa.Integer(), nullable=True),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column("date", sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["eid"],
|
|
["eggs.eid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tid"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("sid"),
|
|
)
|
|
op.create_index(op.f("ix_egg_solves_eid"), "egg_solves", ["eid"], unique=False)
|
|
op.create_index(op.f("ix_egg_solves_tid"), "egg_solves", ["tid"], unique=False)
|
|
op.create_index(op.f("ix_egg_solves_uid"), "egg_solves", ["uid"], unique=False)
|
|
op.create_table(
|
|
"game_states",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column(
|
|
"last_updated",
|
|
sa.DateTime(),
|
|
server_default=sa.text("now()"),
|
|
nullable=True,
|
|
),
|
|
sa.Column("state", sa.UnicodeText(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("last_updated"),
|
|
sa.UniqueConstraint("uid"),
|
|
)
|
|
op.create_table(
|
|
"jobs",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("pid", sa.Integer(), nullable=True),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column("submitted", sa.DateTime(), nullable=True),
|
|
sa.Column("claimed", sa.DateTime(), nullable=True),
|
|
sa.Column("completed", sa.DateTime(), nullable=True),
|
|
sa.Column("execution_time", sa.Float(), nullable=True),
|
|
sa.Column("execution_memory", sa.Float(), nullable=True),
|
|
sa.Column("language", sa.String(length=16), nullable=False),
|
|
sa.Column("contents", sa.Text(), nullable=False),
|
|
sa.Column("feedback", sa.Text(), nullable=True),
|
|
sa.Column("status", sa.Integer(), nullable=False),
|
|
sa.Column("verdict", sa.String(length=8), nullable=True),
|
|
sa.Column("last_ran_case", sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["pid"],
|
|
["problems.pid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tid"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_jobs_pid"), "jobs", ["pid"], unique=False)
|
|
op.create_index(op.f("ix_jobs_status"), "jobs", ["status"], unique=False)
|
|
op.create_index(op.f("ix_jobs_tid"), "jobs", ["tid"], unique=False)
|
|
op.create_index(op.f("ix_jobs_uid"), "jobs", ["uid"], unique=False)
|
|
op.create_table(
|
|
"password_reset_tokens",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column("active", sa.Boolean(), nullable=True),
|
|
sa.Column("token", sa.String(length=32), nullable=True),
|
|
sa.Column("email", sa.Unicode(length=128), nullable=True),
|
|
sa.Column("expire", sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_password_reset_tokens_uid"),
|
|
"password_reset_tokens",
|
|
["uid"],
|
|
unique=False,
|
|
)
|
|
op.create_table(
|
|
"player_team_invitation",
|
|
sa.Column("user_id", sa.Integer(), nullable=True),
|
|
sa.Column("team_id", sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["team_id"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["user_id"],
|
|
["users.uid"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"solves",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("pid", sa.Integer(), nullable=True),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column("date", sa.DateTime(), nullable=True),
|
|
sa.Column("flag", sa.Unicode(length=256), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["pid"],
|
|
["problems.pid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tid"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("pid", "tid"),
|
|
)
|
|
op.create_index(op.f("ix_solves_id"), "solves", ["id"], unique=False)
|
|
op.create_index(op.f("ix_solves_pid"), "solves", ["pid"], unique=False)
|
|
op.create_index(op.f("ix_solves_tid"), "solves", ["tid"], unique=False)
|
|
op.create_index(op.f("ix_solves_uid"), "solves", ["uid"], unique=False)
|
|
op.create_table(
|
|
"team_player_invitation",
|
|
sa.Column("team_id", sa.Integer(), nullable=True),
|
|
sa.Column("user_id", sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["team_id"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["user_id"],
|
|
["users.uid"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"wrong_egg",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("eid", sa.Integer(), nullable=True),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column("date", sa.DateTime(), nullable=True),
|
|
sa.Column("submission", sa.Unicode(length=64), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["eid"],
|
|
["eggs.eid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tid"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_wrong_egg_eid"), "wrong_egg", ["eid"], unique=False)
|
|
op.create_index(op.f("ix_wrong_egg_tid"), "wrong_egg", ["tid"], unique=False)
|
|
op.create_index(op.f("ix_wrong_egg_uid"), "wrong_egg", ["uid"], unique=False)
|
|
op.create_table(
|
|
"wrong_flags",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("pid", sa.Integer(), nullable=True),
|
|
sa.Column("tid", sa.Integer(), nullable=True),
|
|
sa.Column("uid", sa.Integer(), nullable=True),
|
|
sa.Column("date", sa.DateTime(), nullable=True),
|
|
sa.Column("flag", sa.Unicode(length=256), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["pid"],
|
|
["problems.pid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tid"],
|
|
["teams.tid"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["uid"],
|
|
["users.uid"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_wrong_flags_flag"), "wrong_flags", ["flag"], unique=False)
|
|
op.create_index(op.f("ix_wrong_flags_id"), "wrong_flags", ["id"], unique=False)
|
|
op.create_index(op.f("ix_wrong_flags_pid"), "wrong_flags", ["pid"], unique=False)
|
|
op.create_index(op.f("ix_wrong_flags_tid"), "wrong_flags", ["tid"], unique=False)
|
|
op.create_index(op.f("ix_wrong_flags_uid"), "wrong_flags", ["uid"], unique=False)
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade():
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_index(op.f("ix_wrong_flags_uid"), table_name="wrong_flags")
|
|
op.drop_index(op.f("ix_wrong_flags_tid"), table_name="wrong_flags")
|
|
op.drop_index(op.f("ix_wrong_flags_pid"), table_name="wrong_flags")
|
|
op.drop_index(op.f("ix_wrong_flags_id"), table_name="wrong_flags")
|
|
op.drop_index(op.f("ix_wrong_flags_flag"), table_name="wrong_flags")
|
|
op.drop_table("wrong_flags")
|
|
op.drop_index(op.f("ix_wrong_egg_uid"), table_name="wrong_egg")
|
|
op.drop_index(op.f("ix_wrong_egg_tid"), table_name="wrong_egg")
|
|
op.drop_index(op.f("ix_wrong_egg_eid"), table_name="wrong_egg")
|
|
op.drop_table("wrong_egg")
|
|
op.drop_table("team_player_invitation")
|
|
op.drop_index(op.f("ix_solves_uid"), table_name="solves")
|
|
op.drop_index(op.f("ix_solves_tid"), table_name="solves")
|
|
op.drop_index(op.f("ix_solves_pid"), table_name="solves")
|
|
op.drop_index(op.f("ix_solves_id"), table_name="solves")
|
|
op.drop_table("solves")
|
|
op.drop_table("player_team_invitation")
|
|
op.drop_index(
|
|
op.f("ix_password_reset_tokens_uid"), table_name="password_reset_tokens"
|
|
)
|
|
op.drop_table("password_reset_tokens")
|
|
op.drop_index(op.f("ix_jobs_uid"), table_name="jobs")
|
|
op.drop_index(op.f("ix_jobs_tid"), table_name="jobs")
|
|
op.drop_index(op.f("ix_jobs_status"), table_name="jobs")
|
|
op.drop_index(op.f("ix_jobs_pid"), table_name="jobs")
|
|
op.drop_table("jobs")
|
|
op.drop_table("game_states")
|
|
op.drop_index(op.f("ix_egg_solves_uid"), table_name="egg_solves")
|
|
op.drop_index(op.f("ix_egg_solves_tid"), table_name="egg_solves")
|
|
op.drop_index(op.f("ix_egg_solves_eid"), table_name="egg_solves")
|
|
op.drop_table("egg_solves")
|
|
op.drop_index(op.f("ix_users_username"), table_name="users")
|
|
op.drop_index(op.f("ix_users_uid"), table_name="users")
|
|
op.drop_index(op.f("ix_users_easyctf"), table_name="users")
|
|
op.drop_table("users")
|
|
op.drop_table("team_classroom")
|
|
op.drop_index(op.f("ix_files_pid"), table_name="files")
|
|
op.drop_index(op.f("ix_files_id"), table_name="files")
|
|
op.drop_table("files")
|
|
op.drop_table("classroom_invitation")
|
|
op.drop_index(op.f("ix_autogen_files_tid"), table_name="autogen_files")
|
|
op.drop_index(op.f("ix_autogen_files_pid"), table_name="autogen_files")
|
|
op.drop_index(op.f("ix_autogen_files_id"), table_name="autogen_files")
|
|
op.drop_index(op.f("ix_autogen_files_filename"), table_name="autogen_files")
|
|
op.drop_table("autogen_files")
|
|
op.drop_index(op.f("ix_teams_tid"), table_name="teams")
|
|
op.drop_table("teams")
|
|
op.drop_index(op.f("ix_problems_pid"), table_name="problems")
|
|
op.drop_table("problems")
|
|
op.drop_index(op.f("ix_judge_api_keys_key"), table_name="judge_api_keys")
|
|
op.drop_table("judge_api_keys")
|
|
op.drop_index(op.f("ix_eggs_flag"), table_name="eggs")
|
|
op.drop_table("eggs")
|
|
op.drop_index(op.f("ix_config_key"), table_name="config")
|
|
op.drop_table("config")
|
|
op.drop_table("classrooms")
|
|
# ### end Alembic commands ###
|