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')
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')