Exemplo n.º 1
0
 def check_auth(self, *args):
     self.userid, self.user_email, self.credentials = load_session_credentials(self)
     self.mirror_service = create_service('mirror', 'v1', self.credentials)
     if self.credentials:
         # validate credentials
         try:
             self.credentials.refresh(httplib2.Http())
             return handler_method(self, *args)
         except AccessTokenRefreshError:
             store_userdetails(self, '', '')
             credentials_entity = Credentials.get_by_key_name(self.userid)
             users_entity = Users.get_by_key_name(key_names=self.user_email)
             if users_entity:
                 users_entity.delete()
             if credentials_entity:
                 credentials_entity.delete()
     self.redirect('/auth')
Exemplo n.º 2
0
    def post(self):
        Utilities._init_handler(self)
        if self.empty_query_string('user_email', 'message'):
            self.render('add-to-timeline.html')
        else:
            user_email = self.get_parameter('user_email', None)
            logging.debug('Request Email (%s)' % user_email)
            user_entity = Users.get_by_key_name(key_names=user_email)
            if not user_entity:
                self.add_error('Unknown email address. Have you registered with the service ?')
            else:
                user_id = user_entity.credentials_key
                credentials = StorageByKeyName(Credentials, user_id, 'credentials').get()
                mirror_service = util.create_service('mirror', 'v1', credentials)

                credentials_valid = False
                # make sure credentials are valid
                try:
                    credentials.refresh(httplib2.Http())
                    credentials_valid = True
                except AccessTokenRefreshError:
                    # Access has been revoked.
                    util.store_userdetails(self, '', '')
                    credentials_entity = Credentials.get_by_key_name(self.userid)
                    user_entity_delete = Users.get_by_key_name(key_names=user_email)
                    if credentials_entity:
                        credentials_entity.delete()
                    if user_entity_delete:
                        user_entity_delete.delete()

                if credentials_valid:
                    message = self.get_parameter('message', None)
                    is_html = self.get_parameter('is_html', 'False') == 'True'
                    image_url = self.get_parameter('image_url', None)
                    image = self.get_parameter('image', None)

                    logging.info('Inserting timeline item for (%s)' % user_email)
                    body = {
                        'notification': {'level': 'DEFAULT'},
                        'menuItems': [
                            {'action': 'DELETE'}
                        ]
                    }
                    if is_html:
                        body['html'] = message
                    else:
                        body['text'] = message

                    if image_url:
                        if image_url.startswith('/'):
                            image_url = util.get_full_url(self, image_url)
                        resp = urlfetch.fetch(image_url, deadline=20)
                        media = MediaIoBaseUpload(io.BytesIO(resp.content), mimetype='image/jpeg', resumable=True)
                    elif image:
                        media = MediaIoBaseUpload(io.BytesIO(base64.b64decode(image)), mimetype='image/jpeg')
                    else:
                        media = None

                    # self.mirror_service is initialized in util.auth_required.
                    mirror_service.timeline().insert(body=body, media_body=media).execute()

                    self.add_parameter('success', True)
                    self.add_to_json('success', True)
                    logging.info('Successfully inserted timeline item for (%s)' % user_email)
                else:
                    self.add_error('Revoked Credentials.')

            self.render('add-to-timeline.html')