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