Ejemplo n.º 1
0
 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.'
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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.'
Ejemplo n.º 4
0
 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.'
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
 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.'
Ejemplo n.º 8
0
  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()
Ejemplo n.º 9
0
 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.'