Пример #1
0
def map_cloudfiles_endpoint(request, query, limit, page):
    from cosinnus_cloud.utils.nextcloud import perform_fulltext_search
    from cosinnus_cloud.hooks import get_nc_user_id

    result = perform_fulltext_search(get_nc_user_id(request.user),
                                     query,
                                     page=page + 1,
                                     page_size=limit)

    if result['documents']:
        total_count = result['meta']['total']
        count = result['meta']['count']
        page_obj = {
            'index': page,
            'count': count,
            'total_count': total_count,
            'start': (limit * page) + 1,
            'end': (limit * page) + count,
            'has_next': total_count > (limit * (page + 1)),
            'has_previous': page > 0,
        }
    else:
        page_obj = None

    return JsonResponse({
        "results":
        [CloudfileMapCard(doc, query) for doc in result["documents"]],
        "page":
        page_obj
    })
Пример #2
0
 def __init__(self, title=None, url=None, download_url=None, type=None, folder=None, root_folder=None, path=None, user=None):
     """ Supply a `user` to make download links work for users! """
     self.title = title
     self.url = url
     self.type = type
     self.folder = folder
     self.root_folder = root_folder
     self.path = path
     if user:
         from cosinnus_cloud.hooks import get_nc_user_id
         self.download_url = download_url.replace(
             settings.COSINNUS_CLOUD_NEXTCLOUD_ADMIN_USERNAME,
             get_nc_user_id(user),
             1
         )
     else:
         self.download_url = download_url
 def handle(self, *args, **options):
     try:
         initialize_cosinnus_after_startup()
         self.stdout.write(
             "Checking active users and creating any missing nextcloud user accounts."
         )
         counter = 0
         created = 0
         errors = 0
         all_users = filter_active_users(filter_portal_users(get_user_model().objects.all()))
         
         # retrieve all existing users so we don't create them anew
         existing_nc_users = list_all_users()
         total_users = len(all_users)
         for user in all_users:
             counter += 1
             
             # only add user if not already in NC user DB with their id
             if not get_nc_user_id(user) in existing_nc_users:
                 try:
                     create_user_from_obj(user)
                     created += 1
                 except OCSException as e:
                     if not e.statuscode == 102:  # 102: user already exists
                         errors += 1
                         self.stdout.write(
                             f"Error: OCSException: '{e.message}' ({e.statuscode})"
                         )
                 except Exception as e:
                     if settings.DEBUG:
                         raise
                     errors += 1
                     self.stdout.write("Error: Exception: " + str(e))
             self.stdout.write(
                 f"{counter}/{total_users} users checked, {created} nextcloud users created ({errors} Errors)",
                 ending="\r",
             )
             self.stdout.flush()
         self.stdout.write(
             f"Done! {counter}/{total_users} users checked, {created} nextcloud users created ({errors} Errors)."
         )
     except Exception as e:
         if settings.DEBUG:
             raise
Пример #4
0
    def get_data(self, **kwargs):

        
        # we do not use timestamps, but instead just simple paging offsets
        # because Elasticsearch gives that to us for free
        page = 1
        if self.offset_timestamp:
            page = int(self.offset_timestamp)

        dataset = nextcloud.find_newest_files(userid=get_nc_user_id(self.request.user), page=page, page_size=self.page_size)

        items = self.get_items_from_dataset(dataset)
        return {
            'items': items,
            'widget_title': _('Cloud Files'),
            'has_more': page*self.page_size < dataset['meta']['total'],
            'offset_timestamp': page + 1,
        }
    
        return dataset
Пример #5
0
    def get_data(self, offset=0):
        """ Returns a tuple (data, rows_returned, has_more) of the rendered data and how many items were returned.
            if has_more == False, the receiving widget will assume no further data can be loaded.
         """
        count = int(self.config['amount'])

        rows = []
        total_count = 0
        newest_group_files = []
        if (not 'cosinnus_cloud' in self.config.group.get_deactivated_apps()
                and self.config.group.nextcloud_group_id
                and self.config.group.nextcloud_groupfolder_name):
            response = nextcloud.find_newest_files(
                userid=get_nc_user_id(self.request.user),
                folder=self.config.group.nextcloud_groupfolder_name,
                page_size=count,
                page=offset / count + 1,
            )
            total_count = response['meta']['total']
            rows = [
                CloudFile(
                    title=doc['info']['file'],
                    path=doc['info']['path'],
                    folder=doc['info']['dir'],
                    url=f"{settings.COSINNUS_CLOUD_NEXTCLOUD_URL}{doc['link']}",
                    download_url=
                    f"{settings.COSINNUS_CLOUD_NEXTCLOUD_URL}/remote.php/webdav{doc['info']['path']}"
                ) for doc in response['documents']
            ]

        data = {
            'rows': rows,
            'no_data': _('No cloud files yet'),
            'group': self.config.group,
            'total_count': total_count,
        }
        return (render_to_string('cosinnus_cloud/widgets/latest.html', data),
                len(rows), offset + len(rows) < total_count)
    def handle(self, *args, **options):
        if not settings.COSINNUS_CONFERENCES_ENABLED:
            self.stdout.write(
                'COSINNUS_CONFERENCES_ENABLED is not True, aborting.')
            return

        try:
            initialize_cosinnus_after_startup()
            portal = CosinnusPortal.get_current()
            self.stdout.write(
                f"Checking active users and creates any missing group memberships for portal {portal.slug}."
            )
            counter = 0
            errors = 0
            users_added = 0

            portal_groups = get_cosinnus_group_model().objects.all_in_portal()
            total_groups = len(portal_groups)
            for group in portal_groups:
                counter += 1
                # only run this for groups that have the cloud app activated
                if not 'cosinnus_cloud' in group.get_deactivated_apps():

                    # add members to group
                    nextcloud_user_ids = [
                        get_nc_user_id(member)
                        for member in group.actual_members
                    ]
                    # always add admin to groups
                    nextcloud_user_ids.append(
                        settings.COSINNUS_CLOUD_NEXTCLOUD_ADMIN_USERNAME)
                    for nc_uid in nextcloud_user_ids:
                        try:
                            nextcloud.add_user_to_group(
                                nc_uid, group.nextcloud_group_id)
                            users_added += 1
                        except OCSException as e:
                            errors += 1
                            self.stdout.write(
                                f"Error (add user to group): OCSException: '{e.message}' ({e.statuscode})"
                            )
                        except Exception as e:
                            if settings.DEBUG:
                                raise
                            errors += 1
                            self.stdout.write(
                                "Error (add user to group): Exception: " +
                                str(e))
                            logger.error(
                                "Error (nextcloud group user add): Exception: "
                                + str(e),
                                extra={"exc": e})
                self.stdout.write(
                    f"{counter}/{total_groups} groups processed, {users_added} groups members added ({errors} Errors)",
                )

            self.stdout.write(
                f"Done! {counter}/{total_groups} groups processed, {users_added} groups members added ({errors} Errors)."
            )
        except Exception as e:
            if settings.DEBUG:
                raise
Пример #7
0
    def handle(self, *args, **options):
        try:
            initialize_cosinnus_after_startup()
            self.stdout.write(
                "Checking active users and creating any missing nextcloud user accounts."
            )
            counter = 0
            created = 0
            folders_created = 0
            users_added = 0
            errors = 0

            # TODO: only run the actual API calls for entries that are not yet set!

            portal_groups = get_cosinnus_group_model().objects.all_in_portal()
            total_groups = len(portal_groups)
            for group in portal_groups:
                counter += 1
                # only run this for groups that have the cloud app activated
                if not 'cosinnus_cloud' in group.get_deactivated_apps():

                    # create and validate group and groupfolder name
                    current_group_created = False
                    if not group.nextcloud_group_id:
                        generate_group_nextcloud_id(group, save=False)
                        generate_group_nextcloud_groupfolder_name(group,
                                                                  save=False)
                        group.save(update_fields=[
                            'nextcloud_group_id', 'nextcloud_groupfolder_name'
                        ])
                    if group.nextcloud_group_id and not group.nextcloud_groupfolder_name:
                        group.nextcloud_groupfolder_name = group.nextcloud_group_id
                        group.save(
                            update_fields=["nextcloud_groupfolder_name"])

                    # create group
                    try:
                        response = nextcloud.create_group(
                            group.nextcloud_group_id)
                        if response:
                            created += 1
                            current_group_created = True
                    except OCSException as e:
                        if not e.statuscode == 102:  # 102: group already exists
                            errors += 1
                            self.stdout.write(
                                f"Error (group create): OCSException: '{e.message}' ({e.statuscode})"
                            )
                    except Exception as e:
                        if settings.DEBUG:
                            raise
                        errors += 1
                        self.stdout.write("Error (group create): Exception: " +
                                          str(e))
                        logger.error(
                            "Error (nextcloud group create): Exception: " +
                            str(e),
                            extra={"exc": e})

                    # Creating a group folder in a group with an existing one is safe and will not create a new one
                    if current_group_created:
                        # create group folder and save its id
                        try:
                            nextcloud.create_group_folder(
                                group.nextcloud_groupfolder_name,
                                group.nextcloud_group_id,
                                group,
                                raise_on_existing_name=False,
                            )
                            folders_created += 1
                        except OCSException as e:
                            errors += 1
                            self.stdout.write(
                                f"Error (group folder create): OCSException: '{e.message}' ({e.statuscode})"
                            )
                        except Exception as e:
                            if settings.DEBUG:
                                raise
                            errors += 1
                            self.stdout.write(
                                "Error (group folder create): Exception: " +
                                str(e))
                            logger.error(
                                "Error (nextcloud group folder create): Exception: "
                                + str(e),
                                extra={"exc": e})

                    # add members to group
                    nextcloud_user_ids = [
                        get_nc_user_id(member)
                        for member in group.actual_members
                    ]
                    # always add admin to groups
                    nextcloud_user_ids.append(
                        settings.COSINNUS_CLOUD_NEXTCLOUD_ADMIN_USERNAME)
                    for nc_uid in nextcloud_user_ids:
                        try:
                            nextcloud.add_user_to_group(
                                nc_uid, group.nextcloud_group_id)
                            users_added += 1
                        except OCSException as e:
                            errors += 1
                            self.stdout.write(
                                f"Error (add user to group): OCSException: '{e.message}' ({e.statuscode})"
                            )
                        except Exception as e:
                            if settings.DEBUG:
                                raise
                            errors += 1
                            self.stdout.write(
                                "Error (add user to group): Exception: " +
                                str(e))
                            logger.error(
                                "Error (nextcloud group user add): Exception: "
                                + str(e),
                                extra={"exc": e})
                self.stdout.write(
                    f"{counter}/{total_groups} groups processed, {created} groups created, {folders_created} group folders created, {users_added} groups members added ({errors} Errors)",
                )

            self.stdout.write(
                f"Done! {counter}/{total_groups} groups processed, {created} groups created, {folders_created} group folders created, {users_added} groups members added ({errors} Errors)."
            )
        except Exception as e:
            if settings.DEBUG:
                raise