mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-10 19:29:56 +00:00
137 lines
4.8 KiB
Python
137 lines
4.8 KiB
Python
# Copyright (c) 2012-2016 Seafile Ltd.
|
|
import logging
|
|
|
|
from rest_framework.authentication import SessionAuthentication
|
|
from rest_framework.permissions import IsAdminUser
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
from rest_framework import status
|
|
|
|
from seaserv import seafile_api
|
|
|
|
from seahub.options.models import UserOptions
|
|
from seahub.api2.authentication import TokenAuthentication
|
|
from seahub.api2.throttling import UserRateThrottle
|
|
from seahub.api2.utils import api_error
|
|
from seahub.base.accounts import User
|
|
from seahub.views import get_system_default_repo_id
|
|
|
|
try:
|
|
from seahub.settings import USER_DEFAULT_LIBRARY_NAME
|
|
except ImportError:
|
|
USER_DEFAULT_LIBRARY_NAME = "My Library"
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AdminDefaultLibrary(APIView):
|
|
|
|
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
|
throttle_classes = (UserRateThrottle,)
|
|
permission_classes = (IsAdminUser,)
|
|
|
|
def create_default_repo(self, username):
|
|
|
|
default_repo_id = seafile_api.create_repo(name=USER_DEFAULT_LIBRARY_NAME,
|
|
desc=USER_DEFAULT_LIBRARY_NAME, username=username, passwd=None)
|
|
|
|
sys_repo_id = get_system_default_repo_id()
|
|
if not sys_repo_id or not seafile_api.get_repo(sys_repo_id):
|
|
return None
|
|
|
|
dirents = seafile_api.list_dir_by_path(sys_repo_id, '/')
|
|
for dirent in dirents:
|
|
obj_name = dirent.obj_name
|
|
seafile_api.copy_file(sys_repo_id, '/', obj_name,
|
|
default_repo_id, '/', obj_name, username, 0)
|
|
|
|
UserOptions.objects.set_default_repo(username, default_repo_id)
|
|
|
|
return default_repo_id
|
|
|
|
def get(self, request):
|
|
""" Get info of common user's default library.
|
|
|
|
Permission checking:
|
|
1. only admin can perform this action.
|
|
"""
|
|
|
|
# argument check
|
|
user_email = request.GET.get('user_email', None)
|
|
if not user_email:
|
|
error_msg = 'user_email invalid.'
|
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
|
|
|
try:
|
|
User.objects.get(email=user_email)
|
|
except User.DoesNotExist:
|
|
error_msg = 'User %s not found.' % user_email
|
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
|
|
|
# get default library info
|
|
try:
|
|
default_repo_id = UserOptions.objects.get_default_repo(user_email)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
error_msg = 'Internal Server Error'
|
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
|
|
|
default_repo_info = {}
|
|
default_repo_info['user_email'] = user_email
|
|
if default_repo_id and seafile_api.get_repo(default_repo_id) is not None:
|
|
default_repo_info['exists'] = True
|
|
default_repo_info['repo_id'] = default_repo_id
|
|
else:
|
|
default_repo_info['exists'] = False
|
|
|
|
return Response(default_repo_info)
|
|
|
|
def post(self, request):
|
|
""" Create a default library for a common user.
|
|
|
|
Permission checking:
|
|
1. only admin can perform this action.
|
|
"""
|
|
|
|
# argument check
|
|
user_email = request.POST.get('user_email', None)
|
|
if not user_email:
|
|
error_msg = 'user_email invalid.'
|
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
|
|
|
try:
|
|
common_user = User.objects.get(email=user_email)
|
|
except User.DoesNotExist:
|
|
error_msg = 'User %s not found.' % user_email
|
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
|
|
|
# permission check
|
|
if not common_user.permissions.can_add_repo():
|
|
error_msg = 'Permission denied, %s can not create library.' % user_email
|
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
|
|
|
# create default library for common use
|
|
try:
|
|
default_repo_id = UserOptions.objects.get_default_repo(user_email)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
error_msg = 'Internal Server Error'
|
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
|
|
|
default_repo_info = {}
|
|
default_repo_info['user_email'] = user_email
|
|
default_repo_info['exists'] = True
|
|
|
|
try:
|
|
if default_repo_id and seafile_api.get_repo(default_repo_id) is not None:
|
|
default_repo_info['repo_id'] = default_repo_id
|
|
else:
|
|
new_default_repo_id = self.create_default_repo(user_email)
|
|
default_repo_info['repo_id'] = new_default_repo_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(default_repo_info)
|