def post(self): """Create new view.""" args = dns_view_common_parser.parse_args() unique_view = DBView.query.filter_by(name=args['name']).first() if unique_view: return get_response(RequestCode.OTHER_FAILED, '创建失败!重复的View, 相同的名字的View已存在!!') new_view = DBView(**args) db.session.add(new_view) db.session.flush() log = DBOperationLog(operation_type='添加', operator=g.current_user.username, target_type='View', target_name=new_view.name, target_id=int(new_view.id), target_detail=new_view.get_content_str()) db.session.add(log) try: self._add_privilege_for_view(new_view) view_list = db.session.query(DBView).all() new_view.make_view('create', view_list) db.session.commit() except Exception as e: db.session.rollback() return get_response(RequestCode.OTHER_FAILED, "{e}".format(e=str(e))) return get_response(RequestCode.SUCCESS, '创建成功!')
def _update_zone(self, current_zone, args): pre_views = current_zone.view_name_list log = DBOperationLog( operation_type='修改', operator=g.current_user.username, target_type='Zone', target_name=current_zone.name, target_id=int(current_zone.id), target_detail=current_zone.get_content_str(prefix="修改前:")) db.session.add(log) if args['zone_type'] == 'forward only': current_zone.forwarders = '; '.join( [ip.strip() for ip in args['forwarders'].strip().split()]) \ + ';' current_zone.name = args['name'] current_zone.zone_group = args['zone_group'] current_zone.zone_type = args['zone_type'] db.session.add(current_zone) current_view_zones = DBViewZone.query.filter( DBViewZone.zone_id == current_zone.id).all() for cvz in current_view_zones: db.session.delete(cvz) for view_id in args['view_ids']: vz = DBViewZone(zone_id=current_zone.id, view_id=int(view_id)) db.session.add(vz) db.session.flush() current_zone.modify(pre_views)
def _delete_server(self, server): log = DBOperationLog(operation_type='删除', operator=g.current_user.username, target_type='Server', target_name=server.host, target_id=int(server.id), target_detail=server.get_content_str()) db.session.add(log) self._remove_server_privileges(server) db.session.delete(server)
def _delete_record(self, current_zone, current_record): log = DBOperationLog(operation_type='删除', operator=g.current_user.username, target_type='Record', target_name=current_record.host, target_id=int(current_record.id), target_detail=current_record.get_content_str()) db.session.add(log) db.session.delete(current_record) current_record.delete(current_zone)
def _delete_view(self, view): log = DBOperationLog(operation_type='删除', operator=g.current_user.username, target_type='View', target_name=view.name, target_id=int(view.id), target_detail=view.get_content_str(prefix="修改前:")) db.session.add(log) db.session.delete(view) view_list = db.session.query(DBView).all() view.make_view('del', view_list)
def _delete_zone(self, current_zone): log = DBOperationLog( operation_type='删除', operator=g.current_user.username, target_type='Zone', target_name=current_zone.name, target_id=int(current_zone.id), target_detail=current_zone.get_content_str(prefix="修改前:")) db.session.add(log) current_zone.delete() DBViewZone.query.filter(DBViewZone.zone_id == current_zone.id).delete() DBRecord.query.filter(DBRecord.zone_id == current_zone.id).delete() db.session.delete(current_zone)
def post(self): """Create new record.""" args = dns_record_common_parser.parse_args() current_zone = DBZone.query.get(args['zone_id']) if not current_zone: return get_response(RequestCode.OTHER_FAILED, '创建失败!当前Zone不存在,请检查zone_id是否正确!') if not g.current_user.can_do(Operation.ACCESS, ResourceType.ZONE, current_zone.id): return get_response(RequestCode.OTHER_FAILED, '无权限!您无权限在当前Zone下添加Record!') args['creator'] = g.current_user.username if 'default' == args['view_name']: v_name_list = current_zone.view_name_list else: v_name_list = [args['view_name']] unique_record = DBRecord.query.filter( DBRecord.zone_id == args['zone_id'], DBRecord.host == args['host'], DBRecord.view_name.in_(v_name_list)).first() if unique_record: return get_response( RequestCode.OTHER_FAILED, '创建失败 !重复的记录!!同样的Zone,同样的主机,\ 同样的View 的记录只能存在一个。') # print(v_name_list) for v_name in v_name_list: new_record = DBRecord(host=args['host'], record_type=args['record_type'], ttl=args['ttl'], value=args['value'], view_name=v_name, comment=args['comment'], zone_id=current_zone.id) db.session.add(new_record) db.session.flush() log = DBOperationLog(operation_type='添加', operator=args['creator'], target_type='Record', target_name=new_record.host, target_id=int(new_record.id), target_detail=new_record.get_content_str()) db.session.add(log) try: new_record.create(current_zone, args, v_name) db.session.commit() except Exception as e: db.session.rollback() return get_response(RequestCode.OTHER_FAILED, "{e}".format(e=str(e))) return get_response(RequestCode.SUCCESS, '创建成功!')
def _update_view(self, view, args): log = DBOperationLog( operation_type='修改', operator=g.current_user.username, target_type='View', target_name=view.name, \ target_id=int(view.id), target_detail=view.get_content_str(prefix="修改前:") ) db.session.add(log) view.name = args['name'] view.acl = args['acl'] db.session.add(view) view_list = db.session.query(DBView).all() view.make_view('modify', view_list)
def post(self): """Create new zone.""" args = dns_zone_common_parser.parse_args() zone_group = args['zone_group'] if zone_group in (1, 2): view_ids = args['view_ids'] unique_zone = db.session.query(DBZone).filter( and_(DBZone.name == args['name'].strip(), DBZone.zone_group.in_((1, 2)))).first() if unique_zone: return get_response( RequestCode.OTHER_FAILED, '创建失败!重复的Zone!!相同名字的Zone,\ 每种类型域名下只能存在一个!') if args['zone_type'] == 'forward only': args['forwarders'] = '; '.join( [ip.strip() for ip in args['forwarders'].strip().split()]) + ';' del args['view_ids'] new_zone = DBZone(**args) db.session.add(new_zone) db.session.flush() for view_id in view_ids: v = DBViewZone(view_id=int(view_id), zone_id=new_zone.id) db.session.add(v) elif zone_group == 0: new_zone = DBZone(name=args['name'], zone_group=zone_group) db.session.add(new_zone) db.session.flush() log = DBOperationLog( operation_type='添加', operator=g.current_user.username, target_type='Zone', target_name=new_zone.name, \ target_id=int(new_zone.id), target_detail=new_zone.get_content_str() ) db.session.add(log) try: new_zone.create() self._add_privilege_for_zone(new_zone) db.session.commit() except Exception as e: db.session.rollback() return get_response(RequestCode.OTHER_FAILED, "{e}".format(e=str(e))) return get_response(RequestCode.SUCCESS, '创建成功!')
def _update_server(self, server, args): log = DBOperationLog( operation_type='修改', operator=g.current_user.username, target_type='Server', target_name=server.host, target_id=int(server.id), target_detail=server.get_content_str(prefix="修改前:")) db.session.add(log) server.host = args['host'] server.ip = args['ip'] server.env = args['env'] server.dns_server_type = args['dns_server_type'] server.zb_process_itemid = args['zb_process_itemid'] server.zb_port_itemid = args['zb_port_itemid'] server.zb_resolve_itemid = args['zb_resolve_itemid'] server.zb_resolve_rate_itemid = args['zb_resolve_rate_itemid'] db.session.add(server)
def _update_record(self, current_zone, current_record, args): current_record.host = args['host'] current_record.record_type = args['record_type'] current_record.ttl = args['ttl'] current_record.value = args['value'] current_record.view_name = args['view_name'] current_record.comment = args['comment'] current_record.zone_id = args['zone_id'] current_record.gmt_modified = datetime.now() db.session.add(current_record) log = DBOperationLog(operation_type='修改', operator=g.current_user.username, target_type='Record', target_name=current_record.host, target_id=int(current_record.id), target_detail=current_record.get_content_str()) db.session.add(log) current_record.update(current_zone, args)
def post(self): """Create new server.""" args = dns_server_common_parser.parse_args() unique_server = db.session.query(DBDNSServer).filter( or_(DBDNSServer.host == args['host'], DBDNSServer.ip == args['ip'])).all() if unique_server: return get_response(RequestCode.OTHER_FAILED, '创建失败! 重复的Server,相同Host或IP地址已存在!') new_server = DBDNSServer(**args) db.session.add(new_server) db.session.flush() self._add_privilege_for_server(new_server) log = DBOperationLog(operation_type='添加', operator=g.current_user.username, target_type='Server', target_name=new_server.host, target_id=int(new_server.id), target_detail=new_server.get_content_str()) db.session.add(log) db.session.commit() return get_response(RequestCode.SUCCESS, '创建成功!')
def post(self): """ 功能:创建新的Zone --- security: - UserSecurity: [] tags: - Zone definitions: Zone_Parm: properties: name: type: string default: p123 description: zone name zone_group: type: integer default: 1 description: the group of the zone, 0=外部域名,1=内部域名,2=劫持域名 zone_type: type: string default: master description: the type of zone enum: ['master', 'forward only'] forwarders: type: integer default: 0.0.0.0 description: the forwarders' ip when zone_type value is 'forward only' view_ids: type: array description: the id of views which the zone will be related to. items: type: integer parameters: - in: body name: body schema: id: Add_Zone required: - name $ref: "#/definitions/Zone_Parm" responses: 200: description: 请求结果 schema: properties: code: type: integer description: response code msg: type: string description: response message data: type: string examples: { "code": 100000, "msg": "添加成功", "data": null } """ args = dns_zone_common_parser.parse_args() zone_group = args['zone_group'] if zone_group in (1, 2): view_ids = args['view_ids'] unique_zone = db.session.query(DBZone).filter( and_(DBZone.name == args['name'].strip(), DBZone.zone_group.in_((1, 2)))).first() if unique_zone: return get_response( RequestCode.OTHER_FAILED, '创建失败!重复的Zone!!相同名字的Zone,\ 每种类型域名下只能存在一个!') if args['zone_type'] == 'forward only': args['forwarders'] = '; '.join( [ip.strip() for ip in args['forwarders'].strip().split()]) + ';' del args['view_ids'] new_zone = DBZone(**args) db.session.add(new_zone) db.session.flush() for view_id in view_ids: v = DBViewZone(view_id=int(view_id), zone_id=new_zone.id) db.session.add(v) elif zone_group == 0: new_zone = DBZone(name=args['name'], zone_group=zone_group) db.session.add(new_zone) db.session.flush() log = DBOperationLog( operation_type='添加', operator=g.current_user.username, target_type='Zone', target_name=new_zone.name, \ target_id=int(new_zone.id), target_detail=new_zone.get_content_str() ) db.session.add(log) try: new_zone.create() self._add_privilege_for_zone(new_zone) db.session.commit() except Exception as e: db.session.rollback() return get_response(RequestCode.OTHER_FAILED, "创建失败!") return get_response(RequestCode.SUCCESS, '创建成功!')
def post(self): """ 功能:创建新的Server --- security: - UserSecurity: [] tags: - Server definitions: Server_Parm: properties: host: type: string default: s1 description: server host name ip: type: string default: 0.0.0.0 description: ip address env: type: string default: prod description: env group the server in. dns_server_type: type: string default: master description: the type of dns server (master/slave) zb_process_itemid: type: string default: 123 description: bind process monitoring itemid on zabbix. zb_port_itemid: type: string default: 123 description: bind port monitoring itemid on zabbix. zb_resolve_itemid: type: string default: 123 description: bind resolving monitoring itemid on zabbix. zb_resolve_rate_itemid: type: string default: 123 description: bind resolve rate monitoring itemid on zabbix. parameters: - in: body name: body schema: id: Add_Server required: - name $ref: "#/definitions/Server_Parm" responses: 200: description: 请求结果 schema: properties: code: type: integer description: response code msg: type: string description: response message data: type: string examples: { "code": 100000, "msg": "添加成功", "data": null } """ args = dns_server_common_parser.parse_args() unique_server = db.session.query(DBDNSServer).filter( or_(DBDNSServer.host == args['host'], DBDNSServer.ip == args['ip'])).all() if unique_server: return get_response(RequestCode.OTHER_FAILED, '创建失败! 重复的Server,相同Host或IP地址已存在!') new_server = DBDNSServer(**args) db.session.add(new_server) db.session.flush() self._add_privilege_for_server(new_server) log = DBOperationLog(operation_type='添加', operator=g.current_user.username, target_type='Server', target_name=new_server.host, target_id=int(new_server.id), target_detail=new_server.get_content_str()) db.session.add(log) db.session.commit() return get_response(RequestCode.SUCCESS, '创建成功!')
def post(self): """ 功能:创建新的View --- security: - UserSecurity: [] tags: - View definitions: View_Parm: properties: name: type: string default: v1 description: view name acl: type: string default: 0.0.0.0 description: view name parameters: - in: body name: body schema: id: Add_View required: - name $ref: "#/definitions/View_Parm" responses: 200: description: 请求结果 schema: properties: code: type: integer description: response code msg: type: string description: response message data: type: string examples: { "code": 100000, "msg": "添加成功", "data": null } """ args = dns_view_common_parser.parse_args() unique_view = DBView.query.filter_by(name=args['name']).first() if unique_view: return get_response(RequestCode.OTHER_FAILED, '创建失败!重复的View, 相同的名字的View已存在!!') new_view = DBView(**args) db.session.add(new_view) db.session.flush() log = DBOperationLog(operation_type='添加', operator=g.current_user.username, target_type='View', target_name=new_view.name, target_id=int(new_view.id), target_detail=new_view.get_content_str()) db.session.add(log) try: self._add_privilege_for_view(new_view) view_list = db.session.query(DBView).all() new_view.make_view('create', view_list) db.session.commit() except Exception as e: db.session.rollback() return get_response(RequestCode.OTHER_FAILED, "创建失败!") return get_response(RequestCode.SUCCESS, '创建成功!')
def post(self): """ 功能:创建新的Record --- security: - UserSecurity: [] tags: - Record definitions: Record_Parm: properties: host: type: string in: query description: record host name default: host record_type: type: string in: query description: record type default: A enum: ['A', 'CNAME', 'PTR', 'NS'] value: type: string in: query description: ip address format default: 1.1.1.1 ttl: type: integer in: query description: ttl default: 600 enum: [600, 1800, 3600] view_name: type: string in: query description: view name default: v1 comment: type: string in: query description: comment zone_id: type: integer in: query description: zone id parameters: - in: body name: body schema: id: Add_Record required: - name $ref: "#/definitions/Record_Parm" responses: 200: description: 请求结果 schema: properties: code: type: integer description: response code msg: type: string description: response message data: type: string examples: { "code": 100000, "msg": "添加成功", "data": null } """ args = dns_record_common_parser.parse_args() current_zone = DBZone.query.get(args['zone_id']) if not current_zone: return get_response(RequestCode.OTHER_FAILED, '创建失败!当前Zone不存在,请检查zone_id是否正确!') if not g.current_user.can_do( Operation.ACCESS, ResourceType.ZONE, current_zone.id): return get_response(RequestCode.OTHER_FAILED, '无权限!您无权限在当前Zone下添加Record!') args['creator'] = g.current_user.username if 'default' == args['view_name']: v_name_list = current_zone.view_name_list else: v_name_list = [args['view_name']] unique_record = DBRecord.query.filter( DBRecord.zone_id==args['zone_id'], DBRecord.host==args['host'], DBRecord.view_name.in_(v_name_list)).first() if unique_record: return get_response(RequestCode.OTHER_FAILED, '创建失败 !重复的记录!!同样的Zone,同样的主机,\ 同样的View 的记录只能存在一个。') # print(v_name_list) for v_name in v_name_list: new_record = DBRecord( host=args['host'], record_type=args['record_type'], ttl = args['ttl'], value = args['value'], view_name = v_name, comment = args['comment'], zone_id = current_zone.id, full_domain_name = args['host'] + '.' + current_zone.name, ) db.session.add(new_record) db.session.flush() log = DBOperationLog( operation_type='添加', operator=args['creator'], target_type='Record', target_name=new_record.host, target_id=int(new_record.id), target_detail=new_record.get_content_str()) db.session.add(log) try: new_record.create(current_zone, args, v_name) db.session.commit() except Exception as e: db.session.rollback() return get_response(RequestCode.OTHER_FAILED, "创建失败!") return get_response(RequestCode.SUCCESS, '创建成功!')