def get(self, request, org_id): """ Get all users in an org. Permission checking: 1. only admin can perform this action. """ # argument check org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %d not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) result = [] org_users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) for org_user in org_users: user_info = get_org_user_info(org_id, org_user.email) user_info['active'] = org_user.is_active result.append(user_info) return Response({'users': result})
def get(self, request, org_id): """ Get all users in an org. Permission checking: 1. only admin can perform this action. """ if not request.user.admin_permissions.other_permission(): return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.') # argument check org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %d not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) result = [] org_users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) for org_user in org_users: user_info = get_org_user_info(org_id, org_user) user_info['active'] = org_user.is_active result.append(user_info) return Response({'users': result})
def get_org_detailed_info(org): org_id = org.org_id org_info = get_org_info(org) # users users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) org_info['users_count'] = len(users) # groups groups = ccnet_api.get_org_groups(org_id, -1, -1) org_info['groups_count'] = len(groups) return org_info
def get(self, request): """Get info of an organization """ org = request.user.org org_id = org.org_id # space quota try: storage_quota = seafile_api.get_org_quota(org_id) except Exception as e: logger.error(e) storage_quota = 0 # storage usage try: storage_usage = seafile_api.get_org_quota_usage(org_id) except Exception as e: logger.error(e) storage_usage = 0 # member quota if ORG_MEMBER_QUOTA_ENABLED: member_quota = OrgMemberQuota.objects.get_quota(org_id) else: member_quota = None # member usage try: url_prefix = request.user.org.url_prefix org_members = ccnet_api.get_org_emailusers(url_prefix, -1, -1) except Exception as e: logger.error(e) org_members = [] member_usage = 0 active_members = 0 if org_members: member_usage = len(org_members) active_members = len([m for m in org_members if m.is_active]) info = {} info['org_id'] = org_id info['org_name'] = org.org_name info['storage_quota'] = storage_quota info['storage_usage'] = storage_usage info['member_quota'] = member_quota info['member_usage'] = member_usage info['active_members'] = active_members return Response(info)
def delete(self, request, org_id): """ Delete an organization Permission checking: 1. only admin can perform this action. """ if not MULTI_TENANCY: error_msg = 'Feature is not enabled.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) if not request.user.admin_permissions.other_permission(): return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.') org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %s not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) try: # remove org users users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) for u in users: ccnet_api.remove_org_user(org_id, u.email) User.objects.get(email=u.email).delete() # remove org groups groups = ccnet_api.get_org_groups(org_id, -1, -1) for g in groups: ccnet_api.remove_org_group(org_id, g.gid) # remove org repos seafile_api.remove_org_repo_by_org_id(org_id) # remove org ccnet_api.remove_org(org_id) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) return Response({'success': True})
def remove_org(org_id): org_id = int(org_id) org = ccnet_api.get_org_by_id(org_id) if org: users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) for u in users: ccnet_api.remove_org_user(org_id, u.email) groups = ccnet_api.get_org_groups(org.org_id, -1, -1) for g in groups: ccnet_api.remove_org_group(org_id, g.gid) # remove org repos seafserv_threaded_rpc.remove_org_repo_by_org_id(org_id) # remove org ccnet_api.remove_org(org_id)
def get(self, request): """Get info of an organization """ org = request.user.org org_id = org.org_id # space quota org_role = OrgSettings.objects.filter(org_id=org_id).first() org_role = org_role.role if org_role else ORG_DEFAULT storage_quota = get_enabled_role_permissions_by_role(org_role).get('role_asset_quota', '') storage_quota = get_quota_from_string(storage_quota) if storage_quota else -2 storage_usage = Workspaces.objects.get_org_total_storage(org_id) # member quota if ORG_MEMBER_QUOTA_ENABLED: member_quota = OrgMemberQuota.objects.get_quota(org_id) else: member_quota = None # member usage try: url_prefix = request.user.org.url_prefix org_members = ccnet_api.get_org_emailusers(url_prefix, -1, -1) except Exception as e: logger.error(e) org_members = [] member_usage = 0 active_members = 0 if org_members: member_usage = len(org_members) active_members = len([m for m in org_members if m.is_active]) info = {} info['org_id'] = org_id info['org_name'] = org.org_name info['storage_quota'] = storage_quota info['storage_usage'] = storage_usage info['member_quota'] = member_quota info['member_usage'] = member_usage info['active_members'] = active_members return Response(info)
def get_org_detailed_info(org): org_id = org.org_id org_info = get_org_info(org) # users users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) org_info['users_count'] = len(users) # groups groups = ccnet_api.get_org_groups(org_id, -1, -1) org_info['groups_count'] = len(groups) if ORG_TRIAL_DAYS > 0: org_info['expiration'] = datetime.datetime.fromtimestamp( org.ctime / 1e6) + timedelta(days=ORG_TRIAL_DAYS) else: org_info['expiration'] = '' return org_info
def delete(self, request, org_id): """ Delete an organization Permission checking: 1. only admin can perform this action. """ if not (CLOUD_MODE and MULTI_TENANCY): error_msg = 'Feature is not enabled.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %s not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) try: # remove org users users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) for u in users: ccnet_api.remove_org_user(org_id, u.email) # remove org groups groups = ccnet_api.get_org_groups(org_id, -1, -1) for g in groups: ccnet_api.remove_org_group(org_id, g.gid) # remove org repos seafile_api.remove_org_repo_by_org_id(org_id) # remove org ccnet_api.remove_org(org_id) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) return Response({'success': True})
def search_user_in_org(request, q): email_list = [] # get all org users url_prefix = request.user.org.url_prefix try: all_org_users = ccnet_api.get_org_emailusers(url_prefix, -1, -1) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return email_list, api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) limited_emails = [] for org_user in all_org_users: # prepare limited emails for search from profile limited_emails.append(org_user.email) # search user from org users if q in org_user.email: email_list.append(org_user.email) email_list += search_user_from_profile_with_limits(q, limited_emails) return email_list, None
def post(self, request, org_id): """ Add new user to org. Permission checking: 1. only admin can perform this action. """ # argument check org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %d not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) email = request.POST.get('email', None) if not email or not is_valid_email(email): error_msg = 'email invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) password = request.POST.get('password', None) if not password: error_msg = 'password invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) try: User.objects.get(email=email) user_exists = True except User.DoesNotExist: user_exists = False if user_exists: error_msg = 'User %s already exists.' % email return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # check user number limit by license if user_number_over_limit(): error_msg = 'The number of users exceeds the limit.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) # check user number limit by org member quota org_members = len(ccnet_api.get_org_emailusers(org.url_prefix, -1, -1)) if ORG_MEMBER_QUOTA_ENABLED: from seahub_extra.organizations.models import OrgMemberQuota org_members_quota = OrgMemberQuota.objects.get_quota(org_id) if org_members_quota is not None and org_members >= org_members_quota: error_msg = 'Failed. You can only invite %d members.' % org_members_quota return api_error(status.HTTP_403_FORBIDDEN, error_msg) # create user try: user = User.objects.create_user(email, password, is_staff=False, is_active=True) except User.DoesNotExist as e: logger.error(e) error_msg = 'Fail to add user %s.' % email return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) # add user to org # set `is_staff` parameter as `0` try: ccnet_api.add_org_user(org_id, email, 0) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) name = request.POST.get('name', None) if name: Profile.objects.add_or_update(email, name) if config.FORCE_PASSWORD_CHANGE: UserOptions.objects.set_force_passwd_change(email) user_info = get_org_user_info(org_id, user) return Response(user_info)
def tearDown(self, ): users = ccnet_api.get_org_emailusers(self.org.url_prefix, -1, -1) for u in users: ccnet_api.remove_org_user(self.org.org_id, u.email) ccnet_api.remove_org(self.org.org_id)
def post(self, request, org_id): """ Add new user to org. Permission checking: 1. only admin can perform this action. """ # argument check org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %d not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) email = request.POST.get('email', None) if not email or not is_valid_email(email): error_msg = 'email invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) password = request.POST.get('password', None) if not password: error_msg = 'password invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) active = request.POST.get('active', 'true') active = active.lower() if active not in ('true', 'false'): error_msg = 'active invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) is_active = active == 'true' try: User.objects.get(email=email) user_exists = True except User.DoesNotExist: user_exists = False if user_exists: error_msg = 'User %s already exists.' % email return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # check user number limit by license if user_number_over_limit(): error_msg = 'The number of users exceeds the limit.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) # check user number limit by org member quota org_members = len(ccnet_api.get_org_emailusers(org.url_prefix, -1, -1)) if ORG_MEMBER_QUOTA_ENABLED: from seahub_extra.organizations.models import OrgMemberQuota org_members_quota = OrgMemberQuota.objects.get_quota(org_id) if org_members_quota is not None and org_members >= org_members_quota: error_msg = 'Failed. You can only invite %d members.' % org_members_quota return api_error(status.HTTP_403_FORBIDDEN, error_msg) # create user try: User.objects.create_user(email, password, is_staff=False, is_active=is_active) except User.DoesNotExist as e: logger.error(e) error_msg = 'Fail to add user %s.' % email return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) # add user to org # set `is_staff` parameter as `0` try: ccnet_api.add_org_user(org_id, email, 0) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) name = request.POST.get('name', None) if name: Profile.objects.add_or_update(email, name) if config.FORCE_PASSWORD_CHANGE: UserOptions.objects.set_force_passwd_change(email) user_info = get_org_user_info(org_id, email) user_info['active'] = is_active return Response(user_info)