def bind(self, verifier): s = Session.get_by_key_name(self._jid) if s: token = oauth.OAuthToken.from_string(s.data) consumer = oauth.OAuthConsumer(config.OAUTH_CONSUMER_KEY, config.OAUTH_CONSUMER_SECRET) oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, token=token, verifier=verifier, http_url=config.ACCESS_TOKEN_URL) signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1() oauth_request.sign_request(signature_method_hmac_sha1, consumer, token) try: result = urlfetch.fetch(oauth_request.to_url(), method=oauth_request.http_method) except urlfetch.Error: return 'Network Error!' try: token = oauth.OAuthToken.from_string(result.content) except BaseException: return 'Wrong verifier!' u = User.get_by_key_name(self._jid) if u: u.access_key = token.key u.access_secret = token.secret u.put() else: User(key_name=self._jid, access_key=token.key, access_secret=token.secret).put() s.data = None s.put() return 'Successfully bind your account.'
def post(self): jid = self.request.get('from').split('/')[0] u = User.get_by_key_name(jid) if u and u.enabled: try: Session(key_name=jid).put() except db.BadKeyError: pass
def pause(self): u = User.get_by_key_name(self._jid) if u: u.enabled = False u.put() s = Session.get_by_key_name(self._jid) if s: s.delete() return 'Gmail notification is paused.'
def remove(self): u = User.get_by_key_name(self._jid) if u: u.access_key = None u.access_secret = None u.enabled = False u.put() s = Session.get_by_key_name(self._jid) if s: s.delete() return 'Successfully remove your account.'
def get(self): def handle_result(rpc): try: result = rpc.get_result() except urlfetch.Error: return else: jid = self.jids[id(rpc)] emails_map = parse(result.content) emails = list() for email in emails_map: if not Mail.get_by_key_name(email['id']): if Mail(key_name=email['id']).put(): str = 'From: %(author)s\nTitle: %(title)s\nSummary: %(summary)s\nTime: %(time)s\n%(url)s' % email emails.insert(0, str) if emails: while CapabilitySet('xmpp').is_enabled(): try: xmpp.send_message(jid, '\n\n'.join(emails)) except xmpp.Error: pass else: break def create_callback(rpc): return lambda: handle_result(rpc) if not db.WRITE_CAPABILITY: return rpcs = [] self.jids = {} for u in Session.all().filter('data =', None): jid = u.key().name() u = User.get_by_key_name(jid) token = oauth.OAuthToken(u.access_key, u.access_secret) consumer = oauth.OAuthConsumer(config.OAUTH_CONSUMER_KEY, config.OAUTH_CONSUMER_SECRET) oauth_request = oauth.OAuthRequest.from_consumer_and_token( consumer, token=token, http_url=config.RESOURCE_URL) signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1() oauth_request.sign_request(signature_method_hmac_sha1, consumer, token) rpc = urlfetch.create_rpc() rpc.callback = create_callback(rpc) urlfetch.make_fetch_call(rpc, oauth_request.http_url, headers=oauth_request.to_header()) rpcs.append(rpc) self.jids[id(rpc)] = jid for rpc in rpcs: rpc.wait()
def post(self): jid = self.request.get('from').split('/')[0] s = Session.get_by_key_name(jid) if s: u = User.get_by_key_name(jid) if u: try: presence = xmpp.get_presence(jid) except xmpp.Error: presence = False if not presence: s.delete() else: s.delete()
def resume(self): u = User.get_by_key_name(self._jid) if u: u.enabled = True u.put() try: presence = xmpp.get_presence(self._jid) except xmpp.Error: presence = False if presence: try: Session(key_name=self._jid).put() except db.BadKeyError: pass return 'Gmail notification is resumed.'
def get(self): def handle_result(rpc): try: result = rpc.get_result() except urlfetch.Error: return else: jid = self.jids[id(rpc)] emails_map = parse(result.content) emails = list() for email in emails_map: if not Mail.get_by_key_name(email['id']): if Mail(key_name=email['id']).put(): str = 'From: %(author)s\nTitle: %(title)s\nSummary: %(summary)s\nTime: %(time)s\n%(url)s' % email emails.insert(0, str) if emails: while CapabilitySet('xmpp').is_enabled(): try: xmpp.send_message(jid, '\n\n'.join(emails)) except xmpp.Error: pass else: break def create_callback(rpc): return lambda: handle_result(rpc) if not db.WRITE_CAPABILITY: return rpcs = [] self.jids = {} for u in Session.all().filter('data =', None): jid = u.key().name() u = User.get_by_key_name(jid) token = oauth.OAuthToken(u.access_key, u.access_secret) consumer = oauth.OAuthConsumer(config.OAUTH_CONSUMER_KEY, config.OAUTH_CONSUMER_SECRET) oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, token=token, http_url=config.RESOURCE_URL) signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1() oauth_request.sign_request(signature_method_hmac_sha1, consumer, token) rpc = urlfetch.create_rpc() rpc.callback = create_callback(rpc) urlfetch.make_fetch_call(rpc, oauth_request.http_url, headers=oauth_request.to_header()) rpcs.append(rpc) self.jids[id(rpc)] = jid for rpc in rpcs: rpc.wait()
def check(self): u = User.get_by_key_name(self._jid) if not u: return 'Please bind your account first.' token = oauth.OAuthToken(u.access_key, u.access_secret) consumer = oauth.OAuthConsumer(config.OAUTH_CONSUMER_KEY, config.OAUTH_CONSUMER_SECRET) oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, token=token, http_url=config.RESOURCE_URL) signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1() oauth_request.sign_request(signature_method_hmac_sha1, consumer, token) result = urlfetch.fetch(oauth_request.http_url, headers=oauth_request.to_header()) emails_map = parse(result.content) emails = list() for email in emails_map: str = 'From: %(author)s\nTitle: %(title)s\nSummary: %(summary)s\nTime: %(time)s\n%(url)s' % email emails.insert(0, str) if db.WRITE_CAPABILITY: try: Mail(key_name=email['id']).put() except db.BadKeyError: pass if emails: return '\n\n'.join(emails) else: return 'No new emails.'