Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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'])
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
 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'))
Ejemplo n.º 13
0
 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
Ejemplo n.º 14
0
    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'))
Ejemplo n.º 15
0
    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']
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
    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'))
Ejemplo n.º 18
0
    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()
Ejemplo n.º 19
0
    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()
Ejemplo n.º 20
0
    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
Ejemplo n.º 21
0
 def on_update(self, updates, original):
     super().on_update(updates, original)
     user = get_user()
     updates["versioncreated"] = utcnow()
     updates["version_creator"] = str(user.get("_id"))
Ejemplo n.º 22
0
 def on_update(self, updates, original):
     updates['versioncreated'] = utcnow()
     updates['version_creator'] = str(get_user().get('_id'))
Ejemplo n.º 23
0
 def on_update(self, updates, original):
     super().on_update(updates, original)
     user = get_user()
     updates['versioncreated'] = utcnow()
     updates['version_creator'] = str(user.get('_id'))
Ejemplo n.º 24
0
 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'))
Ejemplo n.º 25
0
 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)
Ejemplo n.º 26
0
 def on_update(self, updates, original):
     updates["versioncreated"] = utcnow()
     updates["version_creator"] = str(get_user().get("_id"))
Ejemplo n.º 27
0
 def on_create(self, docs):
     for doc in docs:
         update_dates_for(doc)
         doc['original_creator'] = get_user()
Ejemplo n.º 28
0
 def on_update(self, updates, original):
     updates['versioncreated'] = utcnow()
     updates['version_creator'] = str(get_user().get('_id'))
Ejemplo n.º 29
0
 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"))
Ejemplo n.º 30
0
 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'))
Ejemplo n.º 31
0
 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)
Ejemplo n.º 32
0
 def on_update(self, updates, original):
     super().on_update(updates, original)
     user = get_user()
     updates['versioncreated'] = utcnow()
     updates['version_creator'] = str(user.get('_id'))