mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-18 22:44:24 +01:00
Closes #73
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
from flask import render_template, request, redirect, abort, jsonify, url_for, session, Blueprint
|
from flask import render_template, request, redirect, abort, jsonify, url_for, session, Blueprint
|
||||||
from CTFd.utils import sha512, is_safe_url, authed, admins_only, is_admin, unix_time, unix_time_millis, get_config, set_config, sendmail, rmdir
|
from CTFd.utils import sha512, is_safe_url, authed, admins_only, is_admin, unix_time, unix_time_millis, get_config, set_config, sendmail, rmdir
|
||||||
from CTFd.models import db, Teams, Solves, Challenges, WrongKeys, Keys, Tags, Files, Tracking, Pages, Config
|
from CTFd.models import db, Teams, Solves, Challenges, WrongKeys, Keys, Tags, Files, Tracking, Pages, Config, DatabaseError
|
||||||
from itsdangerous import TimedSerializer, BadTimeSignature
|
from itsdangerous import TimedSerializer, BadTimeSignature
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
from socket import inet_aton, inet_ntoa
|
from socket import inet_aton, inet_ntoa
|
||||||
@@ -410,10 +410,16 @@ def unban(teamid):
|
|||||||
@admin.route('/admin/team/<teamid>/delete', methods=['POST'])
|
@admin.route('/admin/team/<teamid>/delete', methods=['POST'])
|
||||||
@admins_only
|
@admins_only
|
||||||
def delete_team(teamid):
|
def delete_team(teamid):
|
||||||
user = Teams.query.filter_by(id=teamid).first()
|
try:
|
||||||
db.session.delete(user)
|
WrongKeys.query.filter_by(team=teamid).delete()
|
||||||
db.session.commit()
|
Solves.query.filter_by(teamid=teamid).delete()
|
||||||
return '1'
|
Tracking.query.filter_by(team=teamid).delete()
|
||||||
|
Teams.query.filter_by(id=teamid).delete()
|
||||||
|
db.session.commit()
|
||||||
|
except DatabaseError:
|
||||||
|
return '0'
|
||||||
|
else:
|
||||||
|
return '1'
|
||||||
|
|
||||||
|
|
||||||
@admin.route('/admin/graphs/<graph_type>')
|
@admin.route('/admin/graphs/<graph_type>')
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from flask.ext.sqlalchemy import SQLAlchemy
|
from flask.ext.sqlalchemy import SQLAlchemy
|
||||||
|
from sqlalchemy.exc import DatabaseError
|
||||||
|
|
||||||
from socket import inet_aton, inet_ntoa
|
from socket import inet_aton, inet_ntoa
|
||||||
from struct import unpack, pack
|
from struct import unpack, pack
|
||||||
@@ -8,12 +9,15 @@ import datetime
|
|||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
def sha512(string):
|
def sha512(string):
|
||||||
return hashlib.sha512(string).hexdigest()
|
return hashlib.sha512(string).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
def ip2long(ip):
|
def ip2long(ip):
|
||||||
return unpack('!I', inet_aton(ip))[0]
|
return unpack('!I', inet_aton(ip))[0]
|
||||||
|
|
||||||
|
|
||||||
def long2ip(ip_int):
|
def long2ip(ip_int):
|
||||||
return inet_ntoa(pack('!I', ip_int))
|
return inet_ntoa(pack('!I', ip_int))
|
||||||
|
|
||||||
@@ -32,6 +36,7 @@ class Pages(db.Model):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<Tag {0} for challenge {1}>".format(self.tag, self.chal)
|
return "<Tag {0} for challenge {1}>".format(self.tag, self.chal)
|
||||||
|
|
||||||
|
|
||||||
class Challenges(db.Model):
|
class Challenges(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
name = db.Column(db.String(80))
|
name = db.Column(db.String(80))
|
||||||
@@ -51,6 +56,7 @@ class Challenges(db.Model):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<chal %r>' % self.name
|
return '<chal %r>' % self.name
|
||||||
|
|
||||||
|
|
||||||
class Tags(db.Model):
|
class Tags(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
chal = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
chal = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
||||||
@@ -63,6 +69,7 @@ class Tags(db.Model):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<Tag {0} for challenge {1}>".format(self.tag, self.chal)
|
return "<Tag {0} for challenge {1}>".format(self.tag, self.chal)
|
||||||
|
|
||||||
|
|
||||||
class Files(db.Model):
|
class Files(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
chal = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
chal = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
||||||
@@ -75,6 +82,7 @@ class Files(db.Model):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<File {0} for challenge {1}>".format(self.location, self.chal)
|
return "<File {0} for challenge {1}>".format(self.location, self.chal)
|
||||||
|
|
||||||
|
|
||||||
class Keys(db.Model):
|
class Keys(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
chal = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
chal = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
||||||
@@ -130,6 +138,7 @@ class Teams(db.Model):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
class Solves(db.Model):
|
class Solves(db.Model):
|
||||||
__table_args__ = (db.UniqueConstraint('chalid', 'teamid'), {})
|
__table_args__ = (db.UniqueConstraint('chalid', 'teamid'), {})
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user