def crossload(url): if not url.startswith('http:/') and not url.startswith('https:/'): abort(404) # reconstruct url (query string has been stripped from url by flask) if request.query_string: url = '%s?%s' % (url, request.query_string) # rewrite url as apache's mod_rewrite converts // to / if url.startswith('http:/') and not url.startswith('http://'): url = url.replace('http:/', 'http://') elif url.startswith('https:/') and not url.startswith('https://'): url = url.replace('https:/', 'https://') filename = '%s%s' % (hashlib.md5(url.encode('utf-8')).hexdigest(), guess_file_extension(url)) parsed_url = urlparse.urlparse(url) auth = (parsed_url.username, parsed_url.password) if not os.path.exists(os.path.join(LOCAL_UPLOADS_DIR, filename)): try: conn = requests.get(url, auth=auth, verify=False) except requests.exceptions.ConnectionError: return render('/error.html', error={'msgs': ['Connection to server failed.', 'Is it a valid domain?']}) except (requests.exceptions.InvalidSchema, requests.exceptions.MissingSchema, requests.exceptions.InvalidURL): return render('/error.html', error={'msgs': ['Invalid URL.', 'Please check and try again.']}) except requests.exceptions.Timeout: return render('/error.html', error={'msgs': ['Connection to server timed out.']}) except Exception: return render('/error.html') if 200 <= conn.status_code <= 300: with open(os.path.join(LOCAL_UPLOADS_DIR, filename), 'w') as f: f.write(conn.content) else: return render('/error.html', error={'code': conn.status_code}) return redirect(url_for('serve_upload', filename=filename, _external=True))
def crossload(url): # reconstruct url (query string has been stripped from url by flask) if request.query_string: url = '%s?%s' % (url, request.query_string) # rewrite url as apache's mod_rewrite converts // to / if url.startswith('http:/') and not url.startswith('http://'): url = url.replace('http:/', 'http://') elif url.startswith('https:/') and not url.startswith('https://'): url = url.replace('https:/', 'https://') filename = '%s%s' % (uuid.uuid3(uuid.NAMESPACE_DNS, str(url)), guess_file_extension(url)) if not os.path.exists(os.path.join(LOCAL_UPLOADS_DIR, filename)): conn = requests.get(url) if 200 <= conn.status_code <= 300: with open(os.path.join(LOCAL_UPLOADS_DIR, filename), 'w') as f: f.write(conn.content) else: abort(conn.status_code) return redirect(url_for('serve_upload', filename=filename, _external=True))