Robyn icon indicating copy to clipboard operation
Robyn copied to clipboard

@app.before_request()

Open mn3711698 opened this issue 1 year ago • 3 comments

Passing args in flask is not mandatory, it's convenient for me to use waf. Is it possible to modify this parameter to be optional?

Shadow Daemon is a web application firewall that intercepts requests at the application level. https://github.com/zecure/shadowd_python

from flask import Flask, request
from shadowd.flask_connector import InputFlask, OutputFlask, Connector

app = Flask(__name__)

@app.before_request
def before_req():
    input = InputFlask(request)
    output = OutputFlask()
    Connector().start(input, output)


CORS 

from flask import Blueprint, request, jsonify
apivid = Blueprint("apivid", __name__)


@apivid.before_request
def options():

    if request.method == 'OPTIONS':
        res = jsonify({'status': 'ok'})
        res.headers['Access-Control-Allow-Origin'] = '*'
        res.headers['Access-Control-Allow-Credentials'] = 'true'
        res.headers['Access-Control-Allow-Methods'] = '*'
        res.headers['Access-Control-Allow-Headers'] =  'Content-Type,Authorization'
        res.headers['Access-Control-Expose-Headers'] = '*'
        return res

No need to write a before_request() for each route

mn3711698 avatar Apr 12 '23 15:04 mn3711698

@mn3711698 , I am sorry but I don't understand what you mean here. Can you please explain a bit more?

sansyrox avatar Apr 12 '23 20:04 sansyrox

flask code:

@app.before_request def before_req(): input = InputFlask(request) output = OutputFlask() Connector().start(input, output)

@apivid.before_request def options():

if request.method == 'OPTIONS':
    res = jsonify({'status': 'ok'})
    res.headers['Access-Control-Allow-Origin'] = '*'
    res.headers['Access-Control-Allow-Credentials'] = 'true'
    res.headers['Access-Control-Allow-Methods'] = '*'
    res.headers['Access-Control-Allow-Headers'] =  'Content-Type,Authorization'
    res.headers['Access-Control-Expose-Headers'] = '*'
    return res

@apivid.route('') @apivid.route('') @apivid.route('') @apivid.route('') more

before_request is global,

robyn code:

@app.before_request(' endpoint') @app.before_request(' endpoint') @app.before_request(' endpoint') @app.before_request(' endpoint') @app.before_request(' endpoint')

before_request binds endpoint, which will increase the amount of code。 It is recommended that before_request be global

@sansyrox

mn3711698 avatar Apr 13 '23 04:04 mn3711698

@mn3711698 , thank you for reporting this. It is not possible to do this yet. But I love this idea and will try to add this feature ASAP :D

sansyrox avatar Apr 14 '23 12:04 sansyrox

@mn3711698 , app.before_request() works on global level now 😄

sansyrox avatar Jul 19 '24 10:07 sansyrox