1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-20 19:08:21 +00:00
Files
seahub/seahub/api2/endpoints/user.py
lian 9bdbb1671a Add ENABLE_ADDRESSBOOK_OPT_IN setting
Enable user to choose if show himself in global address book
2017-09-11 11:13:59 +08:00

77 lines
2.7 KiB
Python

# Copyright (c) 2012-2016 Seafile Ltd.
import logging
from rest_framework import status
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from seahub.api2.authentication import TokenAuthentication
from seahub.api2.throttling import UserRateThrottle
from seahub.api2.utils import api_error
from seahub.base.templatetags.seahub_tags import email2nickname, \
email2contact_email
from seahub.profile.models import Profile
logger = logging.getLogger(__name__)
json_content_type = 'application/json; charset=utf-8'
class User(APIView):
""" Query/update user info of myself.
"""
authentication_classes = (TokenAuthentication, SessionAuthentication)
permission_classes = (IsAuthenticated, )
throttle_classes = (UserRateThrottle, )
def _get_user_info(self, email):
profile = Profile.objects.get_profile_by_user(email)
info = {}
info['email'] = email
info['name'] = email2nickname(email)
info['contact_email'] = email2contact_email(email)
info['list_in_address_book'] = profile.list_in_address_book if profile else False
return info
def _update_user_additional_info(self, request, email):
# update user list_in_address_book
list_in_address_book = request.data.get("list_in_address_book", None)
if list_in_address_book is not None:
profile = Profile.objects.get_profile_by_user(email)
if profile is None:
profile = Profile(user=email)
profile.list_in_address_book = list_in_address_book.lower() == 'true'
profile.save()
def get(self, request):
email = request.user.username
info = self._get_user_info(email)
return Response(info)
def put(self, request):
email = request.user.username
# argument check for list_in_address_book
list_in_address_book = request.data.get("list_in_address_book", None)
if list_in_address_book is not None:
if list_in_address_book.lower() not in ('true', 'false'):
error_msg = 'list_in_address_book invalid.'
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
try:
# update user additional info
self._update_user_additional_info(request, email)
except Exception as e:
logger.error(e)
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
# get user info and return
info = self._get_user_info(email)
return Response(info)