1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-01 15:23:05 +00:00
seahub/seahub/organizations/api/admin/info.py
awu0403 697aaf3c41
Disable org member create encrypt and clean trash (#6679)
* update

* update

* optimize code

* update

* optimize code

* update

* update

* Update __init__.py

* Update __init__.py

---------

Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
Co-authored-by: r350178982 <32759763+r350178982@users.noreply.github.com>
2024-09-03 18:16:38 +08:00

149 lines
4.5 KiB
Python

# Copyright (c) 2012-2016 Seafile Ltd.
import logging
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.authentication import SessionAuthentication
from django.conf import settings
from django.utils.translation import gettext as _
from seaserv import ccnet_api, seafile_api
from seahub.api2.utils import api_error
from seahub.api2.permissions import IsProVersion
from seahub.api2.throttling import UserRateThrottle
from seahub.api2.authentication import TokenAuthentication
from seahub.organizations.models import OrgMemberQuota, FORCE_ADFS_LOGIN, DISABLE_ORG_ENCRYPTED_LIBRARY, DISABLE_ORG_USER_CLEAN_TRASH
from seahub.utils.file_size import get_file_size_unit
from seahub.organizations.settings import ORG_MEMBER_QUOTA_ENABLED, \
ORG_ENABLE_ADMIN_CUSTOM_NAME
from seahub.organizations.api.permissions import IsOrgAdmin
from seahub.organizations.models import OrgAdminSettings
logger = logging.getLogger(__name__)
def get_org_info(request, 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
# user default quota
try:
user_default_quota = seafile_api.get_org_user_default_quota(org_id)
except Exception as e:
logger.error(e)
user_default_quota = 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])
file_ext_white_list = seafile_api.org_get_file_ext_white_list(org_id)
info = {
DISABLE_ORG_ENCRYPTED_LIBRARY: False,
DISABLE_ORG_USER_CLEAN_TRASH: False,
FORCE_ADFS_LOGIN: False
}
org_settings = OrgAdminSettings.objects.filter(org_id=org_id)
setting_items = {item.key: item.value for item in org_settings}
for key, value in info.items():
if key in setting_items:
info[key] = int(setting_items[key])
if settings.ENABLE_MULTI_ADFS is False:
info[FORCE_ADFS_LOGIN] = False
info['storage_quota'] = storage_quota
info['storage_usage'] = storage_usage
info['user_default_quota'] = user_default_quota
info['member_quota'] = member_quota
info['member_usage'] = member_usage
info['active_members'] = active_members
info['file_ext_white_list'] = file_ext_white_list
return info
class OrgAdminInfo(APIView):
authentication_classes = (TokenAuthentication, SessionAuthentication)
throttle_classes = (UserRateThrottle,)
permission_classes = (IsProVersion, IsOrgAdmin)
def get(self, request):
"""Get info of an organization
"""
org = request.user.org
org_id = org.org_id
info = get_org_info(request, org_id)
info['org_id'] = org_id
info['org_name'] = org.org_name
return Response(info)
def put(self, request):
"""Update info of an organization
"""
org_id = request.user.org.org_id
new_name = request.data.get('org_name', None)
if new_name:
if not ORG_ENABLE_ADMIN_CUSTOM_NAME:
error_msg = _('Feature is not enabled.')
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
ccnet_api.set_org_name(org_id, new_name)
user_default_quota = request.data.get('user_default_quota', None)
if user_default_quota:
try:
user_default_quota = int(user_default_quota)
except ValueError:
error_msg = 'user_default_quota invalid.'
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
user_default_quota = int(user_default_quota) * get_file_size_unit('MB')
seafile_api.set_org_user_default_quota(org_id, user_default_quota)
info = get_org_info(request, org_id)
info['org_id'] = org_id
info['org_name'] = new_name
return Response(info)