mirror of
https://git.vectorsigma.ru/public/tubearchivist.git
synced 2026-08-04 22:49:31 +00:00
78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
"""all user api views"""
|
|
|
|
from common.views import ApiBaseView
|
|
from rest_framework.authtoken.models import Token
|
|
from rest_framework.authtoken.views import ObtainAuthToken
|
|
from rest_framework.response import Response
|
|
from user.models import Account
|
|
from user.serializers import AccountSerializer
|
|
from user.src.user_config import UserConfig
|
|
|
|
|
|
class UserConfigView(ApiBaseView):
|
|
"""resolves to /api/config/user/
|
|
GET: return current user config
|
|
POST: update user config
|
|
"""
|
|
|
|
def get(self, request):
|
|
"""get config"""
|
|
user_id = request.user.id
|
|
account = Account.objects.get(id=user_id)
|
|
serializer = AccountSerializer(account)
|
|
response = serializer.data.copy()
|
|
|
|
config = UserConfig(user_id).get_config()
|
|
response.update({"config": config})
|
|
|
|
return Response(response)
|
|
|
|
def post(self, request):
|
|
"""update config"""
|
|
user_id = request.user.id
|
|
data = request.data
|
|
|
|
user_conf = UserConfig(user_id)
|
|
for key, value in data.items():
|
|
try:
|
|
user_conf.set_value(key, value)
|
|
except ValueError as err:
|
|
message = {
|
|
"status": "Bad Request",
|
|
"message": f"failed updating {key} to '{value}', {err}",
|
|
}
|
|
return Response(message, status=400)
|
|
|
|
response = user_conf.get_config()
|
|
response.update({"user_id": user_id})
|
|
|
|
return Response(response)
|
|
|
|
|
|
class LoginApiView(ObtainAuthToken):
|
|
"""resolves to /api/user/login/
|
|
POST: return token and username after successful login
|
|
"""
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
"""post data"""
|
|
# pylint: disable=no-member
|
|
serializer = self.serializer_class(
|
|
data=request.data, context={"request": request}
|
|
)
|
|
serializer.is_valid(raise_exception=True)
|
|
user = serializer.validated_data["user"]
|
|
token, _ = Token.objects.get_or_create(user=user)
|
|
|
|
print(f"returning token for user with id {user.pk}")
|
|
|
|
return Response(
|
|
{
|
|
"token": token.key,
|
|
"user_id": user.pk,
|
|
"is_superuser": user.is_superuser,
|
|
"is_staff": user.is_staff,
|
|
"user_groups": [group.name for group in user.groups.all()],
|
|
}
|
|
)
|