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!')
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!')
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!')
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!')
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!')
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!')
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, })
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!')
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!')
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!')
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!')
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!')
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!')
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!')
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, })
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!')
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!')
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)
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), } )
('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:
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!')
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!')
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))
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)