Example #1
0
File: views.py Project: kopf/ahye
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))
Example #2
0
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))