aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/federation/oauth.py
diff options
context:
space:
mode:
authorxray7224 <jessica@megworld.co.uk>2013-07-11 19:43:00 +0100
committerxray7224 <jessica@megworld.co.uk>2013-07-11 19:43:00 +0100
commit786bbd79e8d77c06a9d86aee00edc4dd3e89d651 (patch)
tree50def81289e6449f9a28a609132b06b6e1bb157a /mediagoblin/federation/oauth.py
parent2b60a56cbec44f789ee2efe71294979d7784515c (diff)
downloadmediagoblin-786bbd79e8d77c06a9d86aee00edc4dd3e89d651.tar.lz
mediagoblin-786bbd79e8d77c06a9d86aee00edc4dd3e89d651.tar.xz
mediagoblin-786bbd79e8d77c06a9d86aee00edc4dd3e89d651.zip
Cleans up some of the OAuth code
Diffstat (limited to 'mediagoblin/federation/oauth.py')
-rw-r--r--mediagoblin/federation/oauth.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/mediagoblin/federation/oauth.py b/mediagoblin/federation/oauth.py
new file mode 100644
index 00000000..c94b0a9d
--- /dev/null
+++ b/mediagoblin/federation/oauth.py
@@ -0,0 +1,80 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from oauthlib.common import Request
+from oauthlib.oauth1 import (AuthorizationEndpoint, RequestValidator,
+ RequestTokenEndpoint, AccessTokenEndpoint)
+
+from mediagoblin.db.models import Client, RequestToken, AccessToken
+
+
+
+class GMGRequestValidator(RequestValidator):
+
+ def __init__(self, data=None):
+ self.POST = data
+
+ def save_request_token(self, token, request):
+ """ Saves request token in db """
+ client_id = self.POST[u"oauth_consumer_key"]
+
+ request_token = RequestToken(
+ token=token["oauth_token"],
+ secret=token["oauth_token_secret"],
+ )
+ request_token.client = client_id
+ request_token.callback = token.get("oauth_callback", None)
+ request_token.save()
+
+ def save_verifier(self, token, verifier, request):
+ """ Saves the oauth request verifier """
+ request_token = RequestToken.query.filter_by(token=token).first()
+ request_token.verifier = verifier["oauth_verifier"]
+ request_token.save()
+
+ def save_access_token(self, token, request):
+ """ Saves access token in db """
+ access_token = AccessToken(
+ token=token["oauth_token"],
+ secret=token["oauth_token_secret"],
+ )
+ access_token.request_token = request.oauth_token
+ request_token = RequestToken.query.filter_by(token=request.oauth_token).first()
+ access_token.user = request_token.user
+ access_token.save()
+
+ def get_realms(*args, **kwargs):
+ """ Currently a stub - called when making AccessTokens """
+ return list()
+
+class GMGRequest(Request):
+ """
+ Fills in data to produce a oauth.common.Request object from a
+ werkzeug Request object
+ """
+
+ def __init__(self, request, *args, **kwargs):
+ """
+ :param request: werkzeug request object
+
+ any extra params are passed to oauthlib.common.Request object
+ """
+ kwargs["uri"] = kwargs.get("uri", request.url)
+ kwargs["http_method"] = kwargs.get("http_method", request.method)
+ kwargs["body"] = kwargs.get("body", request.get_data())
+ kwargs["headers"] = kwargs.get("headers", dict(request.headers))
+
+ super(GMGRequest, self).__init__(*args, **kwargs)