def post(self, request): """Add a group in address book. parent_group: -1 - no parent group; > 0 - have parent group. group_owner: default to system admin group_staff: default to system admin """ group_name = request.data.get('group_name', '').strip() if not group_name: error_msg = 'name %s invalid.' % group_name return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # Check whether group name is validate. if not validate_group_name(group_name): error_msg = _('Name can only contain letters, numbers, blank, hyphen or underscore.') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # Check whether group name is duplicated. pattern_matched_groups = ccnet_api.search_groups(group_name, -1, -1) for group in pattern_matched_groups: if group.group_name == group_name: error_msg = _('There is already a group with that name.') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # Group owner is 'system admin' group_owner = request.data.get('group_owner', '') try: parent_group = int(request.data.get('parent_group', -1)) except ValueError: error_msg = 'parent_group invalid' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) if parent_group < 0 and parent_group != -1: error_msg = 'parent_group invalid' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # TODO: check parent group exists try: if is_org_context(request): # request called by org admin org_id = request.user.org.org_id group_id = ccnet_api.create_org_group( org_id, group_name, group_owner, parent_group_id=parent_group) else: group_id = ccnet_api.create_group(group_name, group_owner, parent_group_id=parent_group) seafile_api.set_group_quota(group_id, -2) except SearpcError as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) # get info of new group group_info = address_book_group_to_dict(group_id) return Response(group_info, status=status.HTTP_200_OK)
def _admin_check_group_name_conflict(self, new_group_name): checked_groups = ccnet_api.search_groups(new_group_name, -1, -1) for g in checked_groups: if g.group_name == new_group_name: return True, g return False, None
def get_group_by_name(self, group_name): checked_groups = ccnet_api.search_groups(group_name, -1, -1) for g in checked_groups: if g.group_name == group_name: return g return None
def post(self, request): """ Create a group Permission checking: 1. Admin user; """ # argument check group_name = request.data.get('group_name', '') if not group_name: error_msg = 'group_name %s invalid.' % group_name return api_error(status.HTTP_400_BAD_REQUEST, error_msg) group_name = group_name.strip() # Check whether group name is validate. if not validate_group_name(group_name): error_msg = _('Group name can only contain letters, numbers, blank, hyphen, dot, single quote or underscore') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # Check whether group name is duplicated. pattern_matched_groups = ccnet_api.search_groups(group_name, -1, -1) for group in pattern_matched_groups: if group.group_name == group_name: error_msg = _('There is already a group with that name.') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) group_owner = request.data.get('group_owner', '') if group_owner: try: User.objects.get(email=group_owner) except User.DoesNotExist: error_msg = 'User %s not found.' % group_owner return api_error(status.HTTP_404_NOT_FOUND, error_msg) username = request.user.username new_owner = group_owner or username # create group. try: group_id = ccnet_api.create_group(group_name, new_owner) except SearpcError as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) # send admin operation log signal admin_op_detail = { "id": group_id, "name": group_name, "owner": new_owner, } admin_operation.send(sender=None, admin_name=username, operation=GROUP_CREATE, detail=admin_op_detail) # get info of new group group_info = get_group_info(group_id) return Response(group_info, status=status.HTTP_201_CREATED)
def get(self, request): """ List all groups / search group by name Permission checking: 1. Admin user; """ if not request.user.admin_permissions.can_manage_group(): return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.') # search groups by name group_name = request.GET.get('name', '') group_name = group_name.strip() return_results = [] if group_name: # search by name(keyword in name) groups_all = ccnet_api.search_groups(group_name, -1, -1) for group in groups_all: group_info = get_group_info(group.id) return_results.append(group_info) return Response({"name": group_name, "groups": return_results}) try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '100')) except ValueError: current_page = 1 per_page = 100 start = (current_page - 1) * per_page limit = per_page + 1 groups = ccnet_api.get_all_groups(start, limit) if len(groups) > per_page: groups = groups[:per_page] has_next_page = True else: has_next_page = False return_results = [] for group in groups: if hasattr(ccnet_api, 'is_org_group') and \ ccnet_api.is_org_group(group.id): continue group_info = get_group_info(group.id) return_results.append(group_info) page_info = { 'has_next_page': has_next_page, 'current_page': current_page } return Response({"page_info": page_info, "groups": return_results})
def get(self, request): """ List all groups / search group by name Permission checking: 1. Admin user; """ # search groups by name group_name = request.GET.get('name', '') group_name = group_name.strip() return_results = [] if group_name: # search by name(keyword in name) groups_all = ccnet_api.search_groups(group_name, -1, -1) for group in groups_all: group_info = get_group_info(group.id) return_results.append(group_info) return Response({"name": group_name, "groups": return_results}) try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '100')) except ValueError: current_page = 1 per_page = 100 start = (current_page - 1) * per_page limit = per_page + 1 groups = ccnet_api.get_all_groups(start, limit) if len(groups) > per_page: groups = groups[:per_page] has_next_page = True else: has_next_page = False return_results = [] for group in groups: if hasattr(ccnet_api, 'is_org_group') and \ ccnet_api.is_org_group(group.id): continue group_info = get_group_info(group.id) return_results.append(group_info) page_info = { 'has_next_page': has_next_page, 'current_page': current_page } return Response({"page_info": page_info, "groups": return_results})
def get(self, request): """ List all groups / search group by name Permission checking: 1. Admin user; """ # search groups by name group_name = request.GET.get('name', '') group_name = group_name.strip() return_results = [] if group_name: # search by name(keyword in name) groups_all = ccnet_api.search_groups(group_name, -1, -1) for group in groups_all: group_info = get_group_info(group.id) return_results.append(group_info) return Response({"name": group_name, "groups": return_results}) try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '100')) except ValueError: current_page = 1 per_page = 100 start = (current_page - 1) * per_page limit = per_page + 1 groups = ccnet_api.get_all_groups(start, limit) if len(groups) > per_page: groups = groups[:per_page] has_next_page = True else: has_next_page = False return_results = [] for group in groups: group_info = get_group_info(group.id, show_size=True) return_results.append(group_info) page_info = { 'has_next_page': has_next_page, 'current_page': current_page } return Response({"page_info": page_info, "groups": return_results})
def get(self, request): """ Search group by name Permission checking: 1. Admin user; """ query_str = request.GET.get('query', '').lower().strip() if not query_str: error_msg = 'query invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) result = [] groups = ccnet_api.search_groups(query_str, 0, 25) for group in groups: group_info = get_group_info(group.id, show_size=True) result.append(group_info) return Response({"group_list": result})
def check_group_name_conflict(request, new_group_name): """Check if new group name conflict with existed group. return "True" if conflicted else "False" """ org_id = -1 username = request.user.username if is_org_context(request): org_id = request.user.org.org_id checked_groups = seaserv.get_org_groups_by_user(org_id, username) else: if request.cloud_mode: checked_groups = ccnet_api.get_groups(username) else: checked_groups = ccnet_api.search_groups(new_group_name, -1, -1) for g in checked_groups: if g.group_name == new_group_name: return True return False
def check_group_name_conflict(request, new_group_name): """Check if new group name conflict with existed group. return "True" if conflicted else "False" """ org_id = -1 username = request.user.username if is_org_context(request): org_id = request.user.org.org_id checked_groups = seaserv.get_org_groups_by_user(org_id, username) else: if request.cloud_mode: checked_groups = seaserv.get_personal_groups_by_user(username) else: checked_groups = ccnet_api.search_groups(new_group_name, -1, -1) for g in checked_groups: if g.group_name == new_group_name: return True return False
def get(self, request): """ Search group by name Permission checking: 1. Admin user; """ if not request.user.admin_permissions.can_manage_group(): return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.') query_str = request.GET.get('query', '').lower().strip() if not query_str: error_msg = 'query invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) result = [] groups = ccnet_api.search_groups(query_str, 0, 25) for group in groups: group_info = get_group_info(group.id) result.append(group_info) return Response({"group_list": result})