mirror of https://github.com/JohnHammond/CTFd.git
Various small fixes (#126)
1. Fix the deprecation warnings by changing from flask.ext.$name to flask_$name 2. Be consistent with import style in admin.py 3. Fix a residual script_root fix 4. Store IPs in 32 bits againselenium-screenshot-testing
parent
6b2257236f
commit
e31b502729
|
@ -1,7 +1,7 @@
|
|||
from flask import Flask, render_template, request, redirect, abort, session, jsonify, json as json_mod, url_for
|
||||
from flask.ext.sqlalchemy import SQLAlchemy
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from flask.ext.session import Session
|
||||
from flask_session import Session
|
||||
from sqlalchemy_utils import database_exists, create_database
|
||||
import os
|
||||
import sqlalchemy
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
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, create_image, delete_image, run_image, container_status, container_ports, container_stop, container_start
|
||||
from CTFd.models import db, Teams, Solves, Awards, Containers, Challenges, WrongKeys, Keys, Tags, Files, Tracking, Pages, Config, DatabaseError
|
||||
from CTFd.scoreboard import get_standings
|
||||
from itsdangerous import TimedSerializer, BadTimeSignature
|
||||
from sqlalchemy.sql import and_, or_, not_
|
||||
from sqlalchemy.sql.expression import union_all
|
||||
|
@ -19,8 +20,6 @@ import json
|
|||
import datetime
|
||||
import calendar
|
||||
|
||||
from scoreboard import get_standings
|
||||
|
||||
admin = Blueprint('admin', __name__)
|
||||
|
||||
|
||||
|
@ -445,9 +444,11 @@ def admin_team(teamid):
|
|||
solves = Solves.query.filter_by(teamid=teamid).all()
|
||||
solve_ids = [s.chalid for s in solves]
|
||||
missing = Challenges.query.filter( not_(Challenges.id.in_(solve_ids) ) ).all()
|
||||
addrs = db.session.query(Tracking.ip, db.func.max(Tracking.date)) \
|
||||
last_seen = db.func.max(Tracking.date).label('last_seen')
|
||||
addrs = db.session.query(Tracking.ip, last_seen) \
|
||||
.filter_by(team=teamid) \
|
||||
.group_by(Tracking.ip).all()
|
||||
.group_by(Tracking.ip) \
|
||||
.order_by(last_seen.desc()).all()
|
||||
wrong_keys = WrongKeys.query.filter_by(teamid=teamid).order_by(WrongKeys.date.asc()).all()
|
||||
awards = Awards.query.filter_by(teamid=teamid).order_by(Awards.date.asc()).all()
|
||||
score = user.score()
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
from flask.ext.sqlalchemy import SQLAlchemy
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from sqlalchemy.exc import DatabaseError
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from socket import inet_aton, inet_ntoa
|
||||
from struct import unpack, pack
|
||||
from struct import unpack, pack, error as struct_error
|
||||
from passlib.hash import bcrypt_sha256
|
||||
|
||||
import datetime
|
||||
|
@ -16,11 +16,15 @@ def sha512(string):
|
|||
|
||||
|
||||
def ip2long(ip):
|
||||
return unpack('!I', inet_aton(ip))[0]
|
||||
return unpack('!i', inet_aton(ip))[0]
|
||||
|
||||
|
||||
def long2ip(ip_int):
|
||||
return inet_ntoa(pack('!I', ip_int))
|
||||
try:
|
||||
return inet_ntoa(pack('!i', ip_int))
|
||||
except struct_error:
|
||||
# Backwards compatibility with old CTFd databases
|
||||
return inet_ntoa(pack('!I', ip_int))
|
||||
|
||||
db = SQLAlchemy()
|
||||
|
||||
|
@ -180,7 +184,7 @@ class Solves(db.Model):
|
|||
id = db.Column(db.Integer, primary_key=True)
|
||||
chalid = db.Column(db.Integer, db.ForeignKey('challenges.id'))
|
||||
teamid = db.Column(db.Integer, db.ForeignKey('teams.id'))
|
||||
ip = db.Column(db.BigInteger)
|
||||
ip = db.Column(db.Integer)
|
||||
flag = db.Column(db.Text)
|
||||
date = db.Column(db.DateTime, default=datetime.datetime.utcnow)
|
||||
team = db.relationship('Teams', foreign_keys="Solves.teamid", lazy='joined')
|
||||
|
|
|
@ -92,7 +92,7 @@ function load_confirm_modal(route){
|
|||
function save_css(){
|
||||
var css = editor.getValue();
|
||||
var nonce = $('#nonce').val();
|
||||
$.post('/admin/css', {'css':css, 'nonce':nonce}, function(){
|
||||
$.post(script_root + '/admin/css', {'css':css, 'nonce':nonce}, function(){
|
||||
console.log('saved');
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue