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.
85 lines
3.7 KiB
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)
|
|
|