#!/usr/bin/env python3 from subprocess import run from flask import Flask, request, Response, redirect from flask_limiter import Limiter from flask_limiter.util import get_remote_address app = Flask(__name__) limiter = Limiter( get_remote_address, app=app, default_limits=["5000 per hour"], storage_uri="memory://", ) @app.route('/', methods=["GET"]) @limiter.limit("5/second") def index(): if "source" in request.args: return Response(open(__file__).read(), mimetype='text/plain') if "dockerfile" in request.args: return Response(open('Dockerfile').read(), mimetype='text/plain') return open("index.html").read() @app.route('/java', methods=["POST"]) @limiter.limit("1/second") def java(): java_class = request.form['class'] proc = run(['java', '-jar', 'challenge.jar', java_class], capture_output=True, timeout=1) return {'stdout': proc.stdout.decode(), 'stderr': proc.stderr.decode()} if __name__ == "__main__": app.run('0.0.0.0', 5000)