mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-20 07:14:24 +01:00
Covering edge case issues
This commit is contained in:
@@ -182,6 +182,7 @@ def admin_css():
|
|||||||
return "1"
|
return "1"
|
||||||
return "0"
|
return "0"
|
||||||
|
|
||||||
|
|
||||||
@admin.route('/admin/pages', defaults={'route': None}, methods=['GET', 'POST'])
|
@admin.route('/admin/pages', defaults={'route': None}, methods=['GET', 'POST'])
|
||||||
@admin.route('/admin/pages/<route>', methods=['GET', 'POST'])
|
@admin.route('/admin/pages/<route>', methods=['GET', 'POST'])
|
||||||
@admins_only
|
@admins_only
|
||||||
@@ -274,6 +275,8 @@ def delete_container(container_id):
|
|||||||
@admins_only
|
@admins_only
|
||||||
def new_container():
|
def new_container():
|
||||||
name = request.form.get('name')
|
name = request.form.get('name')
|
||||||
|
if not name.isalpha():
|
||||||
|
return redirect('/admin/containers')
|
||||||
buildfile = request.form.get('buildfile')
|
buildfile = request.form.get('buildfile')
|
||||||
files = request.files.getlist('files[]')
|
files = request.files.getlist('files[]')
|
||||||
create_image(name=name, buildfile=buildfile, files=files)
|
create_image(name=name, buildfile=buildfile, files=files)
|
||||||
|
|||||||
@@ -413,6 +413,7 @@ def create_image(name, buildfile, files):
|
|||||||
tmpfile.close()
|
tmpfile.close()
|
||||||
|
|
||||||
for f in files:
|
for f in files:
|
||||||
|
if f.filename.strip():
|
||||||
filename = os.path.basename(f.filename)
|
filename = os.path.basename(f.filename)
|
||||||
f.save(os.path.join(folder, filename))
|
f.save(os.path.join(folder, filename))
|
||||||
# repository name component must match "[a-z0-9](?:-*[a-z0-9])*(?:[._][a-z0-9](?:-*[a-z0-9])*)*"
|
# repository name component must match "[a-z0-9](?:-*[a-z0-9])*(?:[._][a-z0-9](?:-*[a-z0-9])*)*"
|
||||||
@@ -425,6 +426,7 @@ def create_image(name, buildfile, files):
|
|||||||
db.session.add(container)
|
db.session.add(container)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
db.session.close()
|
db.session.close()
|
||||||
|
rmdir(folder)
|
||||||
return True
|
return True
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
return False
|
return False
|
||||||
@@ -443,8 +445,11 @@ def run_image(name):
|
|||||||
try:
|
try:
|
||||||
info = json.loads(subprocess.check_output(['docker', 'inspect', '--type=image', name]))
|
info = json.loads(subprocess.check_output(['docker', 'inspect', '--type=image', name]))
|
||||||
|
|
||||||
|
try:
|
||||||
ports_asked = info[0]['Config']['ExposedPorts'].keys()
|
ports_asked = info[0]['Config']['ExposedPorts'].keys()
|
||||||
ports_asked = [int(re.sub('[A-Za-z/]+', '', port)) for port in ports_asked]
|
ports_asked = [int(re.sub('[A-Za-z/]+', '', port)) for port in ports_asked]
|
||||||
|
except KeyError:
|
||||||
|
ports_asked = []
|
||||||
|
|
||||||
cmd = ['docker', 'run', '-d']
|
cmd = ['docker', 'run', '-d']
|
||||||
for port in ports_asked:
|
for port in ports_asked:
|
||||||
|
|||||||
Reference in New Issue
Block a user