Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
synnefo
Commits
d8b8aebd
Commit
d8b8aebd
authored
May 15, 2013
by
Sofia Papagiannaki
Browse files
snf-django-lib: provide proxy functionality
parent
33fbf102
Changes
2
Hide whitespace changes
Inline
Side-by-side
snf-django-lib/snf_django/lib/api/proxy/__init__.py
0 → 100644
View file @
d8b8aebd
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
#
# Redistribution and use in source and binary forms, with or
# without modification, are permitted provided that the following
# conditions are met:
#
# 1. Redistributions of source code must retain the above
# copyright notice, this list of conditions and the following
# disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# The views and conclusions contained in the software and
# documentation are those of the authors and should not be
# interpreted as representing official policies, either expressed
# or implied, of GRNET S.A.
from
django.http
import
HttpResponse
from
synnefo.lib.pool.http
import
PooledHTTPConnection
from
.utils
import
fix_header
,
forward_header
import
urllib
import
urlparse
def
proxy
(
request
,
target
):
kwargs
=
{}
# prepare headers
headers
=
dict
(
map
(
lambda
(
k
,
v
):
fix_header
(
k
,
v
),
filter
(
lambda
(
k
,
v
):
forward_header
(
k
),
request
.
META
.
iteritems
())))
kwargs
[
'headers'
]
=
headers
kwargs
[
'body'
]
=
request
.
raw_post_data
p
=
urlparse
.
urlparse
(
target
)
with
PooledHTTPConnection
(
p
.
netloc
,
p
.
scheme
)
as
conn
:
conn
.
request
(
request
.
method
,
'?'
.
join
([
request
.
path
,
urllib
.
urlencode
(
request
.
GET
)]),
**
kwargs
)
response
=
conn
.
getresponse
()
# turn httplib.HttpResponse to django.http.Response
length
=
response
.
getheader
(
'content-length'
,
None
)
data
=
response
.
read
(
length
)
status
=
int
(
response
.
status
)
return
HttpResponse
(
data
,
status
=
status
)
snf-django-lib/snf_django/lib/api/proxy/utils.py
0 → 100644
View file @
d8b8aebd
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
#
# Redistribution and use in source and binary forms, with or
# without modification, are permitted provided that the following
# conditions are met:
#
# 1. Redistributions of source code must retain the above
# copyright notice, this list of conditions and the following
# disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# The views and conclusions contained in the software and
# documentation are those of the authors and should not be
# interpreted as representing official policies, either expressed
# or implied, of GRNET S.A.
from
django.core.servers.basehttp
import
is_hop_by_hop
def
fix_header
(
k
,
v
):
prefix
=
'HTTP_'
if
k
.
startswith
(
prefix
):
k
=
k
[
len
(
prefix
):].
title
().
replace
(
'_'
,
'-'
)
elif
k
in
(
'CONTENT_TYPE'
,
'CONTENT_LENGTH'
):
k
=
k
.
replace
(
'_'
,
'-'
)
return
k
,
v
def
forward_header
(
k
):
return
k
.
lower
()
!=
"HOST"
and
not
is_hop_by_hop
(
k
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment