|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding:utf-8 -*-
|
|
|
|
# project: fir_ser
|
|
|
|
# filename: getip
|
|
|
|
# author: liuyu
|
|
|
|
# date: 2022/3/28
|
|
|
|
|
|
|
|
import logging
|
|
|
|
|
|
|
|
from rest_framework.response import Response
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
|
|
from api.models import UserPersonalConfig, DomainCnameInfo
|
|
|
|
from api.utils.response import BaseResponse
|
|
|
|
from api.utils.serializer import PersonalConfigSerializer
|
|
|
|
from common.core.auth import ExpiringTokenAuthentication, SuperSignPermission
|
|
|
|
from common.core.sysconfig import UserConfig, Config
|
|
|
|
from common.utils.caches import del_cache_storage
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def get_personal_config(request):
|
|
|
|
config_type = request.query_params.get("config_type", None)
|
|
|
|
if config_type == 'super_sign':
|
|
|
|
personal_config = Config.DEVELOPER_STATUS_CONFIG
|
|
|
|
elif config_type == 'preview_route':
|
|
|
|
personal_config = ['PRIVATE_DOWNLOAD_PAGE', 'PREVIEW_ROUTE_HASH']
|
|
|
|
elif config_type == 'short_download_uri':
|
|
|
|
personal_config = ['DOWNLOAD_DEPLOYMENT_HISTORY_URL', 'DOWNLOAD_DEPLOYMENT_HASH_URL']
|
|
|
|
else:
|
|
|
|
personal_config = []
|
|
|
|
return personal_config
|
|
|
|
|
|
|
|
|
|
|
|
def check_config_auth(request, config_key, config_value):
|
|
|
|
if config_key == 'PRIVATE_DOWNLOAD_PAGE':
|
|
|
|
if not DomainCnameInfo.objects.filter(user_ipk=request.user.pk, is_enable=True).count():
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
class PersonalConfigView(APIView):
|
|
|
|
authentication_classes = [ExpiringTokenAuthentication, ]
|
|
|
|
permission_classes = [SuperSignPermission, ]
|
|
|
|
|
|
|
|
def get(self, request):
|
|
|
|
res = BaseResponse()
|
|
|
|
|
|
|
|
config_key = request.query_params.get("config_key", None)
|
|
|
|
personal_config = get_personal_config(request)
|
|
|
|
personal_config_queryset = UserPersonalConfig.objects.filter(user_id=request.user,
|
|
|
|
key__in=personal_config)
|
|
|
|
if personal_config_queryset.count() != len(personal_config):
|
|
|
|
for key in personal_config:
|
|
|
|
UserConfig(request.user).set_default_value(key)
|
|
|
|
if config_key:
|
|
|
|
personal_config_queryset = personal_config_queryset.filter(key=config_key)
|
|
|
|
|
|
|
|
personal_config_serializer = PersonalConfigSerializer(personal_config_queryset, many=True)
|
|
|
|
res.data = personal_config_serializer.data
|
|
|
|
res.count = personal_config_queryset.count()
|
|
|
|
|
|
|
|
return Response(res.dict)
|
|
|
|
|
|
|
|
def put(self, request):
|
|
|
|
res = BaseResponse()
|
|
|
|
config_key = request.data.get("config_key", None)
|
|
|
|
config_value = request.data.get("config_value", None)
|
|
|
|
|
|
|
|
if config_key is not None and config_value is not None and config_key in get_personal_config(request):
|
|
|
|
if check_config_auth(request, config_key, config_value):
|
|
|
|
UserPersonalConfig.objects.filter(user_id=request.user, key=config_key).update(value=config_value)
|
|
|
|
UserConfig(request.user).invalid_config_cache(config_key)
|
|
|
|
return Response(res.dict)
|
|
|
|
|
|
|
|
def delete(self, request):
|
|
|
|
res = BaseResponse()
|
|
|
|
for key in get_personal_config(request):
|
|
|
|
UserConfig(request.user).del_value(key)
|
|
|
|
Config.invalid_config_cache(f'{key}_DES')
|
|
|
|
if key == 'preview_route':
|
|
|
|
# 清理缓存
|
|
|
|
del_cache_storage(request.user)
|
|
|
|
return Response(res.dict)
|