Exemple #1
0
def admin_import_ctf():
    backup = request.files['backup']
    segments = request.form.get('segments')
    errors = []
    try:
        if segments:
            import_ctf(backup, segments=segments.split(','))
        else:
            import_ctf(backup)
    except Exception as e:
        print(e)
        errors.append(type(e).__name__)

    if errors:
        return errors[0], 500
    else:
        return redirect(url_for('admin.admin_config'))
Exemple #2
0
def admin_import_ctf():
    backup = request.files['backup']
    segments = request.form.get('segments')
    errors = []
    try:
        if segments:
            import_ctf(backup, segments=segments.split(','))
        else:
            import_ctf(backup)
    except Exception as e:
        print(e)
        errors.append(type(e).__name__)

    if errors:
        return errors[0], 500
    else:
        return redirect(url_for('admin.admin_config'))
Exemple #3
0
def admin_import_ctf():
    backup = request.files['backup']
    segments = request.form.get('segments')
    errors = []
    try:
        if segments:
            import_ctf(backup, segments=segments.split(','))
        else:
            import_ctf(backup)
    except TypeError:
        errors.append('The backup file is invalid')
    except IntegrityError as e:
        errors.append(e.message)
    except Exception as e:
        errors.append(type(e).__name__)

    if errors:
        return errors[0], 500
    else:
        return redirect(url_for('admin.admin_config'))
Exemple #4
0
def test_import_ctf():
    """Test that CTFd can import a CTF"""
    app = create_ctfd()
    # TODO: Unrelated to an in-memory database, imports in a test environment are not working with SQLite...
    if app.config['SQLALCHEMY_DATABASE_URI'].startswith('sqlite') is False:
        with app.app_context():
            base_user = '******'
            for x in range(10):
                user = base_user + str(x)
                user_email = user + "@ctfd.io"
                gen_team(app.db, name=user, email=user_email)

            for x in range(10):
                chal = gen_challenge(app.db, name='chal_name{}'.format(x))
                gen_flag(app.db, chal=chal.id, flag='flag')

            app.db.session.commit()

            backup = export_ctf()

            with open('export.zip', 'wb') as f:
                f.write(backup.read())
        destroy_ctfd(app)

        app = create_ctfd()
        with app.app_context():
            import_ctf('export.zip')

            app.db.session.commit()

            print(Teams.query.count())
            print(Challenges.query.count())

            assert Teams.query.count() == 11
            assert Challenges.query.count() == 10
            assert Keys.query.count() == 10
    destroy_ctfd(app)
Exemple #5
0
from CTFd import create_app
from CTFd.utils import import_ctf

import zipfile
import sys

app = create_app()
with app.app_context():
    import_ctf(sys.argv[1])
Exemple #6
0
"""
python import.py export.zip challenges,teams,both,metadata
"""
from CTFd import create_app
from CTFd.utils import import_ctf

import sys

app = create_app()
with app.app_context():
    if len(sys.argv) == 3:
        segments = sys.argv[2].split(',')
    else:
        segments = None

    import_ctf(sys.argv[1], segments=segments)