diff --git a/README.md b/README.md index 2c08841..2fba482 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ #EasyCTF 2016 The EasyCTF website for the 2016 competition. -**Back End** : Flask (Python) +**Resources** : Flask, MySQL + Main Pages: - login.html @@ -20,8 +21,6 @@ Main Pages: - updates.html - resetpassword.html -**Front End** : Angular.js (JavaScript) - Color Scheme: #69D2E7 | #A7DBDB | #E0E4CC | #F38630 | #FA6900 Setting Up The Environment diff --git a/server/api/api.py b/server/api/api.py new file mode 100644 index 0000000..7626508 --- /dev/null +++ b/server/api/api.py @@ -0,0 +1,11 @@ +from flask import Blueprint + +api = Blueprint("api", __name__) + +@api.route("/api/register", methods=["POST"]) +def register(): + pass + +@api.route("/api/login", methods=["POST"]) +def login(): + pass diff --git a/server/api/decorators.py b/server/api/decorators.py new file mode 100644 index 0000000..9164a8f --- /dev/null +++ b/server/api/decorators.py @@ -0,0 +1,21 @@ +from functools import wraps +from flask import session + +def login_required(f): + @wraps(f) + def decorated_function(*args, **kwargs): + return f(*args, **kwargs) + return decorated_function + +def admins_only(f): + @wraps(f) + def decorated_function(*args, **kwargs): + return f(*args, **kwargs) + return decorated_function + +def check_csrf(f): + @wraps(f) + @login_required + def wrapper(*args, **kwds): + return f(*args, **kwds) + return wrapper diff --git a/server/api/utils.py b/server/api/utils.py new file mode 100644 index 0000000..28127e5 --- /dev/null +++ b/server/api/utils.py @@ -0,0 +1,33 @@ +import datetime +import MySQLdb +import random +import string + +from werkzeug.security import generate_password_hash, check_password_hash + +host = "localhost" +user = "root" + +conn = MySQLdb.connect() + +def get_connection(): + global conn + if not conn: + conn = MySQLdb.connect(host=host, user=user) + return conn + +def hash_password(s): + return generate_password_hash(s) + +def check_password(hashed_password, try_password): + return check_password_hash(hashed_password, try_password) + +def generate_string(length): + return "".join([random.choice(string.letters + string.digits) for x in range(length)]) + +def unix_time_millis(dt): + epoch = datetime.datetime.utcfromtimestamp(0) + return (dt - epoch).total_seconds() * 1000.0 + +def get_time_since_epoch(): + return unix_time_millis(datetime.datetime.now()) diff --git a/server/app.py b/server/app.py index 1e2caa5..7ddd374 100644 --- a/server/app.py +++ b/server/app.py @@ -5,6 +5,9 @@ import config import json import sys +from api.api import api +from flask import Flask + app = Flask(__name__) app.secret_key = config.SECRET