def GET(self, jrequest, jresponse): assert isinstance(jrequest, JsonRpcRequest) assert isinstance(jresponse, JsonRpcResponse) jresponse.setId() jresponse.setRedirectTarget("/api/Twitter") debug(jrequest.request) implicit_flow = ImplicitFlow() implicit_flow.setAccessToken(jrequest.request) implicit_flow.saveToSession() try: twitter_user = TwitterUser.loadFromSession(self) if twitter_user.twitterId != implicit_flow.twitterId: raise MixedAuthentication({"twitter_user.twitterId": twitter_user.twitterId, "implicit_flow.twitterId": implicit_flow.twitterId}) except EntityNotFound: try: twitter_user = TwitterUser.getByTwitterId(implicit_flow.twitterId) except EntityNotFound: twitter_user = TwitterUser() twitter_user.twitterId = implicit_flow.twitterId assert isinstance(twitter_user, TwitterUser) assert twitter_user.twitterId == implicit_flow.twitterId twitter_user.screenName = implicit_flow.screenName twitter_user.accessToken = implicit_flow.accessToken if twitter_user.odenkiId is None: try: odenki_user = OdenkiUser.loadFromSession() assert isinstance(odenki_user, OdenkiUser) twitter_user.odenkiId = odenki_user.odenkiId except EntityNotFound: odenki_user = OdenkiUser.getNew() assert isinstance(odenki_user, OdenkiUser) twitter_user.odenkiId = odenki_user.odenkiId else: try: odenki_user = OdenkiUser.loadFromSession() if twitter_user.odenkiId != odenki_user.odenkiId: raise MixedAuthentication({"twitter_user.odenkiId": twitter_user.odenkiId, "odenki_user.odenkiId": odenki_user.odenkiId}) except EntityNotFound: odenki_user = OdenkiUser.getByOdenkiId(twitter_user.odenkiId) odenki_user.saveToSession() assert twitter_user.odenkiId == odenki_user.odenkiId twitter_user.put() twitter_user.saveToSession()
def GET(self, jrequest, jresponse): assert isinstance(jrequest, JsonRpcRequest) assert isinstance(jresponse, JsonRpcResponse) jresponse.setId() jresponse.setRedirectTarget("/html/auth/error.html") try: oauth_token = jrequest.getValue("oauth_token")[0] oauth_verifier = jrequest.getValue("oauth_verifier")[0] except: raise OAuthError("OAuthCallback was called with neither oauth_token nor oauth_verifier.") session = gaesessions.get_current_session() try: request_token = session[REQUEST_TOKEN_SESSION_KEY] request_token_secret = session[REQUEST_TOKEN_SECRET_SESSION_KEY] except KeyError: raise OAuthError("Request token have not been obtained.") if oauth_token != request_token: raise OAuthError("OAuthCallback gets token which is not identical to retaining request token.") token = oauth2.Token(request_token, request_token_secret) token.set_verifier(oauth_verifier) consumer = oauth2.Consumer(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET) client = oauth2.Client(consumer, token) resp, content = client.request(ACCESS_TOKEN_URL, "POST") access_token_dict = dict(parse_qsl(content)) try: access_token = access_token_dict["oauth_token"] access_token_secret = access_token_dict["oauth_token_secret"] user_id = access_token_dict["user_id"] screen_name = access_token_dict["screen_name"] except KeyError: raise OAuthError({"request_token": request_token, "ACCESS_TOKEN_URL": ACCESS_TOKEN_URL }, message="OAuthCallback failed to exchange verified request token to access token.") # prepare TwittrUser try: twitter_user = TwitterUser.getByTwitterId(int(user_id)) twitter_user.setAccessToken(access_token, access_token_secret) twitter_user.screenName = unicode(screen_name) twitter_user.verifyCredentials11() twitter_user.put_async() except EntityNotFound: twitter_user = TwitterUser.create(int(user_id)) twitter_user.setAccessToken(access_token, access_token_secret) twitter_user.screenName = unicode(screen_name) twitter_user.verifyCredentials11() twitter_user.put() assert isinstance(twitter_user, TwitterUser) # prepare OdenkiUser try: odenki_user = OdenkiUser.loadFromSession() except EntityNotFound: odenki_user = None # reconcile TwitterUser and OdenkiUser if odenki_user is None: if twitter_user.odenkiId is None: odenki_user = OdenkiUser.createNew() assert isinstance(odenki_user, OdenkiUser) odenki_user.saveToSession() twitter_user.setOdenkiId(odenki_user.odenkiId) twitter_user.put_async() else: odenki_user = OdenkiUser.getByOdenkiId(twitter_user.odenkiId) odenki_user.saveToSession() else: if twitter_user.odenkiId is None: odenki_user.saveToSession() twitter_user.setOdenkiId(odenki_user.odenkiId) twitter_user.put_async() else: if twitter_user.odenkiId != odenki_user.odenkiId: raise InconsistentAuthentiation({twitter_user.__class__.__name__: twitter_user, odenki_user.__class__.__name__:odenki_user}) odenki_user.saveToSession() jresponse.setResultValue("OdenkiUser", odenki_user) jresponse.setResultValue("TwitterUser", twitter_user) jresponse.setRedirectTarget("/html/settings.html")
def GET(self, jrequest, jresponse): assert isinstance(jrequest, JsonRpcRequest) assert isinstance(jresponse, JsonRpcResponse) jresponse.setId() jresponse.setRedirectTarget("/html/auth/error.html") try: oauth_token = jrequest.getValue("oauth_token")[0] oauth_verifier = jrequest.getValue("oauth_verifier")[0] except: raise OAuthError( "OAuthCallback was called with neither oauth_token nor oauth_verifier." ) session = gaesessions.get_current_session() try: request_token = session[REQUEST_TOKEN_SESSION_KEY] request_token_secret = session[REQUEST_TOKEN_SECRET_SESSION_KEY] except KeyError: raise OAuthError("Request token have not been obtained.") if oauth_token != request_token: raise OAuthError( "OAuthCallback gets token which is not identical to retaining request token." ) token = oauth2.Token(request_token, request_token_secret) token.set_verifier(oauth_verifier) consumer = oauth2.Consumer(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET) client = oauth2.Client(consumer, token) resp, content = client.request(ACCESS_TOKEN_URL, "POST") access_token_dict = dict(parse_qsl(content)) try: access_token = access_token_dict["oauth_token"] access_token_secret = access_token_dict["oauth_token_secret"] user_id = access_token_dict["user_id"] screen_name = access_token_dict["screen_name"] except KeyError: raise OAuthError( { "request_token": request_token, "ACCESS_TOKEN_URL": ACCESS_TOKEN_URL }, message= "OAuthCallback failed to exchange verified request token to access token." ) # prepare TwittrUser try: twitter_user = TwitterUser.getByTwitterId(int(user_id)) twitter_user.setAccessToken(access_token, access_token_secret) twitter_user.screenName = unicode(screen_name) twitter_user.verifyCredentials11() twitter_user.put_async() except EntityNotFound: twitter_user = TwitterUser.create(int(user_id)) twitter_user.setAccessToken(access_token, access_token_secret) twitter_user.screenName = unicode(screen_name) twitter_user.verifyCredentials11() twitter_user.put() assert isinstance(twitter_user, TwitterUser) # prepare OdenkiUser try: odenki_user = OdenkiUser.loadFromSession() except EntityNotFound: odenki_user = None # reconcile TwitterUser and OdenkiUser if odenki_user is None: if twitter_user.odenkiId is None: odenki_user = OdenkiUser.createNew() assert isinstance(odenki_user, OdenkiUser) odenki_user.saveToSession() twitter_user.setOdenkiId(odenki_user.odenkiId) twitter_user.put_async() else: odenki_user = OdenkiUser.getByOdenkiId(twitter_user.odenkiId) odenki_user.saveToSession() else: if twitter_user.odenkiId is None: odenki_user.saveToSession() twitter_user.setOdenkiId(odenki_user.odenkiId) twitter_user.put_async() else: if twitter_user.odenkiId != odenki_user.odenkiId: raise InconsistentAuthentiation({ twitter_user.__class__.__name__: twitter_user, odenki_user.__class__.__name__: odenki_user }) odenki_user.saveToSession() jresponse.setResultValue("OdenkiUser", odenki_user) jresponse.setResultValue("TwitterUser", twitter_user) jresponse.setRedirectTarget("/html/settings.html")