예제 #1
0
파일: domains.py 프로젝트: suzuke/phx_web
def DomainsUpdateStatus(request):
    if request.method == 'POST':
        clientip = getIp(request)
        data = json.loads(request.body)
        logger.info('%s is requesting. %s data: %s' %
                    (clientip, request.get_full_path(), data))
        if not HasPermission(request.user, 'change', 'domains', 'detect'):
            return HttpResponseForbidden('你没有修改的权限。')
        info = domains.objects.get(id=data['id'])
        info.status = data['status']
        info.save()
        return HttpResponse('更新成功!')
    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #2
0
파일: domains.py 프로젝트: suzuke/phx_web
def DomainsAdd(request):
    if request.method == 'POST':
        clientip = getIp(request)
        datas = json.loads(request.body)
        logger.info('%s is requesting. %s datas: %s' %
                    (clientip, request.get_full_path(), datas))
        if not HasPermission(request.user, 'add', 'domains', 'detect'):
            return HttpResponseForbidden('你没有新增的权限。')

        group = groups.objects.get(id=datas['group'])
        exist = []
        for domain in datas['domain_l']:
            domain = domain.strip(' ')
            try:
                if domains.objects.get(name=domain):
                    exist.append(domain)
                    continue
            except:
                info = domains(
                    name=domain,
                    product=datas['product'],
                    customer=datas['customer'],
                    group=group,
                    content=datas['content'],
                    #cdn=[cdn_account_t.objects.get(id=id) for id in datas['cdn']],
                    status=datas['status'])
                logger.info(datas)
                info.save()
                for id in datas['cdn']:
                    info.cdn.add(cdn_account_t.objects.get(id=id))
                    info.save()
                if len(datas['cf']) != 0:
                    info.cf = cf_account.objects.get(id=datas['cf'][0])
                    info.save()
                #for id in datas['cf']:
                #    info.cf.add(cf_account.objects.get(id=id))
                #    info.save()
        if exist:
            return HttpResponse(str(exist) + '已存在,其余的新增成功!')
        else:
            return HttpResponse('新增成功!')
    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #3
0
파일: views.py 프로젝트: suzuke/phx_web
def GetSvnRecords(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %(clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        data = json.loads(request.body)

        logger.info('[POST]%s is requesting. %s' %(clientip, request.get_full_path()))

        try:
            svn_master = svn_master_t.objects.get(id=data['svn_master_id'])
        except Exception as e:
            error = "获取svn master 信息失败:"+str(e)
            logger.error(error)
            return HttpResponseServerError(error)
        
        if data['key'] == "fenghuang_zypfront":
            url      = svn_master.svn_frontcode_url
            user     = svn_master.svn_frontcode_u
            password = svn_master.svn_frontcode_p
        elif data['key'] == "fenghuang_zypfront2":
            url      = svn_master.svn_front2code_url
            user     = svn_master.svn_front2code_u
            password = svn_master.svn_front2code_p
        else:
            url      = svn_master.svn_code_url
            user     = svn_master.svn_code_u
            password = svn_master.svn_code_p

        svnapi = SvnApi(url, user, password)
        svn_records = svnapi.GetLog(limit=100)

        return HttpResponse(json.dumps(svn_records))
    else:
        return HttpResponse('nothing!')
예제 #4
0
def CurrentQuery(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        #if not username:
        #    logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %(clientip, request.get_full_path()))
        #    return HttpResponseServerError("用户名未知!")

        logger.info('[POST]%s is requesting. %s' %
                    (clientip, request.get_full_path()))

        record_list = []
        svn_records = svn_record_t.objects.all().order_by('-id')
        for record in svn_records:
            tmpdict = {
                'id':
                record.id,
                'revision':
                record.revision,
                'author':
                record.author,
                'date':
                record.date,
                'log':
                record.log,
                'changelist':
                record.changelist,
                'svn_gray':
                [customer.name for customer in record.svn_gray.all()],
                'svn_online':
                [customer.name for customer in record.svn_online.all()],
                'mod_date':
                record.mod_date.strftime('%Y/%m/%d %H:%M:%S'),
            }
            record_list.append(tmpdict)
        return HttpResponse(json.dumps(record_list))
    else:
        return HttpResponse('nothing!')
예제 #5
0
def refleshGetDomains(request):
    if request.method == 'POST':
        clientip = getIp(request)
        logger.info('%s is requesting. %s' %(clientip, request.get_full_path()))

        secretkey='c5QehaK1bQ9oKoDpOsNsiPvHSbdYQKB1'
        secretid='AKID75tX0ViCMVbcVJoqmbFjCfx35wNsshIs'
        req = tcApi(secretid, secretkey)
        results, status = req.getdomains()
        #secretkey='speedfeng@123'
        #secretid='speedfeng'
        #tcapi = wsApi(secretid, secretkey)
        #results, status= tcapi.getdomains()
        
        return HttpResponse(json.dumps(results))

    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #6
0
파일: views.py 프로젝트: suzuke/phx_web
def GetSvnCustomer(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        #if not username:
        #    logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %(clientip, request.get_full_path()))
        #    return HttpResponseServerError("用户名未知!")

        logger.info('[POST]%s is requesting. %s' %(clientip, request.get_full_path()))

        record_list = []
        svn_customers = project_t.objects.get(id=25).svn_customer.all()
        for svn_customer in svn_customers:
            tmpdict = {
                'name': svn_customer.name.strip(),
                'customer': (svn_customer.customer, svn_customer.get_customer_display()),
                'project': (svn_customer.project, svn_customer.get_project_display()),
                'master_ip': [ ip.replace(' ', '').replace('\r', '') for ip in svn_customer.master_ip.split('\n') if ip.replace(' ', '').replace('\r', '') != '' ],
                'port': svn_customer.port.strip(),
                'ip': [ ip.replace(' ', '').replace('\r', '') for ip in svn_customer.ip.split('\n') if ip.replace(' ', '').replace('\r', '') != '' ],
                'ismaster': True if svn_customer.ismaster == 1 else False,
                'isrsynccode': True if svn_customer.isrsynccode == 1 else False,
                'cmd': [ cmd.replace(' ', '').replace('\r', '') for cmd in svn_customer.cmd.split('\n') if cmd.replace(' ', '').replace('\r', '') != '' ],
                'gray_domain': svn_customer.gray_domain.strip(),
                'online_domain': svn_customer.online_domain.strip(),
                'src_d': svn_customer.src_d.strip(),
                'dst_d': svn_customer.dst_d.strip(),
                'info': svn_customer.info,
            }
            record_list.append(tmpdict)
        return HttpResponse(json.dumps(record_list))
    else:
        return HttpResponse('nothing!')
예제 #7
0
def reflesh(request):
    username = request.user.username
    try:
        role = request.user.userprofile.role
    except:
        role = 'none'
    try:
        manage = request.user.userprofile.manage
    except:
        manage = 0

    clientip = getIp(request)
    title = u'缓存清理'
    logger.info('%s is requesting. %s' % (clientip, request.get_full_path()))
    return render(
        request, 'saltstack/reflesh.html', {
            'clientip': clientip,
            'title': title,
            'role': role,
            'username': username,
            'manage': manage,
        })
예제 #8
0
def CurrentAdd(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        #if not username:
        #    logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %(clientip, request.get_full_path()))
        #    return HttpResponseServerError("用户名未知!")

        logger.info('[POST]%s is requesting. %s' %
                    (clientip, request.get_full_path()))

        try:
            data = json.loads(request.body)
            for record in data['records']:
                sr = svn_record_t(
                    revision=record['revision'],
                    author=record['author'],
                    date=record['date'],
                    log=record['log'],
                    changelist=record['changelist'],
                    mod_date=timeNow().now(),
                )
                sr.save()
        except Exception as e:
            error = 'failed: %s' % str(e)
            logger.error(error)
            return HttpResponseServerError(error)
        else:
            logger.info("insert svn record: %s. success!" % record['revision'])
            return HttpResponse('success.')
    else:
        return HttpResponse('nothing!')
예제 #9
0
def GetProjectActive(request):
    if request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'

        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        projects = getProjects(request, "execute")  #获取项目

        logger.info('%s is requesting %s' %
                    (clientip, request.get_full_path()))

        projectlist = []
        for project in projects:
            tmpdict = {}
            tmpdict['envir'] = project.get_envir_display()
            tmpdict['product'] = project.get_product_display()
            tmpdict['project'] = project.get_project_display()
            tmpdict['server_type'] = project.get_server_type_display()
            tmpdict['svn'] = project.svn
            tmpdict['minion_id'] = [
                minion.minion_id
                for minion in project.minion_id.filter(status=1).all()
            ]
            projectlist.append(tmpdict)
        #logger.info(projectlist)
        return HttpResponse(json.dumps(projectlist))
    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #10
0
def GetDnspodZoneRecords(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        logger.info('[POST]%s is requesting. %s' %
                    (clientip, request.get_full_path()))
        data = json.loads(request.body)['postdata']

        record_list = []
        for zone in data:
            dp_acc = dnspod_account.objects.get(name=zone['product'])

            try:
                dpapi = DpApi(DnsPod_URL, dp_acc.key)
            except Exception as e:
                logger.error("查询 %s 域名失败!%s" % (zone['name'], str(e)))
                return HttpResponseServerError("查询 %s 域名失败!" % zone['name'])
            else:
                result, status = dpapi.GetZoneRecords(zone['name'])
                if not status:
                    logger.error("查询 %s 域名失败!%s" % (zone['name'], str(result)))
                    return HttpResponseServerError('error!')
                else:
                    #logger.info(result)
                    for record in result['records']:

                        if record['type'] in ['A', 'CNAME']:
                            record_list.append({
                                'product':
                                zone['product'],
                                'zone':
                                zone['name'],
                                'zone_id':
                                zone['id'],
                                'sub_domain':
                                record['name'],
                                'name':
                                record['name'] + '.' + zone['name']
                                if record['name'] != '@' else zone['name'],
                                'type':
                                record['type'],
                                'value':
                                record['value'],
                                'record_id':
                                record['id'],
                                'record_line':
                                record['line'],
                                'record_line_id':
                                record['line_id'],
                                #'record_line_id': record['line_id'].replace('=', '%3D'),
                                'enabled':
                                record['enabled'],
                            })

        return HttpResponse(json.dumps(record_list))
    else:
        return HttpResponse('nothing!')
예제 #11
0
def UpdateDnspodRecords(request):
    if request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        logger.info('user:%s | [POST]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        data = json.loads(request.body)
        logger.info(data)

        for record in data:
            dp_acc = dnspod_account.objects.get(name=record['product'])
            #判断是否有权限
            if not HasDnsPermission(request, "dnspod", record['product'],
                                    "change"):
                return HttpResponseServerError("抱歉,您没有修改账号[%s]解析的权限!" %
                                               record['product'])

            try:
                dpapi = DpApi(DnsPod_URL, dp_acc.key)
            except Exception as e:
                logger.error("修改 %s 域名失败!" % record['name'])
                insert_ah(
                    clientip, username,
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    ('null', 'null', 'null', 'null'),
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (record['type'], record['name'], record['value'],
                     record['enabled']), False)
                return HttpResponseServerError("修改 %s 域名失败!" % record['name'])
            else:
                result, status = dpapi.UpdateZoneRecord(
                    domain=record['zone'],
                    record_id=record['record_id'],
                    sub_domain=record['sub_domain'],
                    record_type=record['type'],
                    value=record['value'],
                    record_line_id=record['record_line_id'],
                    status='enable' if record['enabled'] == '1' else 'disable',
                )

                if not status:
                    insert_ah(
                        clientip, username,
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        ('null', 'null', 'null', 'null'),
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        (record['type'], record['name'], record['value'],
                         record['enabled']), status)
                    return HttpResponseServerError('error!')

        return HttpResponse(result)
        insert_ah(
            clientip, username,
            "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
            ('null', 'null', 'null', 'null'),
            "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
            (record['type'], record['name'], record['value'],
             record['enabled']), status)

    elif request.is_websocket():
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            request.websocket.send('userNone')
            logger.info('user: 用户名未知 | [WS]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            ### close websocket ###
            request.websocket.close()

        logger.info('user:%s | [WS]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))

        for postdata in request.websocket:
            #logger.info(request.websocket.read())
            if not postdata:
                request.websocket.send("nothing")
                break
            data = json.loads(postdata)
            step = 0

            for record in data['records']:
                step += 1
                return_info = {}
                return_info['record'] = record
                return_info['step'] = step
                return_info['permission'] = True

                #判断是否有权限
                if not HasDnsPermission(request, "dnspod", record['product'],
                                        "change"):
                    return_info['permission'] = False
                    return_info['result'] = False
                    request.websocket.send(json.dumps(return_info))
                    continue

                dp_acc = dnspod_account.objects.get(name=record['product'])
                try:
                    dpapi = DpApi(DnsPod_URL, dp_acc.key)
                except Exception as e:
                    logger.error("修改 %s 域名失败!" % record['name'])
                    return_info['result'] = False
                else:
                    result, status = dpapi.UpdateZoneRecord(
                        domain=record['zone'],
                        record_id=record['record_id'],
                        sub_domain=record['sub_domain'],
                        record_type=data['type'],
                        value=data['value'],
                        record_line_id=record['record_line_id'],
                        status='enable'
                        if data['enabled'] == '1' else 'disable',
                    )

                    if not status:
                        return_info['result'] = False
                    else:
                        return_info['result'] = True

                insert_ah(
                    clientip, username,
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (record['type'], record['name'], record['value'],
                     record['enabled']),
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (data['type'], record['name'], data['value'],
                     data['enabled']), return_info['result'])

                request.websocket.send(json.dumps(return_info))
            #### close websocket ###
            #request.websocket.close()

    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #12
0
def CreateDnspodRecords(request):
    if request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        logger.info('user:%s | [POST]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        data = json.loads(request.body)

        #判断是否有权限
        if not HasDnsPermission(request, "dnspod", data['product'], "add"):
            return HttpResponseServerError("抱歉,您没有新增账号[%s]解析的权限!" %
                                           data['product'])

        for sub_domain in data['sub_domain']:
            dp_acc = dnspod_account.objects.get(name=data['product'])
            record_name = data[
                'zone'] if sub_domain == '@' else sub_domain + "." + data[
                    'zone']

            try:
                dpapi = DpApi(DnsPod_URL, dp_acc.key)
            except Exception as e:
                info = "新增 %s 域名失败!" % record_name
                logger.error(info)
                insert_ah(
                    clientip, username,
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    ('null', 'null', 'null', 'null'),
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (data['type'], record_name, data['value'], '1'), False,
                    'add')

                return HttpResponseServerError(info)
            else:
                result, status = dpapi.CreateZoneRecord(
                    domain=data['zone'],
                    sub_domain=sub_domain,
                    record_type=data['type'],
                    value=data['value'],
                    record_line=data['record_line'],
                    #status         = 'enable' if data['enabled'] == '1' else 'disable',
                )

                if not status:
                    insert_ah(
                        clientip, username,
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        ('null', 'null', 'null', 'null'),
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        (data['type'], sub_domain + '.' + data['zone'],
                         data['value'], '1'), status, 'add')
                    return HttpResponseServerError('error!')
            insert_ah(
                clientip, username,
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                ('null', 'null', 'null', 'null'),
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                (data['type'], sub_domain + '.' + data['zone'], data['value'],
                 '1'), status, 'add')
        return HttpResponse(json.dumps(result))

    elif request.is_websocket():
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            request.websocket.send('userNone')
            logger.info('user: 用户名未知 | [WS]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            ### close websocket ###
            request.websocket.close()

        logger.info('user:%s | [WS]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        for postdata in request.websocket:
            if not postdata:
                request.websocket.send("nothing")
                break
            data = json.loads(postdata)

            #判断是否有权限
            if not HasDnsPermission(request, "dnspod", data['product'], "add"):
                request.websocket.send('noPermission')
                ### close websocket ###
                request.websocket.close()
                break

            step = 0

            for sub_domain in data['sub_domain']:
                step += 1
                return_info = {}
                return_info['domain'] = sub_domain + '.' + data[
                    'zone'] if sub_domain != "@" else data['zone']
                return_info['step'] = step
                dp_acc = dnspod_account.objects.get(name=data['product'])
                try:
                    dpapi = DpApi(DnsPod_URL, dp_acc.key)
                except Exception as e:
                    logger.error("新增 %s 域名失败!" % return_info['domain'])
                    return_info['result'] = False
                else:
                    result, status = dpapi.CreateZoneRecord(
                        domain=data['zone'],
                        sub_domain=sub_domain,
                        record_type=data['type'],
                        value=data['value'],
                        record_line=data['record_line'],
                        #status         = 'enable' if data['enabled'] == '1' else 'disable',
                    )

                    if not status:
                        return_info['result'] = False
                    else:
                        return_info['result'] = True

                        insert_ah(
                            clientip, username,
                            "'type':%s, 'name': %s, 'content': %s, 'enabled':%s"
                            % ('null', 'null', 'null', 'null'),
                            "'type':%s, 'name': %s, 'content': %s, 'enabled':%s"
                            % (data['type'], return_info['domain'],
                               data['value'], '1'), status, 'add')

                request.websocket.send(json.dumps(return_info))
            ### close websocket ###
            #request.websocket.close()

    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #13
0
def CreateRecords(request):
    if request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        #if not username:
        #    logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %(clientip, request.get_full_path()))
        #    return HttpResponseServerError("用户名未知!")

        logger.info('user:%s | [POST]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        data = json.loads(request.body)

        #判断是否有权限
        #if not HasDnsPermission(request, "cf", data['product'], "add"):
        #    return HttpResponseServerError("抱歉,您没有新增账号[%s]解析的权限!" %data['product'])

        result_list = []
        for sub_domain in data['sub_domain']:
            cf_acc = cf_account.objects.get(name=data['product'])
            record_name = sub_domain + '.' + data[
                'zone'] if sub_domain != '@' else data['zone']

            try:
                cfapi = CfApi(CF_URL, cf_acc.email, cf_acc.key)
            except Exception as e:
                info = "新增 %s 域名失败: %s" % (record_name, str(e))
                logger.error(info)
                result = {'result': None, 'errors': str(e), 'success': False}
            else:
                result = cfapi.CreateZoneRecord(
                    zone_id=data['zone_id'],
                    record_name=record_name,
                    record_type=data['type'],
                    record_content=data['content'],
                    proxied=True
                    if data['proxied'].lower() == 'true' else False,
                )
            result_list.append(result)

            insert_ah(
                clientip, username, "null",
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                (data['type'], record_name, data['content'], '1'),
                result['success'], 'add')

            if not result['success']:
                return HttpResponseServerError(result_list)
        return HttpResponse(json.dumps(result_list))

    elif request.is_websocket():
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            request.websocket.send('userNone')
            logger.info('user: 用户名未知 | [WS]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            ### close websocket ###
            request.websocket.close()

        logger.info('user:%s | [WS]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        for postdata in request.websocket:
            if not postdata:
                ### close websocket ###
                request.websocket.close()
                break
            data = json.loads(postdata)

            #判断是否有权限
            if not HasDnsPermission(request, "cf", data['product'], "add"):
                request.websocket.send('noPermission')
                ### close websocket ###
                request.websocket.close()
                break

            step = 0

            for sub_domain in data['sub_domain']:
                step += 1
                return_info = {}
                return_info['domain'] = sub_domain + '.' + data[
                    'zone'] if sub_domain != "@" else data['zone']
                return_info['step'] = step
                cf_acc = cf_account.objects.get(name=data['product'])
                try:
                    cfapi = CfApi(CF_URL, cf_acc.email, cf_acc.key)
                except Exception as e:
                    logger.error("新增 %s 域名失败!" % return_info['domain'])
                    return_info['result'] = False
                else:
                    result = cfapi.CreateZoneRecord(
                        zone_id=data['zone_id'],
                        record_name=return_info['domain'],
                        record_type=data['type'],
                        record_content=data['content'],
                        proxied=True
                        if data['proxied'].lower() == 'true' else False,
                    )

                    return_info['result'] = result['success']

                insert_ah(
                    clientip, username, "null",
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (data['type'], sub_domain + '.' + data['zone'],
                     data['content'], '1'), return_info['result'], 'add')

                request.websocket.send(json.dumps(return_info))

            ### close websocket ###
            request.websocket.close()

    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #14
0
def UpdateServers(request):
    if request.is_websocket():
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            request.websocket.send('userNone')
            logger.info('user: 用户名未知 | [WS]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            ### close websocket ###
            request.websocket.close()

        logger.info('user:%s | [WS]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))

        for postdata in request.websocket:
            if not postdata:
                ### close websocket ###
                request.websocket.close()
                break
            data = json.loads(postdata)
            step = 0

            for record in data['records']:
                step += 1
                return_info = {}
                return_info['record'] = record
                return_info['step'] = step
                return_info['info'] = ""
                return_info['permission'] = True
                return_info['result'] = True

                #判断是否有权限
                if not HasServerPermission(request, record, "change"):
                    return_info['permission'] = False
                    return_info['result'] = False
                    request.websocket.send(json.dumps(return_info))
                    ### close websocket ###
                    request.websocket.close()
                    break

                #修改密码
                cmd = 'echo "%s" |passwd root --stdin' % data[
                    'password'].replace('`', '\`')  # `这个符号在Linux命令行有特殊含义,需要转义
                result = Command(record['minion_id'], 'cmd.run', cmd,
                                 'glob').CmdRun()[record['minion_id']]

                if 'all authentication tokens updated successfully' not in result:
                    return_info['result'] = False
                    return_info['info'] = result
                    request.websocket.send(json.dumps(return_info))
                    continue

                #密码加密并存放
                crypto, status = encryptPasswd(data['password'], record)
                if not status:
                    return_info['result'] = False
                    return_info['info'] = "密码修改成功,但是密码加密失败:" + result
                    message['text'] = "@arno\r\n" + return_info['info']
                    sendTelegram(message).send()
                    request.websocket.send(json.dumps(return_info))
                    continue
                try:
                    update = minion_t.objects.get(
                        minion_id=record['minion_id'])
                    update.password = crypto
                    update.save()
                except Exception as e:
                    sendTelegram(message).send()
                    return_info['result'] = False
                    return_info['info'] = "密码修改成功,但是密码存入失败:" + str(e)
                    message['text'] = "@arno\r\n" + return_info['info']
                    sendTelegram(message).send()
                    request.websocket.send(json.dumps(return_info))
                    continue

                request.websocket.send(json.dumps(return_info))
            ### close websocket ###
            request.websocket.close()

    else:
        return HttpResponseForbidden('nothing!')
예제 #15
0
def Index(request):
    title = u'服务器-列表'
    clientip = getIp(request)
    username = request.user.username
    try:
        role = request.user.userprofile.role
    except:
        role = 'none'

    if not username:
        logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                    (clientip, request.get_full_path()))
        return HttpResponseServerError("用户名未知!")

    projects = getProjects(request, "read")  #获取项目

    logger.info('%s is requesting %s' % (clientip, request.get_full_path()))

    items = {
        'item': [],
        'envir': [],
        'product': [],
        'project': [],
        'customer': [],
        'server_type': [],
    }

    #projects = project_t.objects.all()
    for project in projects:
        items['envir'].append((project.envir, project.get_envir_display()))
        items['item'].append(('_'.join([
            str(project.envir),
            str(project.product),
            str(project.project),
            str(project.server_type)
        ]), '_'.join([
            project.get_envir_display(),
            project.get_product_display(),
            project.get_project_display(),
            project.get_server_type_display()
        ])))
        items['product'].append(
            (project.product, project.get_product_display())),
        items['project'].append(
            (project.project, project.get_project_display())),
        items['customer'].append(
            (project.customer, project.get_customer_display())),
        items['server_type'].append(
            (project.server_type, project.get_server_type_display())),
    items['envir'] = list(set(items['envir']))
    items['product'] = list(set(items['product']))
    items['project'] = list(set(items['project']))
    items['customer'] = list(set(items['customer']))
    items['server_type'] = list(set(items['server_type']))

    return render(
        request, 'servers/index.html', {
            'title': title,
            'clientip': clientip,
            'role': role,
            'username': username,
            'items': items,
        })
예제 #16
0
def refleshGetProject(request):
    if request.method == 'POST':
        clientip = getIp(request)
        logger.info('%s is requesting. %s' %
                    (clientip, request.get_full_path()))

        data = {'cdn_proj': [], 'cdn': []}
        cdn_projs = cdn_proj_t.objects.all()
        cdns = cdn_t.objects.all()
        for prot in cdn_projs:
            tmpdict = {}
            tmpdict['project'] = prot.get_project_display()
            tmpdict['domain'] = [{
                'id':
                domain.id,
                'name':
                urlparse.urlsplit(domain.name).scheme + "://" +
                urlparse.urlsplit(domain.name).netloc,
                'product':
                domain.get_product_display(),
                'customer':
                domain.get_customer_display()
            } for domain in prot.domain.all()]
            #tmpdict['cdn']     = [ {'name': cdn.get_name_display(),
            #                        'account': cdn.account} for cdn in cdn_t.objects.all() ]
            data['cdn_proj'].append(tmpdict)
        for cdn in cdns:
            tmpdict = {
                'id': cdn.id,
                'name': cdn.get_name_display(),
                'account': cdn.account,
                'domain': [],
            }
            if cdn.get_name_display() == "tencent":
                req = tcApi(cdn.secretid, cdn.secretkey)
                results, status = req.getdomains()
                for line in results['data']['hosts']:
                    if line['disabled'] == 0 and line['status'] in [3, 4, 5]:
                        tmpdict['domain'].append({
                            'name':
                            line['host'],
                            'ssl':
                            1 if line['ssl_type'] != 0 else 0,
                        })
            elif cdn.get_name_display() == "wangsu":
                req = wsApi(cdn.secretid, cdn.secretkey)
                results, status = req.getdomains()
                for line in results:
                    if line['enabled'] == 'true':
                        tmpdict['domain'].append({
                            'name':
                            line['domain-name'],
                            'ssl':
                            1 if line['service-type'] == 'web-https' else 0,
                        })
            else:
                tmpdict['domain'] = []

            data['cdn'].append(tmpdict)

        return HttpResponse(json.dumps(data))

    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #17
0
def DomainsQuery(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        logger.info('[POST]%s is requesting. %s' %
                    (clientip, request.get_full_path()))
        try:
            data = json.loads(request.body)
            status = list(data['status']) if data.has_key('status') else None
            num = int(data['num']) if data.has_key('num') and str(
                data['num']).lower() != 'all' else None
            group = data['group'] if data.has_key('group') else []
            product = data['product'] if data.has_key('product') else []
            customer = data['customer'] if data.has_key('customer') else []
            cdn = data['cdn'] if data.has_key('cdn') else []
            cf = data['cf'] if data.has_key('cf') else []
            #logger.info(data)
        except:
            status = None
        if status:
            domains_ft = domains.objects.filter(status__in=status,
                                                group__id__in=group,
                                                product__in=product,
                                                customer__in=customer)
            if len(cdn) != 0:
                domains_ft = domains_ft.filter(cdn__in=cdn)
            if len(cf) != 0:
                domains_ft = domains_ft.filter(cf__in=cf)
            datas = domains_ft.all().order_by('-id')[:num]

            #if len(cdn) == 0:
            #    datas = domains.objects.filter(status__in=status, group__id__in=group, product__in=product, customer__in=customer).all().order_by('-id')[:num]
            #else:
            #    datas = domains.objects.filter(status__in=status, group__id__in=group, product__in=product, customer__in=customer, cdn__in=cdn, cf__in=cf).all().order_by('-id')[:num]
        else:
            return HttpResponseServerError(u"参数错误!")

        logger.info(u'查询参数:%s' % data)
        domain_list = []
        for domain in list(set(datas)):
            tmp_dict = {}
            tmp_dict['id'] = domain.id
            tmp_dict['name'] = domain.name
            tmp_dict['product'] = domain.get_product_display()
            tmp_dict['customer'] = domain.get_customer_display()
            tmp_dict['group'] = domain.group.group
            tmp_dict['content'] = domain.content
            tmp_dict['status'] = domain.status
            tmp_dict['cdn'] = [{
                'id': cdn.id,
                'name': cdn.get_name_display(),
                'account': cdn.account,
            } for cdn in domain.cdn.all()]
            tmp_dict['cf'] = [{
                'id': cf.id,
                'name': "cloudflare",
                'account': cf.name,
            } for cf in domain.cf.all()]

            domain_list.append(tmp_dict)
        #logger.info(domain_list)
        domain_list.sort(key=takeId, reverse=True)  #以ID 倒序排序
        return HttpResponse(json.dumps(domain_list))
    else:
        return HttpResponse('nothing!')
예제 #18
0
def UpdateDnspodRecords(request):
    if request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        logger.info('user:%s | [POST]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        data = json.loads(request.body)
        logger.info(data)

        for record in data:
            dp_acc = dnspod_account.objects.get(name=record['product'])
            #判断是否有权限
            if not HasDnsPermission(request, "dnspod", record['product'],
                                    "change"):
                return HttpResponseServerError("抱歉,您没有修改账号[%s]解析的权限!" %
                                               record['product'])

            try:
                dpapi = DpApi(DnsPod_URL, dp_acc.key)
            except Exception, e:
                logger.error("修改 %s 域名失败!" % record['name'])
                insert_ah(
                    clientip, username,
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    ('null', 'null', 'null', 'null'),
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (record['type'], record['name'], record['value'],
                     record['enabled']), False)
                return HttpResponseServerError("修改 %s 域名失败!" % record['name'])
            else:
                result, status = dpapi.UpdateZoneRecord(
                    domain=record['zone'],
                    record_id=record['record_id'],
                    sub_domain=record['sub_domain'],
                    record_type=record['type'],
                    value=record['value'],
                    record_line_id=record['record_line_id'],
                    status='enable' if record['enabled'] == '1' else 'disable',
                )

                if not status:
                    insert_ah(
                        clientip, username,
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        ('null', 'null', 'null', 'null'),
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        (record['type'], record['name'], record['value'],
                         record['enabled']), status)
                    return HttpResponseServerError('error!')

        return HttpResponse(result)
        insert_ah(
            clientip, username,
            "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
            ('null', 'null', 'null', 'null'),
            "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
            (record['type'], record['name'], record['value'],
             record['enabled']), status)
예제 #19
0
파일: views.py 프로젝트: suzuke/phx_web
def remoteExe(request):
    title = u'升级中心-远程执行'
    clientip = getIp(request)
    username = request.user.username
    try:
        role = request.user.userprofile.role
    except:
        role = 'none'

    if not username:
        logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %(clientip, request.get_full_path()))
        return HttpResponseServerError("用户名未知!")
    
    logger.info('%s is requesting %s' %(clientip, request.get_full_path()))

    projects = getProjects(request, 'execute') #用户必须具有执行权限才能升级

    items = []
    for project in projects:
        if project.svn_mst_alive == 0: continue
        if project.project != "caipiao": continue
        svn_customer_together = [ svn_customer.replace(' ', '') for svn_customer in project.svn_customer_together.split('\r\n') if svn_customer.strip() != "" ] if project.svn_customer_together else []
        svn_customer_single   = []
        svn_customer_all      = []
        svn_customer_tmp      = []

        for rec in svn_customer_together:
            for i in rec.strip().split(','):
                if i.strip() != '': svn_customer_tmp.append(i.strip())

        for rec in project.svn_customer.all():
            name = rec.name.replace(' ', '')
            tmpdict = {
                'id': rec.id,
                'name': name,
                'isrsynccode': rec.isrsynccode,
            }
            svn_customer_all.append(tmpdict)
            #if rec.isrsynccode == 0: continue
            if name not in svn_customer_tmp:
                    svn_customer_single.append(name)

        tmpdict = {
            'id':       project.id,
            'envir':    (project.envir, project.get_envir_display()),
            'product':  (project.product, project.get_product_display()),
            'project':  (project.project, project.get_project_display()),
            'customer': (project.customer, project.get_customer_display()),
            'server_type': (project.server_type, project.get_server_type_display()),
            'info':     project.info,
            'svn_master':  {
                'id':         project.svn_master.id,
                'name':       project.svn_master.name,
                'minion_id':  project.svn_master.minion_id.minion_id,
                'api':        project.svn_master.api,
                'gray_env':   [cmd.strip() for cmd in project.svn_master.gray_env.split('\r\n') if cmd.strip() != "" ],
                'online_env': [cmd.strip() for cmd in project.svn_master.online_env.split('\r\n') if cmd.strip() != "" ],
                'rollback':   [cmd.strip() for cmd in project.svn_master.rollback.split('\r\n') if cmd.strip() != "" ],
            },
            'svn_customer': {
                'in': svn_customer_all,
                'ex': svn_customer_single + svn_customer_together,
            },

        }

        items.append(tmpdict)

    return render(
        request,
        'upgrade/remote_exe.html',
        {
            'title':    title,
            'clientip': clientip,
            'role':     role,
            'username': username,
            'items':    json.dumps(items),
        }
    )
예제 #20
0
                        ('null', 'null', 'null', 'null'),
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        (data['type'], sub_domain + '.' + data['zone'],
                         data['value'], '1'), status, 'add')
                    return HttpResponseServerError('error!')
            insert_ah(
                clientip, username,
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                ('null', 'null', 'null', 'null'),
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                (data['type'], sub_domain + '.' + data['zone'], data['value'],
                 '1'), status, 'add')
        return HttpResponse(json.dumps(result))

    elif request.is_websocket():
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            request.websocket.send('userNone')
            logger.info('user: 用户名未知 | [WS]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            ### close websocket ###
            request.websocket.close()

        logger.info('user:%s | [WS]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        for postdata in request.websocket:
예제 #21
0
def refleshPurge(request):
    if request.method == 'POST':
        clientip = getIp(request)
        cdn_d = {}
        info = {'failed': [], 'sccess': []}
        data = json.loads(request.body)
        logger.info('%s is requesting. %s 执行参数:%s' %
                    (clientip, request.get_full_path(), data))
        cdns = cdn_t.objects.all()
        for cdn in cdns:
            cdn_d[cdn.get_name_display() + "_" + cdn.account] = {
                'name': cdn.get_name_display(),
                'domain': [],
                'secretid': str(cdn.secretid),
                'secretkey': str(cdn.secretkey),
                'failed': [],
                'sccess': [],
            }

        #按照项目进行缓存清理
        #cdn_proj_l = cdn_proj_t.objects.filter(project__in = data['cdn_proj']).all()
        #for cdn_proj in cdn_proj_l:
        #    for domain in cdn_proj.domain.all():
        #        for cdn in domain.cdn.all():
        #            cdn_d[cdn.get_name_display()+"_"+cdn.account]['domain'].append(urlparse.urlsplit(domain.name).scheme+"://"+urlparse.urlsplit(domain.name).netloc)

        try:
            if 'cdn_proj' in data.keys():
                cdn_proj_l = cdn_proj_t.objects.filter(
                    project__in=data['cdn_proj']).all()
                for cdn_proj in cdn_proj_l:
                    for domain in cdn_proj.domain.all():
                        for cdn in domain.cdn.all():
                            cdn_d[cdn.get_name_display() + "_" +
                                  cdn.account]['domain'].append(
                                      urlparse.urlsplit(domain.name).scheme +
                                      "://" +
                                      urlparse.urlsplit(domain.name).netloc)
            else:

                for name in data['domain']:
                    #name = domain if urlparse.urlsplit(domain).netloc == "" else urlparse.urlsplit(domain).netloc
                    domain_s = domains.objects.filter(
                        name__icontains=name.rstrip("/"), status=1).first()
                    for cdn in domain_s.cdn.all():
                        cdn_d[cdn.get_name_display() + "_" +
                              cdn.account]['domain'].append(
                                  urlparse.urlsplit(domain_s.name).scheme +
                                  "://" +
                                  urlparse.urlsplit(domain_s.name).netloc)
                if not isinstance(data['uri'], list):
                    return HttpResponseServerError("uri错误!")

        except Exception as e:
            logger.error("执行清缓存失败: %s" % str(e))
            return HttpResponseServerError("执行清缓存失败: %s" % str(e))

        for cdn in cdn_d:
            info['cdn'] = cdn
            if cdn_d[cdn]['domain']:
                #开始清缓存,判断CDN接口是否存在
                if cdn_d[cdn]['name'] == "tencent":
                    req = tcApi(cdn_d[cdn]['secretid'],
                                cdn_d[cdn]['secretkey'])
                elif cdn_d[cdn]['name'] == "wangsu":
                    req = wsApi(cdn_d[cdn]['secretid'],
                                cdn_d[cdn]['secretkey'])
                else:
                    cdn_d[cdn]['failed'].append("%s: 接口不存在!" % cdn)
                    continue

                while len(cdn_d[cdn]['domain']) != 0:
                    domains_c = cdn_d[cdn]['domain'][:10]
                    cdn_d[cdn]['domain'] = cdn_d[cdn]['domain'][10:]

                    for uri in data['uri']:
                        result, status = req.purge(domains_c, uri)
                        if status:
                            cdn_d[cdn]['sccess'] += [
                                domain + uri for domain in domains_c
                            ]
                        else:
                            cdn_d[cdn]['failed'] += [
                                domain + uri for domain in domains_c
                            ]
        for cdn in cdn_d:
            if cdn_d[cdn]['failed']:
                message["text"] = cdn_d[cdn]['failed']
                message['caption'] = cdn + ': 域名缓存清理失败!'
                sendTelegramRe(message)
            if cdn_d[cdn]['sccess']:
                message["text"] = cdn_d[cdn]['sccess']
                message['caption'] = cdn + ': 域名缓存清理成功。'
                sendTelegramRe(message)

        return HttpResponse('success!')
    elif request.method == 'GET':
        return HttpResponse('You get nothing!')
    else:
        return HttpResponse('nothing!')
예제 #22
0
def GetServersRecords(request):
    if request.method == 'GET':
        return HttpResponse('You get nothing!')
    elif request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")
        logger.info('[POST]%s is requesting. %s' %
                    (clientip, request.get_full_path()))

        projects = []

        try:
            data = json.loads(request.body)
            logger.info(data)

            try:
                projects = getProjects(request, "read", data)  #获取项目
                #authoritys = request.user.userprofile.servers.filter(read=1).all()
                #for authority in authoritys:
                #    projects += [ project for project in authority.project.all().order_by('product')]
            except:
                projects = []

            #projects = project_t.objects.filter(envir__in=data['envir'], product__in=data['product'], project__in=data['project'], customer__in=data['customer'], server_type__in=data['server_type']).all().order_by('product')
            #authoritys = request.user.userprofile.servers.filter(read=1).all()
            #for authority in authoritys:
            #    projects += [ project for project in authority.project.filter(envir__in=data['envir'], product__in=data['product'], project__in=data['project'], customer__in=data['customer'], server_type__in=data['server_type']).all().order_by('product')]
        except Exception as e:
            logger.error(str(e))
            projects = []

        servers_list = []
        return_list = []

        for project in projects:  #将项目数据循环获取
            if project.status == 0:
                continue  #禁用的项目不做展示

            tmp_dict = {
                'project_id':
                project.id,
                'envir': (project.envir, project.get_envir_display()),
                'product': (project.product, project.get_product_display()),
                'project': (project.project, project.get_project_display()),
                'customer': (project.customer, project.get_customer_display()),
                'server_type':
                (project.server_type, project.get_server_type_display()),
                'password':
                decryptPasswd(request, project, project.password),
                'user':
                project.user,
                'port':
                project.port,
                'role':
                project.role,
                'url':
                project.url,
                'info':
                project.info,
                'minions': [],
            }

            for minion in project.minion_id.all():  #将服务器属性数据循环获取
                if minion.status == 0:
                    continue  #禁用的服务器不做展示

                ips = minion_ip_t.objects.filter(
                    minion_id=minion.minion_id).all()

                minion_tmp_dict = {
                    'minion_id': minion.minion_id,
                    'system': minion.system,
                    'user': minion.user,
                    'port': minion.port,
                    'service_type': minion.get_service_type_display(),
                    'password': decryptPasswd(request, project,
                                              minion.password),
                    'price': minion.price,
                    'provider': minion.get_provider_display(),
                    'info': minion.info,
                    'ip': [i.ip_addr for i in ips if i.status != 0]
                }

                #ip 刷选
                try:
                    data = json.loads(request.body)
                    ips = data['ips']
                except:
                    tmp_dict['minions'].append(minion_tmp_dict)
                else:
                    if len(ips) != 0:
                        for ip in ips:
                            if isStrinList(ip, minion_tmp_dict['ip']):
                                tmp_dict['minions'].append(minion_tmp_dict)
                                break
                    else:
                        tmp_dict['minions'].append(minion_tmp_dict)

            servers_list.append(tmp_dict)

        response = HttpResponse(json.dumps(servers_list))
        setCookies(request, response, setcookieV)

        return response
    else:
        return HttpResponse('nothing!')
예제 #23
0
def CreateDnspodRecords(request):
    if request.method == 'POST':
        clientip = getIp(request)
        username = request.user.username
        try:
            role = request.user.userprofile.role
        except:
            role = 'none'
        if not username:
            logger.info('user: 用户名未知 | [POST]%s is requesting. %s' %
                        (clientip, request.get_full_path()))
            return HttpResponseServerError("用户名未知!")

        logger.info('user:%s | [POST]%s is requesting. %s' %
                    (username, clientip, request.get_full_path()))
        data = json.loads(request.body)

        #判断是否有权限
        if not HasDnsPermission(request, "dnspod", data['product'], "add"):
            return HttpResponseServerError("抱歉,您没有新增账号[%s]解析的权限!" %
                                           data['product'])

        for sub_domain in data['sub_domain']:
            dp_acc = dnspod_account.objects.get(name=data['product'])
            record_name = data[
                'zone'] if sub_domain == '@' else sub_domain + "." + data[
                    'zone']

            try:
                dpapi = DpApi(DnsPod_URL, dp_acc.key)
            except Exception, e:
                info = "新增 %s 域名失败!" % record_name
                logger.error(info)
                insert_ah(
                    clientip, username,
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    ('null', 'null', 'null', 'null'),
                    "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                    (data['type'], record_name, data['value'], '1'), False,
                    'add')

                return HttpResponseServerError(info)
            else:
                result, status = dpapi.CreateZoneRecord(
                    domain=data['zone'],
                    sub_domain=sub_domain,
                    record_type=data['type'],
                    value=data['value'],
                    record_line=data['record_line'],
                    #status         = 'enable' if data['enabled'] == '1' else 'disable',
                )

                if not status:
                    insert_ah(
                        clientip, username,
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        ('null', 'null', 'null', 'null'),
                        "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                        (data['type'], sub_domain + '.' + data['zone'],
                         data['value'], '1'), status, 'add')
                    return HttpResponseServerError('error!')
            insert_ah(
                clientip, username,
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                ('null', 'null', 'null', 'null'),
                "'type':%s, 'name': %s, 'content': %s, 'enabled':%s" %
                (data['type'], sub_domain + '.' + data['zone'], data['value'],
                 '1'), status, 'add')
        return HttpResponse(json.dumps(result))
예제 #24
0
def refleshExecuteCdn(request):
    username = request.user.username
    try:
        role = request.user.userprofile.role
    except:
        role = 'none'
    clientip = getIp(request)

    if request.is_websocket():
        for postdata in request.websocket:
            data = json.loads(postdata)
            logger.info('%s is requesting. %s 执行参数:%s' %
                        (clientip, request.get_full_path(), data))
            ### step one ##
            info = {}
            info['step'] = 'one'
            request.websocket.send(json.dumps(info))
            #time.sleep(2)
            ### two step ###
            info['step'] = 'two'
            cdn_d = {}
            cdn = cdn_t.objects.get(id=data['id'])
            cdn_d[cdn.get_name_display() + "_" + cdn.account] = {
                'name': cdn.get_name_display(),
                'domain': data['domain'],
                'secretid': str(cdn.secretid),
                'secretkey': str(cdn.secretkey),
                'failed': [],
                'sccess': [],
            }

            #logger.info(cdn_d)
            for cdn in cdn_d:
                info['cdn'] = cdn
                if cdn_d[cdn]['domain']:
                    #开始清缓存,判断CDN接口是否存在
                    if cdn_d[cdn]['name'] == "tencent":
                        req = tcApi(cdn_d[cdn]['secretid'],
                                    cdn_d[cdn]['secretkey'])
                    elif cdn_d[cdn]['name'] == "wangsu":
                        req = wsApi(cdn_d[cdn]['secretid'],
                                    cdn_d[cdn]['secretkey'])
                    else:
                        info['result'] = ["CDN 接口不存在!"]
                        cdn_d[cdn]['failed'].append("%s: 接口不存在!" % cdn)
                        request.websocket.send(json.dumps(info))
                        continue

                    while len(cdn_d[cdn]['domain']) != 0:
                        domains_c = cdn_d[cdn]['domain'][:10]
                        cdn_d[cdn]['domain'] = cdn_d[cdn]['domain'][10:]

                        for uri in data['uri']:
                            result, status = req.purge(domains_c, uri)
                            if status:
                                info['result'] = [
                                    domain + uri + ": 清缓存成功。"
                                    for domain in domains_c
                                ]
                                cdn_d[cdn]['sccess'] += [
                                    domain + uri for domain in domains_c
                                ]
                            else:
                                info['result'] = [
                                    domain + uri + ": 清缓存失败!"
                                    for domain in domains_c
                                ]
                                cdn_d[cdn]['failed'] += [
                                    domain + uri for domain in domains_c
                                ]
                            request.websocket.send(json.dumps(info))
            info['step'] = 'final'
            request.websocket.send(json.dumps(info))
            for cdn in cdn_d:
                if cdn_d[cdn]['failed']:
                    message["text"] = cdn_d[cdn]['failed']
                    message['caption'] = cdn + ': 域名缓存清理失败!'
                    sendTelegramRe(message)
                if cdn_d[cdn]['sccess']:
                    message["text"] = cdn_d[cdn]['sccess']
                    message['caption'] = cdn + ': 域名缓存清理成功。'
                    sendTelegramRe(message)
            break
            ### close websocket ###
            request.websocket.close()

    else:
        return HttpResponse('nothing!', status=500)