def on_create(self, docs): for doc in docs: doc['original_creator'] = get_user().get('_id') if (self.find_one(req=None, blog=doc['blog'], original_creator=get_user().get('_id'))): raise SuperdeskApiError.badRequestError( message='A request has already been sent') super().on_create(docs)
def find_one(self, req, **lookup): doc = super().find_one(req, **lookup) # check if the current user has permission to open a blog if not is_admin(get_user()): # get members ids members = [str(m["user"]) for m in doc.get("members", [])] # add owner id to members members.append(doc.get("original_creator")) # check if current user belongs to members, and raise an exeption if not if str(get_user().get("_id")) not in members: roles = get_resource_service("roles").find_one(req=None, _id=get_user().get("role")) if not roles: raise SuperdeskApiError.forbiddenError(message="you do not have permission to open this blog") return doc
def find_one(self, req, checkUser=True, **lookup): doc = super().find_one(req, **lookup) # check if the current user has permission to open a blog if checkUser and not is_admin(get_user()): # get members ids members = [str(m['user']) for m in doc.get('members', [])] # add owner id to members members.append(doc.get('original_creator')) # check if current user belongs to members, and raise an exeption if not if str(get_user().get('_id')) not in members: roles = get_resource_service('roles').find_one(req=None, _id=get_user().get('role')) if not roles: raise SuperdeskApiError.forbiddenError(message='you do not have permission to open this blog') return doc
def create(self, docs, **kwargs): """ Basically we override this to avoid repeated entries in flag. We need to check flag and postId, if exists we extract users and append them to new doc that will be created """ userId = get_user()['_id'] for doc in docs: doc['users'] = [userId] doc['expireAt'] = utcnow() + datetime.timedelta( seconds=EDIT_POST_FLAG_TTL) doc_exists = self.find_one(req=None, postId=doc['postId'], flag_type=doc['flag_type']) if doc_exists: doc['users'] += doc_exists['users'] doc['users'] = list(set(doc['users'])) # super delete to avoid notification :) super().delete(lookup={'_id': doc_exists['_id']}) return super().create(docs, **kwargs)
def on_update(self, updates, original): blog_status = updates.get('blog_status') if blog_status == 'open' and original['blog_status'] == 'closed': self._check_max_active(1) updates['versioncreated'] = utcnow() updates['version_creator'] = str(get_user().get('_id')) syndication_enabled = updates.get('syndication_enabled') out = get_resource_service('syndication_out').find({'blog_id': original['_id']}) if syndication_enabled is False and out.count(): raise SuperdeskApiError.forbiddenError(message='Cannot disable syndication: blog has active consumers.') # If archiving a blog, remove any syndication in records if blog_status == 'closed': self._on_deactivate(original['_id']) # if SOLO subscription level, let's update embeds to show # warning message that blog is not available anymore if 'solo' in SUBSCRIPTION_LEVEL: publish_blog_embeds_on_s3.apply_async(args=[original], countdown=2) # If missing, set "start_date" to original post "_created" value. if not updates.get('start_date') and original['start_date'] is None: updates['start_date'] = original['_created'] if 'blog_preferences' in updates: theme_name = updates['blog_preferences'].get('theme') if theme_name: self._update_theme_settings(updates, theme_name)
def on_update(self, updates, original): blog_status = updates.get('blog_status') if blog_status == 'open' and original['blog_status'] == 'closed': self._check_max_active(1) updates['versioncreated'] = utcnow() updates['version_creator'] = str(get_user().get('_id')) syndication_enabled = updates.get('syndication_enabled') out = get_resource_service('syndication_out').find( {'blog_id': original['_id']}) if syndication_enabled is False and out.count(): raise SuperdeskApiError.forbiddenError( message='Cannot disable syndication: blog has active consumers.' ) # If archiving a blog, remove any syndication in records if blog_status == 'closed': self._on_deactivate(original['_id']) # If missing, set "start_date" to original post "_created" value. if not updates.get('start_date') and original['start_date'] is None: updates['start_date'] = original['_created'] if 'blog_preferences' in updates: theme_name = updates['blog_preferences'].get('theme') if theme_name: self._update_theme_settings(updates, theme_name)
def notify_the_owner(doc, origin): if not get_user(): logger.info('there is no logged in user so no membership is allowed') else: blog = get_resource_service('blogs').find_one(req=None, _id=doc.get('blog')) owner = blog.get('original_creator') add_activity('notify', 'one user requested liveblog membership', resource=None, item=doc, notify=str(owner)) send_email_to_owner(doc, owner, origin)
def on_create(self, docs): for doc in docs: update_dates_for(doc) doc["original_creator"] = str(get_user().get("_id")) # set the blog_preferences by merging given preferences with global_prefs global_prefs = get_resource_service("global_preferences").get_global_prefs() prefs = global_prefs.copy() prefs.update(doc.get("blog_preferences", {})) doc["blog_preferences"] = prefs
def on_create(self, docs): for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) # set the blog_preferences by merging given preferences with global_prefs global_prefs = get_resource_service( 'global_preferences').get_global_prefs() prefs = global_prefs.copy() prefs.update(doc.get('blog_preferences', {})) doc['blog_preferences'] = prefs
def on_create(self, docs): for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) doc['guid'] = generate_guid(type=GUID_TAG) # set the blog_preferences by merging given preferences with global_prefs global_prefs = get_resource_service('global_preferences').get_global_prefs() prefs = global_prefs.copy() prefs.update(doc.get('blog_preferences', {})) doc['blog_preferences'] = prefs # save a snapshot of the theme in the `theme` field if 'theme' in prefs: doc['theme'] = self.get_theme_snapshot(prefs['theme'])
def notify_the_owner(doc, origin): if not get_user(): logger.info('there is no logged in user so no membership is allowed') else: owner = doc.get('original_creator') blog = get_resource_service('blogs').find_one(req=None, _id=doc.get('blog')) owner_list = [blog.get('original_creator')] add_activity( 'liveblog:request', 'one user requested liveblog membership', resource=None, item=blog, item_slugline=blog.get('title'), notify=owner_list) send_email_to_owner(doc, [owner], origin)
def on_create(self, docs): super().on_create(docs) for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) if doc.get('item_type'): if doc['item_type'] == 'embed': metadata = doc['meta'] set_filemeta(doc, metadata) if get_filemeta(doc, 'version'): metadata['version'] = str(metadata.get('version')) if get_filemeta(doc, 'width'): metadata['width'] = str(metadata.get('width')) if get_filemeta(doc, 'height'): metadata['height'] = str(metadata.get('height'))
def on_create(self, docs): for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) # set the blog_preferences by merging given preferences with global_prefs global_prefs = get_resource_service('global_preferences').get_global_prefs() prefs = global_prefs.copy() prefs.update(doc.get('blog_preferences', {})) doc['blog_preferences'] = prefs # find the theme that is assigned to the blog my_theme = get_resource_service('themes').find_one(req=None, name=doc['blog_preferences']['theme']) # retrieve the default settings of the theme default_theme_settings = get_resource_service('themes').get_default_settings(my_theme) # save the theme settings on the blog level doc['theme_settings'] = default_theme_settings
def on_update(self, updates, original): # check permission (see https://github.com/superdesk/liveblog/pull/167) # only the owner can change blog's settings if not is_admin(get_user()) and str(flask.g.user['_id']) != str(original['original_creator']): raise SuperdeskApiError.forbiddenError(message='You need to be the blog owner to perform updates on it') # if the theme changed, we republish the blog with the new one if 'blog_preferences' in updates and 'theme' in updates['blog_preferences']: if updates['blog_preferences']['theme'] != original['blog_preferences'].get('theme'): new_theme = self.get_theme_snapshot(updates['blog_preferences']['theme']) if new_theme: if 'theme' in original: updates['theme'] = original.get('theme') for key in original['theme'].keys(): if key not in new_theme: # remove fields that are not in new_theme updates['theme'][key] = None for key, value in new_theme.items(): # add or update fields that are new updates['theme'][key] = value else: updates['theme'] = new_theme updates['versioncreated'] = utcnow() updates['version_creator'] = str(get_user().get('_id'))
def on_update(self, updates, original): blog_status = updates.get('blog_status') if blog_status == 'open' and original['blog_status'] == 'closed': self._check_max_active(1) updates['versioncreated'] = utcnow() updates['version_creator'] = str(get_user().get('_id')) syndication_enabled = updates.get('syndication_enabled') out = get_resource_service('syndication_out').find({'blog_id': original['_id']}) if syndication_enabled is False and out.count(): raise SuperdeskApiError.forbiddenError(message='Cannot disable syndication: blog has active consumers.') # If missing, set "start_date" to original post "_created" value. if not updates.get('start_date') and original['start_date'] is None: updates['start_date'] = original['_created']
def notify_the_owner(doc, origin): if not get_user(): logger.info('there is no logged in user so no membership is allowed') else: owner_list = [] owner = doc.get('original_creator') if isinstance(owner, ObjectId): owner_list.append(owner) else: owner_list.append(str(owner)) add_activity('notify', 'one user requested liveblog membership', resource=None, item=doc, notify=owner_list) send_email_to_owner(doc, owner_list, origin)
def on_update(self, updates, original): # if the theme changed, we republish the blog with the new one if 'blog_preferences' in updates and 'theme' in updates['blog_preferences']: if updates['blog_preferences']['theme'] != original['blog_preferences'].get('theme'): updates['theme'] = original.get('theme') new_theme = self.get_theme_snapshot(updates['blog_preferences']['theme']) if new_theme: for key in original['theme'].keys(): if key not in new_theme: # remove fields that are not in new_theme updates['theme'][key] = None for key, value in new_theme.items(): # add or update fields that are new updates['theme'][key] = value updates['versioncreated'] = utcnow() updates['version_creator'] = str(get_user().get('_id'))
def on_create(self, docs): self._check_max_active(len(docs)) for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) # Set the blog_preferences by merging given preferences with global_prefs. global_prefs = get_resource_service('global_preferences').get_global_prefs() prefs = global_prefs.copy() prefs.update(doc.get('blog_preferences', {})) doc['blog_preferences'] = prefs # find the theme that is assigned to the blog theme_name = doc['blog_preferences'].get('theme') if theme_name: self._update_theme_settings(doc, theme_name) # If "start_date" is set to None, change the value to utcnow(). if doc['start_date'] is None: doc['start_date'] = utcnow()
def on_create(self, docs): self._check_max_active(len(docs)) for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) # set the blog_preferences by merging given preferences with global_prefs global_prefs = get_resource_service('global_preferences').get_global_prefs() prefs = global_prefs.copy() prefs.update(doc.get('blog_preferences', {})) doc['blog_preferences'] = prefs # find the theme that is assigned to the blog my_theme = get_resource_service('themes').find_one(req=None, name=doc['blog_preferences']['theme']) # retrieve the default settings of the theme default_theme_settings = get_resource_service('themes').get_default_settings(my_theme) # save the theme settings on the blog level doc['theme_settings'] = default_theme_settings # If "start_date" is set to None, change the value to utcnow(). if doc['start_date'] is None: doc['start_date'] = utcnow()
def delete(self, lookup): # this delete method it's kind of special, because it might delete just # the user which is leaving the editor but keep the flag because there are # more than one user editing the same post update = False flag = self.find_one(req=None, **lookup) if (len(flag['users']) > 1): current_user = get_user()['_id'] updates = flag.copy() updates['users'].remove(ObjectId(current_user)) flag = self.update(flag['_id'], updates, flag) update = True else: super().delete(lookup) complete_flag_info(flag) self.delete_notify(flag, update=update) return flag
def on_update(self, updates, original): super().on_update(updates, original) user = get_user() updates["versioncreated"] = utcnow() updates["version_creator"] = str(user.get("_id"))
def on_update(self, updates, original): updates['versioncreated'] = utcnow() updates['version_creator'] = str(get_user().get('_id'))
def on_update(self, updates, original): super().on_update(updates, original) user = get_user() updates['versioncreated'] = utcnow() updates['version_creator'] = str(user.get('_id'))
def on_create(self, docs): super().on_create(docs) for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id'))
def on_create(self, docs): for doc in docs: update_dates_for(doc) doc['original_creator'] = str(get_user().get('_id')) doc['guid'] = generate_guid(type=GUID_TAG)
def on_update(self, updates, original): updates["versioncreated"] = utcnow() updates["version_creator"] = str(get_user().get("_id"))
def on_create(self, docs): for doc in docs: update_dates_for(doc) doc['original_creator'] = get_user()
def on_create(self, docs): super().on_create(docs) for doc in docs: update_dates_for(doc) doc["original_creator"] = str(get_user().get("_id"))
def on_create(self, docs): for doc in docs: doc['original_creator'] = get_user().get('_id') if(self.find_one(req=None, blog=doc['blog'], original_creator=get_user().get('_id'))): raise SuperdeskApiError.badRequestError(message='A request has already been sent') super().on_create(docs)