You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
flyapps/fir_ser/api/views/domain.py

85 lines
3.7 KiB

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# project: 3月
# author: NinEveN
# date: 2021/3/29
from rest_framework.views import APIView
from api.utils.baseutils import is_valid_domain, get_cname_from_domain
from api.utils.response import BaseResponse
from api.utils.auth import ExpiringTokenAuthentication
from rest_framework.response import Response
from api.models import UserDomainInfo, DomainCnameInfo
from django.db.models import Count
import logging
from api.utils.storage.caches import set_default_app_wx_easy
logger = logging.getLogger(__name__)
class DomainCnameView(APIView):
authentication_classes = [ExpiringTokenAuthentication, ]
def get(self, request):
res = BaseResponse()
res.data = {'domain_name': '', 'domain_record': '', 'is_enable': False}
user_domain_obj = UserDomainInfo.objects.filter(user_id=request.user).first()
if user_domain_obj:
res.data['domain_name'] = user_domain_obj.domain_name
res.data['is_enable'] = user_domain_obj.is_enable
if user_domain_obj.cname_id:
res.data['domain_record'] = user_domain_obj.cname_id.domain_record
return Response(res.dict)
def post(self, request):
res = BaseResponse()
domain_name = request.data.get("domain_name", None)
if domain_name:
domain_name = domain_name.strip(" ")
if domain_name and len(domain_name) > 3 and is_valid_domain(domain_name):
if UserDomainInfo.objects.filter(domain_name=domain_name, is_enable=True).count() != 0:
res.code = 1001
res.msg = "该域名已经被绑定,请更换其他域名"
else:
user_domian_obj = UserDomainInfo.objects.filter(user_id=request.user, domain_name=domain_name).first()
if user_domian_obj:
res.data = {'cname_domain': user_domian_obj.cname_id.domain_record}
else:
UserDomainInfo.objects.filter(user_id=request.user, is_enable=False).delete()
min_domian_cname_info_obj = min(
DomainCnameInfo.objects.annotate(Count('userdomaininfo')).filter(is_enable=True),
key=lambda x: x.userdomaininfo__count)
if min_domian_cname_info_obj:
res.data = {'cname_domain': min_domian_cname_info_obj.domain_record}
UserDomainInfo.objects.create(user_id=request.user, cname_id=min_domian_cname_info_obj,
domain_name=domain_name)
else:
res.code = 1002
res.msg = "该域名校验失败,请检查"
return Response(res.dict)
def put(self, request):
res = BaseResponse()
user_domian_obj = UserDomainInfo.objects.filter(user_id=request.user).first()
if user_domian_obj:
cname = get_cname_from_domain(user_domian_obj.domain_name)
if cname == user_domian_obj.cname_id.domain_record + '.':
user_domian_obj.is_enable = True
user_domian_obj.save()
UserDomainInfo.objects.filter(domain_name=user_domian_obj.domain_name, is_enable=False).delete()
set_default_app_wx_easy(request.user, True)
else:
res.code = 1003
res.msg = "系统未检出到您的CNAME记录"
else:
res.code = 1004
res.msg = "域名已经被绑定或者域名有误"
return Response(res.dict)
def delete(sele, request):
res = BaseResponse()
if UserDomainInfo.objects.filter(user_id=request.user).delete()[0]:
set_default_app_wx_easy(request.user)
return Response(res.dict)