class OAuthProvider(Provider): name = "" always_callback = False config = {} def __init__(self, app): self.app = app self.remote = OAuthRemoteApp(self, self.name, **self.config) self.key = '%s_oauthtok' % self.name def register(self, doc): callback = None if request.args.get('next') or self.always_callback: callback = url_for('verify', hashkey=doc["_id"], _external=True, next=request.args.get('next') or "/v1/verified") resp = self.remote.authorize(callback=callback) if self.key in session: doc[self.key] = session.pop(self.key) return {"goto": resp.headers['Location']} def verify(self, doc): if self.key in doc: session[self.key] = doc.pop(self.key) if 'oauth_verifier' in request.args: try: data = self.remote.handle_oauth1_response() except OAuthException as e: if self.app.debug: raise return json_exception(e) elif 'code' in request.args: try: data = self.remote.handle_oauth2_response() except OAuthException as e: if self.app.debug: raise return json_exception(e) else: return json_error(400, "missing_code", "You need to provide either oauth_verifier or code") print data def getter(): return data self.remote.tokengetter(getter) try: if not self.confirm(doc, data): return json_error(400, "wrong_user", "The user doesn't match. Sorry") except Exception, e: if self.app.debug: raise return json_exception(e, 500) doc["status"] = "confirmed"