Exemple #1
0
 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, '创建成功!')
Exemple #2
0
    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)
Exemple #3
0
 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)
Exemple #4
0
 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)
Exemple #5
0
 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)
Exemple #6
0
 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)
Exemple #7
0
 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, '创建成功!')
Exemple #8
0
 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)
Exemple #9
0
 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, '创建成功!')
Exemple #10
0
 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)
Exemple #11
0
 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)
Exemple #12
0
 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, '创建成功!')
Exemple #13
0
 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, '创建成功!')
Exemple #14
0
 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, '创建成功!')
Exemple #15
0
 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, '创建成功!')
Exemple #16
0
 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, '创建成功!')