public
Description: An HTTP proxy for signing OAuth requests
Clone URL: git://github.com/mojodna/oauth-proxy.git
prevent name conflicts
mojodna (author)
Sat Apr 26 09:14:14 -0700 2008
commit  b9dd4c2af345550bf2e1a30f1332347fe25da7ae
tree    d48d06b78511e1c6a4de84b2b0c05de01d70fc21
parent  af8e6f438db8b84c67da9acf0c8f2557abfd9b7e
...
7
8
9
10
11
12
13
14
15
 
 
 
 
 
 
16
17
18
...
20
21
22
23
24
25
 
 
 
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
62
63
64
65
66
67
 
 
68
69
70
 
71
72
73
...
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
7
8
9
 
 
 
 
 
 
10
11
12
13
14
15
16
17
18
...
20
21
22
 
 
 
23
24
25
26
27
28
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
 
66
67
68
69
 
70
71
72
73
...
77
78
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
0
@@ -7,12 +7,12 @@ class Options(usage.Options):
0
   synopsis = "Usage: oauth_reverse proxy --remote-host <remote host> [--remote-port <remote port>] [--path-prefix <path prefix>] [-p <proxy port>] [--ssl] [--ssl-private-key <private key] [--ssl-certificate <certificate>]"
0
   longdesc = "Makes an OAuth reverse HTTP proxy server.."
0
   optParameters = [
0
- ['path-prefix', None, '', "Path prefix"],
0
- ['port', 'p', 8080, "Proxy port", int],
0
- ['remote-host', None, None, "Remote host"],
0
- ['remote-port', None, 80, "Remote port"],
0
- ['ssl-certificate', None, None, "SSL certificate"],
0
- ['ssl-private-key', None, None, "SSL private key"],
0
+ ['path-prefix', None, '', "Path prefix"],
0
+ ['port', 'p', 8080, "Proxy port", int],
0
+ ['remote-host', None, None, "Remote host"],
0
+ ['remote-port', None, 80, "Remote port"],
0
+ ['ssl-certificate', None, None, "SSL certificate"],
0
+ ['ssl-private-key', None, None, "SSL private key"],
0
   ]
0
 
0
   optFlags = [['ssl', 's']]
0
@@ -20,54 +20,54 @@ class Options(usage.Options):
0
 
0
 
0
 class OAuthValidator:
0
- def validate(self):
0
- """Validate an OAuth request"""
0
- return True
0
+ def validate(self):
0
+ """Validate an OAuth request"""
0
+ return True
0
 
0
 
0
 
0
 class OAuthReverseProxyRequest(proxy.ReverseProxyRequest):
0
- # TODO this class may be unnecessary if header rewriting can occur in OAuthReverseProxyResource
0
-
0
- proxyClientFactoryClass = ProxyClientFactory
0
-
0
- def __init__(self, validator, *args):
0
- self.validator = validator
0
- proxy.ReverseProxyRequest.__init__(self, *args)
0
-
0
-
0
- def process(self):
0
- # This logic either goes here or in OAuthReverseProxyResource.render
0
-
0
- # filter querystring from self.uri
0
-
0
- # filter headers from self.getAllHeaders()
0
-
0
- # validate oauth params
0
- valid = True
0
-
0
- if valid:
0
- proxy.ReverseProxyRequest.process(self)
0
- # looks like:
0
- # self.received_headers['host'] = self.factory.host
0
- # clientFactory = self.proxyClientFactoryClass(
0
- # self.method, self.uri, self.clientproto, self.getAllHeaders(),
0
- # self.content.read(), self)
0
- # self.reactor.connectTCP(self.factory.host, self.factory.port,
0
- # clientFactory)
0
- else:
0
- # return an error message
0
- pass
0
+ # TODO this class may be unnecessary if header rewriting can occur in OAuthReverseProxyResource
0
+
0
+ proxyClientFactoryClass = ProxyClientFactory
0
+
0
+ def __init__(self, validator, *args):
0
+ self.validator = validator
0
+ proxy.ReverseProxyRequest.__init__(self, *args)
0
+
0
+
0
+ def process(self):
0
+ # This logic either goes here or in OAuthReverseProxyResource.render
0
+
0
+ # filter querystring from self.uri
0
+
0
+ # filter headers from self.getAllHeaders()
0
+
0
+ # validate oauth params
0
+ valid = True
0
+
0
+ if valid:
0
+ proxy.ReverseProxyRequest.process(self)
0
+ # looks like:
0
+ # self.received_headers['host'] = self.factory.host
0
+ # clientFactory = self.proxyClientFactoryClass(
0
+ # self.method, self.uri, self.clientproto, self.getAllHeaders(),
0
+ # self.content.read(), self)
0
+ # self.reactor.connectTCP(self.factory.host, self.factory.port,
0
+ # clientFactory)
0
+ else:
0
+ # return an error message
0
+ pass
0
 
0
 
0
 
0
 class OAuthReverseProxy(proxy.ReverseProxy):
0
 
0
- # TODO this may be the only required line, if validation occurs in OAuthReverseProxyResource
0
- # requestFactory = OAuthReverseProxyRequest
0
+ # TODO this may be the only required line, if validation occurs in OAuthReverseProxyResource
0
+ # requestFactory = OAuthReverseProxyRequest
0
 
0
   def __init__(self, validator):
0
- self.validator = validator
0
+ self.validator = validator
0
     proxy.ReverseProxy.__init__(self)
0
 
0
 
0
@@ -77,35 +77,35 @@ class OAuthReverseProxy(proxy.ReverseProxy):
0
 
0
 
0
 class OAuthReverseProxyResource(proxy.ReverseProxyResource):
0
- def __init__(self, host, port, path, reactor=reactor, validator=OAuthValidator):
0
- self.validator = validator
0
- proxy.ReverseProxyResource(self, host, port, path, reactor)
0
-
0
-
0
- def getChild(self, path, request):
0
- return OAuthReverseProxyResource(
0
- self.host, self.port, self.path + '/' + urlquote(path, safe="", validator=self.validator))
0
-
0
-
0
- def render(self, request):
0
- # get OAuth headers from request.received_headers['authorization']
0
-
0
- # remove OAuth headers
0
-
0
- # parse querystring and POST body for OAuth params
0
- qs = urlparse.urlparse(request.uri)[4]
0
-
0
- # rewrite the path w/o OAuth params
0
-
0
- # validate signature
0
-
0
- valid = self.validator.validate()
0
-
0
- if valid:
0
- response = proxy.ReverseProxyResource.render(self, request)
0
- else:
0
- # render an error message
0
- # TODO return NOT_DONE_YET in order to write headers
0
- response = "Invalid signature"
0
-
0
- return response
0
+ def __init__(self, host, port, path, reactor=reactor, validator=OAuthValidator):
0
+ self.validator = validator
0
+ proxy.ReverseProxyResource(self, host, port, path, reactor)
0
+
0
+
0
+ def getChild(self, path, request):
0
+ return OAuthReverseProxyResource(
0
+ self.host, self.port, self.path + '/' + urlquote(path, safe="", validator=self.validator))
0
+
0
+
0
+ def render(self, request):
0
+ # get OAuth headers from request.received_headers['authorization']
0
+
0
+ # remove OAuth headers
0
+
0
+ # parse querystring and POST body for OAuth params
0
+ qs = urlparse.urlparse(request.uri)[4]
0
+
0
+ # rewrite the path w/o OAuth params
0
+
0
+ # validate signature
0
+
0
+ valid = self.validator.validate()
0
+
0
+ if valid:
0
+ response = proxy.ReverseProxyResource.render(self, request)
0
+ else:
0
+ # render an error message
0
+ # TODO return NOT_DONE_YET in order to write headers
0
+ response = "Invalid signature"
0
+
0
+ return response

Comments

    No one has commented yet.