You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
725 B
Python
26 lines
725 B
Python
8 years ago
|
# http://flask.pocoo.org/snippets/62/
|
||
|
|
||
|
from urlparse import urlparse, urljoin
|
||
|
from flask import request, url_for, redirect
|
||
|
|
||
|
|
||
|
def is_safe_url(target):
|
||
|
ref_url = urlparse(request.host_url)
|
||
|
test_url = urlparse(urljoin(request.host_url, target))
|
||
|
return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc
|
||
|
|
||
|
|
||
|
def get_redirect_target():
|
||
|
for target in request.values.get('next'), request.referrer:
|
||
|
if not target:
|
||
|
continue
|
||
|
if is_safe_url(target):
|
||
|
return target
|
||
|
|
||
|
|
||
|
def redirect_back(endpoint, **values):
|
||
|
target = request.form['next']
|
||
|
if not target or not is_safe_url(target):
|
||
|
target = url_for(endpoint, **values)
|
||
|
return redirect(target)
|