def post(self, key): self.constructor(key, login_arguments, metric=self.METRICS['post']) user = yield GoogleUser.load(key) user_to_logout = None pushtoken = self.args['_pushtoken'] if user is None: if pushtoken: user_to_logout = yield GoogleUser.load(pushtoken=pushtoken) elif user.connected: if user.jid != self.args['_jid']: user_to_logout = user if not user_to_logout is None: if user is None: self.log.info('WEB_HANDLER_LOGOUT %s with the same pushtoken', user_to_logout.userid) else: self.log.info('WEB_HANDLER_LOGOUT %s with other jid: %s->%s', key, user.jid, self.args['_jid']) if user_to_logout.connected: yield API(key, queue=user_to_logout.worker, synchronous_call=True).logout(user_to_logout.userid) else: yield GoogleUser.remove(user_to_logout.userid) user = None try: response_data = {'success': False, 'reason': 'Already logged'} if user is None or not user.connected: if user and not user.connected: yield GoogleUser.remove(user.userid, flush_messages=False) user = GoogleUser(_userid=key, _version=self.user_agent.version, _iosversion=self.user_agent.iosVersion, _hwmodel=self.user_agent.hwmodel, **self.args) yield API(key).login(user) response_data = {'success': True, 'reason': 'ok'} except XMPPUserAlreadyLogged: pass if self.FAKE_PURCHASE_ENABLED: self.perform_fakepurchase(userid=user.jid, deviceid=user.userid) response_data.update( dict(background_time=conf.XMPP_BACKGROUND_TIME, resource_prefix=conf.XMPP_RESOURCE, gtalk_priority=conf.XMPP_GTALK_PRIORITY, ads_gift=self.FAKE_PURCHASE_ENABLED)) self._response_json(response_data)
def logout(self, userid): try: self.log.info('LOGOUT') running_client = KatooApp().getService(userid) if running_client is None: raise XMPPUserNotLogged('User %s is not running in current worker'%(userid)) yield running_client.disconnect() except XMPPUserNotLogged: pass finally: yield GoogleUser.remove(userid)