import os from flask import * from flask_limiter import Limiter from flask_limiter.util import get_remote_address from routes.helpers import checkSignature from routes import * app = Flask(__name__) app.config['JSON_AS_ASCII'] = False limiter = Limiter(app=app, key_func=get_remote_address, default_limits=["5/minute"], storage_uri="memory://",) #limiter @limiter.request_filter def ip_whitelist(): try: if request.method == 'POST': signature = request.form['signature'] else: signature = request.args['signature'] return checkSignature(request, signature) except: return False #error pages @app.errorhandler(429) def ratelimit_handler(e): return render_template('ratelimit.html') @app.errorhandler(403) def forbidden_handler(e): return render_template('forbidden.html') @app.errorhandler(404) def ratelimit_handler(e): return render_template('notfound.html') #empty routes @app.route('/yt/api/v1', methods=['GET', 'POST']) @app.route('/recognize/api/v1', methods=['GET', 'POST']) @app.route('/osu/api/v1', methods=['GET', 'POST']) def emptyPath(): return {} @app.route('/yt/api/v1/', methods=['GET', 'POST']) @app.route('/recognize/api/v1/', methods=['GET', 'POST']) @app.route('/osu/api/v1/', methods=['GET', 'POST']) def emptyApiWA(path): return {"status": "error", "error_code": 100, "error_details": "No method like that found"} #icon @app.route('/favicon.ico') @limiter.exempt def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon') ############### #SITE ROUTES @app.route('/') @limiter.exempt def index(): return render_template('index.html') @app.route('/signatures/api/v1/get', methods=['GET', 'POST']) @limiter.exempt def signatureGen(): return siteRoutes.signatureGen(request) @app.route('/system-info/api/v1/get', methods=['GET', 'POST']) @limiter.exempt def systemInfo(): return siteRoutes.systemInfo(request) ############### #RECOGNIZE API @app.route('/recognize/api/v1/voice', methods=['GET', 'POST']) def recognizeVoice(): return witaiApi.recognizeVoice(request) ############### #YT SOUND API @app.route('/yt/api/v1/search', methods=['GET', 'POST']) def search(): return ytApi.search(request) @app.route('/yt/api/v1/get-full', methods=['GET', 'POST']) def getFull(): return ytApi.getFull(request) @app.route('/yt/api/v1/get-preview', methods=['GET', 'POST']) def getPreview(): return ytApi.getPreview(request) ############### #OSU API @app.route('/osu/api/v1/find-song', methods=['GET', 'POST']) def findSong(): return osuApi.findSong(request) @app.route('/osu/api/v1/get-beatmap', methods=['GET', 'POST']) def getBeatmap(): return osuApi.getBeatmap(request) @app.route('/osu/api/v1/get-preview', methods=['GET', 'POST']) def getBMPreview(): return osuApi.getPreview(request) @app.route('/osu/api/v1/get-full', methods=['GET', 'POST']) def getBMFull(): return osuApi.getFull(request) if __name__ == "__main__": app.run(host="0.0.0.0", port=7860, debug=True)