예제 #1
0
    def get(self):
        """Get role list."""
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)
        user_id = args.get('user_id', type=int)

        id = args.get('id', type=int)
        name = args.get('name', type=str)
        role_query = DBRole.query
        if id is not None:
            role_query = role_query.filter_by(id=id)
        if name is not None:
            role_query = role_query.filter_by(name=name)
        if user_id is not None:
            role_query = role_query \
                .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
                .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
                .filter(DBUser.id == user_id)

        marshal_records = marshal(
            role_query.order_by(DBRole.id.desc()).paginate(
                current_page, page_size, error_out=False).items, role_fields)
        results_wrapper = {
            'total': role_query.count(),
            'roles': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_role_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #2
0
    def get(self):
        """Get record list."""
        args = request.args
        current_page = request.args.get('currentPage', 1, type=int)
        page_size = request.args.get('pageSize', 10, type=int)

        id = args.get('id', type=int)
        host = args.get('host', type=str)
        ip = args.get('ip', type=str)
        env = args.get('env', type=str)
        dns_server_type = args.get('dns_server_type', type=str)
        server_query = db.session.query(DBDNSServer) \
            .join(DBPrivilege, and_(
                DBDNSServer.id == DBPrivilege.resource_id,
                DBPrivilege.resource_type == ResourceType.SERVER,
                DBPrivilege.operation == Operation.ACCESS
                )) \
            .join(DBRolePrivilege, and_(
                DBPrivilege.id == DBRolePrivilege.privilege_id
                )) \
            .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
            .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
            .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
            .filter(DBUser.id == g.current_user.id)
        if id is not None:
            server_query = server_query.filter(DBDNSServer.id == id)
        if host is not None:
            server_query = server_query.filter(
                DBDNSServer.host.like('%' + host + '%'))
        if ip is not None:
            server_query = server_query.filter(
                DBDNSServer.ip.like('%' + ip + '%'))
        if env is not None:
            server_query = server_query.filter(
                DBDNSServer.env.like('%' + env + '%'))
        if dns_server_type is not None:
            server_query = server_query.filter(
                DBDNSServer.dns_server_type == dns_server_type)
        marshal_records = marshal(
            server_query.order_by(DBDNSServer.id.desc()).paginate(
                current_page, page_size, error_out=False).items, server_fields)
        results_wrapper = {
            'total': server_query.count(),
            'servers': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_server_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #3
0
 def get(self):
     """Get record list."""
     args = request.args
     zone_id = args.get('zone_id')
     if zone_id:
         if not g.current_user.is_admin():
             current_zone = DBZone.query.get(int(zone_id))
             if not current_zone.can_access:
                 abort(403)
     else:
         if not g.current_user.is_admin():
             abort(403)
     current_page = args.get('currentPage', 1, type=int)
     page_size = args.get('pageSize', 10, type=int)
     id = args.get('id', type=int)
     host = args.get('host', type=str)
     record_type = args.get('record_type', type=str)
     ttl = args.get('ttl', type=str)
     value = args.get('value', type=str)
     view_name = args.get('view_name', type=str)
     record_query = DBRecord.query
     if id is not None:
         record_query = record_query.filter(DBRecord.id == id)
     if host is not None:
         record_query = record_query.filter(
             DBRecord.host.like('%' + host + '%'))
     if record_type is not None:
         record_query = record_query.filter(
             DBRecord.record_type == record_type)
     if ttl is not None:
         record_query = record_query.filter(DBRecord.ttl == ttl)
     if value is not None:
         record_query = record_query.filter(DBRecord.value == value)
     if view_name is not None:
         record_query = record_query.filter(DBRecord.view_name == view_name)
     if zone_id is not None:
         record_query = record_query.filter(
             DBRecord.zone_id == int(zone_id))
     marshal_records = marshal(
         record_query.order_by(DBRecord.id.desc()).paginate(
             current_page, page_size, error_out=False).items, record_fields)
     results_wrapper = {
         'total': record_query.count(),
         'records': marshal_records,
         'current_page': current_page
     }
     response_wrapper_fields = get_response_wrapper_fields(
         fields.Nested(paginated_record_fields))
     response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                     results_wrapper)
     return marshal(response_wrapper, response_wrapper_fields)
예제 #4
0
 def get(self):
     """Get view list."""
     args = request.args
     zone_id = args.get('zone_id', type=int)
     current_page = request.args.get('currentPage', 1, type=int)
     page_size = request.args.get('pageSize', 10, type=int)
     id = args.get('id', type=int)
     name = args.get('name', type=str)
     view_query = DBView.query \
         .join(DBPrivilege, and_(
             DBView.id == DBPrivilege.resource_id,
             DBPrivilege.resource_type == ResourceType.VIEW,
             DBPrivilege.operation == Operation.ACCESS
             )) \
         .join(DBRolePrivilege, and_(
             DBPrivilege.id == DBRolePrivilege.privilege_id
             )) \
         .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
         .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
         .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
         .filter(DBUser.id == g.current_user.id)
     if id is not None:
         view_query = view_query.filter_by(id=id)
     if name is not None:
         view_query = view_query.filter(DBView.name.like('%' + name + '%'))
     if zone_id is not None:
         current_zone = DBZone.query.get(zone_id)
         if current_zone.zone_group == 0:
             return DNSPod.getDNSPodLines(current_zone.name)
         view_query = view_query.join(
             DBViewZone, and_(DBViewZone.view_id == DBView.id)) \
             .join(DBZone, and_(DBZone.id == DBViewZone.zone_id)) \
             .filter(DBZone.id == int(zone_id))
     marshal_records = marshal(
         view_query.order_by(DBView.id.desc()).paginate(
             current_page, page_size, error_out=False).items, view_fields)
     results_wrapper = {
         'total': view_query.count(),
         'views': marshal_records,
         'current_page': current_page
     }
     response_wrapper_fields = get_response_wrapper_fields(
         fields.Nested(paginated_view_fields))
     response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                     results_wrapper)
     return marshal(response_wrapper, response_wrapper_fields)
예제 #5
0
 def get(self):
     """Get zone list."""
     args = request.args
     current_page = request.args.get('currentPage', 1, type=int)
     page_size = request.args.get('pageSize', 10, type=int)
     id = args.get('id', type=int)
     name = args.get('name', type=str)
     zone_group = args.get('zone_group', type=int)
     zone_type = args.get('zone_type', type=str)
     zone_query = DBZone.query \
         .join(DBPrivilege, and_(
             DBZone.id == DBPrivilege.resource_id,
             DBPrivilege.resource_type == ResourceType.ZONE,
             DBPrivilege.operation == Operation.ACCESS
             )) \
         .join(DBRolePrivilege, and_(
             DBPrivilege.id == DBRolePrivilege.privilege_id
             )) \
         .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
         .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
         .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
         .filter(DBUser.id == g.current_user.id)
     if id is not None:
         zone_query = zone_query.filter(DBZone.id == id)
     if name is not None:
         zone_query = zone_query.filter(DBZone.name == name)
     if zone_group is not None:
         zone_query = zone_query.filter(DBZone.zone_group == zone_group)
     if zone_type is not None:
         zone_query = zone_query.filter(DBZone.zone_type == zone_type)
     marshal_records = marshal(
         zone_query.order_by(DBZone.id.desc()).paginate(
             current_page, page_size, error_out=False).items, zone_fields)
     results_wrapper = {
         'total': zone_query.count(),
         'zones': marshal_records,
         'current_page': current_page
     }
     response_wrapper_fields = get_response_wrapper_fields(
         fields.Nested(paginated_zone_fields))
     response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                     results_wrapper)
     return marshal(response_wrapper, response_wrapper_fields)
예제 #6
0
    def get(self):
        """Get privilege list."""
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)
        role_id = args.get('role_id', type=int)

        id = args.get('id', type=int)
        name = args.get('name', type=str)
        operation = args.get('operation', type=int)
        resource_type = args.get('resource_type', type=int)
        resource_id = args.get('resource_id', type=int)
        privilege_query = DBPrivilege.query
        if id is not None:
            privilege_query = privilege_query.filter_by(id=id)
        if name is not None:
            privilege_query = privilege_query.filter_by(name=name)
        if operation is not None:
            privilege_query = privilege_query.filter_by(operation=operation)
        if resource_type is not None:
            privilege_query = privilege_query.filter_by(resource_type=resource_type)
        if resource_id is not None:
            privilege_query = privilege_query.filter_by(resource_id=resource_id)
        if role_id is not None:
            privilege_query = privilege_query.join(
                DBRolePrivilege, and_(DBRolePrivilege.privilege_id == DBPrivilege.id)) \
                    .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
                    .filter(DBRole.id == role_id)

        marshal_records = marshal(
            privilege_query.order_by(DBPrivilege.id.desc()).paginate(
                current_page, 
                page_size, 
                error_out=False
            ).items, privilege_fields)
        results_wrapper = {
            'total': privilege_query.count(), 
            'privileges': marshal_records, 
            'current_page': current_page
            }
        response_wrapper_fields = get_response_wrapper_fields(fields.Nested(paginated_privilege_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!', results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #7
0
    def get(self):
        """Get zone list."""
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)

        id = args.get('id', type=int)
        operation_type = args.get('operation_type', type=str)
        operator = args.get('operator', type=str)
        target_type = args.get('target_type', type=str)
        target_name = args.get('target_name', type=str)
        oplog_query = DBOperationLog.query
        if id is not None:
            oplog_query = oplog_query.filter(DBOperationLog.id == id)
        if operation_type is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.operation_type == operation_type)
        if operator is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.operator == operator)
        if target_type is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.target_type == target_type)
        if target_name is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.target_name == target_name)
        marshal_records = marshal(
            oplog_query.order_by(DBOperationLog.id.desc()).paginate(
                current_page, page_size, error_out=False).items, log_fields)
        results_wrapper = {
            'total': oplog_query.count(),
            'operation_logs': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_log_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #8
0
    def get(self):
        """Get user list."""
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)

        id = args.get('id', type=int)
        email = args.get('email', type=str)
        username = args.get('username', type=str)
        chinese_name = args.get('chinese_name', type=str)
        cellphone = args.get('cellphone', type=str)
        actived = args.get('actived', type=int)
        user_query = DBUser.query
        if id is not None:
            user_query = user_query.filter_by(id=id)
        if email is not None:
            user_query = user_query.filter_by(email=email)
        if username is not None:
            user_query = user_query.filter_by(username=username)
        if chinese_name is not None:
            user_query = user_query.filter_by(chinese_name=chinese_name)
        if cellphone is not None:
            user_query = user_query.filter_by(cellphone=cellphone)
        if actived is not None:
            user_query = user_query.filter_by(actived=actived)
        marshal_records = marshal(
            user_query.order_by(DBUser.id.desc()).paginate(
                current_page, page_size, error_out=False).items, user_fields)
        results_wrapper = {
            'total': user_query.count(),
            'users': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_user_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #9
0
 def get(self):
     """
     功能:获取Zone资源列表
     ---
     security:
       - UserSecurity: []
     tags:
       - Zone
     parameters:
       - name: currentPage
         in: query
         description: Zone list in current page
         type: integer
         default: 1
       - name: pageSize
         in: query
         description: the number of zones per page.
         type: integer
         default: 30
       - name: id
         in: query
         description: Zone id
         type: integer
         default: 1
       - name: name
         type: string
         in: query
         description: the name of Zone
         default: z1.com
       - name: zone_group
         in: query
         type: integer
         description: the group current zone in.
         default: 1
         enum: [0, 1, 2]
       - name: zone_type
         in: query
         type: integer
         description: the id of role
         default: master
         enum: ['master', 'forward only']
     definitions:
       Zone:
         properties:
           total:
             type: integer
             description: the number of zones
           current_page:
             type: integer
             description: current page number
           zones:
             type: array
             items:
               $ref: "#/definitions/Zone"
     responses:
       200:
         description: 请求结果
         schema:
           properties:
             code:
               type: integer
               description: response code
             msg:
               type: string
               description: response message
             data:
               $ref: "#/definitions/Zone"
         examples:
             {
                 "code": 100000,
                 "data": {
                     "total": 5,
                     "zones": [
                         {
                             "id": 4,
                             "name": "xx1.com",
                             "zone_group": 1,
                             "zone_type": "master",
                             "forwarders": "",
                             "view_name_list": "['wqerqwer', 'vvvv111111111', 'jtest']",
                             "can_update": true,
                             "can_delete": true,
                             "view_ids": [
                                 1,
                                 2,
                                 5
                             ]
                         },
                         {
                             "id": 3,
                             "name": "xxx.com",
                             "zone_group": 1,
                             "zone_type": "forward only",
                             "forwarders": "0.0.0.0; 0.0.0.4;",
                             "view_name_list": "['vvvv111111111', 'wqerqwer']",
                             "can_update": true,
                             "can_delete": true,
                             "view_ids": [
                                 2,
                                 1
                             ]
                         }
                     ],
                     "current_page": 1
                 },
                 "msg": "获取成功!"
             }
     """
     args = request.args
     current_page = request.args.get('currentPage', 1, type=int)
     page_size = request.args.get('pageSize', 10, type=int)
     id = args.get('id', type=int)
     name = args.get('name', type=str)
     zone_group = args.get('zone_group', type=int)
     zone_type = args.get('zone_type', type=str)
     zone_query = DBZone.query \
         .join(DBPrivilege, and_(
             DBZone.id == DBPrivilege.resource_id,
             DBPrivilege.resource_type == ResourceType.ZONE,
             DBPrivilege.operation == Operation.ACCESS
             )) \
         .join(DBRolePrivilege, and_(
             DBPrivilege.id == DBRolePrivilege.privilege_id
             )) \
         .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
         .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
         .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
         .filter(DBUser.id == g.current_user.id)
     if id is not None:
         zone_query = zone_query.filter(DBZone.id == id)
     if name is not None:
         zone_query = zone_query.filter(DBZone.name.like('%' + name + '%'))
     if zone_group is not None:
         zone_query = zone_query.filter(DBZone.zone_group == zone_group)
     if zone_type is not None:
         zone_query = zone_query.filter(DBZone.zone_type == zone_type)
     marshal_records = marshal(
         zone_query.order_by(DBZone.id.desc()).paginate(
             current_page, page_size, error_out=False).items, zone_fields)
     results_wrapper = {
         'total': zone_query.count(),
         'zones': marshal_records,
         'current_page': current_page
     }
     response_wrapper_fields = get_response_wrapper_fields(
         fields.Nested(paginated_zone_fields))
     response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                     results_wrapper)
     return marshal(response_wrapper, response_wrapper_fields)
예제 #10
0
파일: user.py 프로젝트: yjlmzh/peb-dns
    def get(self):
        """
        功能: 获取用户列表资源
        ---
        security:
          - UserSecurity: []
        tags:
          - User
        parameters:
          - name: currentPage
            in: query
            description: the page of User
            type: integer
            default: 1
          - name: pageSize
            in: query
            description: the max records of page
            type: integer
            default: 10
          - name: id
            in: query
            description: User id
            type: integer
            default: 1
          - name: username
            type: string
            in: query
            description: the username of User
            default: test
          - name: chinese_name
            in: query
            type: string
            description: the chinese_name of User
            default: 小李
          - name: cellphone
            in: query
            type: string
            description: the cellphone of User
            default: 186121234
          - name: email
            in: query
            type: string
            description: the email of User
            default: [email protected]
          - name: actived
            in: query
            type: integer
            description: the active status of User
            enum: [0, 1]
            default: 1
        definitions:
          Users:
            properties:
              total:
                type: integer
              current_page:
                type: integer
              groups:
                type: array
                items:
                  $ref: "#/definitions/User"
        responses:
          200:
            description: 请求结果
            schema:
              properties:
                code:
                  type: integer
                msg:
                  type: string
                data:
                  $ref: "#/definitions/Users"
            examples:
                {
                    "code": 100000,
                    "data": {
                        "total": 8,
                        "users": [
                            {
                                "id": 8,
                                "email": "*****@*****.**",
                                "username": "******",
                                "chinese_name": "",
                                "cellphone": "",
                                "position": "",
                                "location": "",
                                "member_since": "2017-12-04 17:34:25",
                                "last_seen": "2017-12-04 17:34:25",
                                "roles": []
                            },
                            {
                                "id": 7,
                                "email": "*****@*****.**",
                                "username": "******",
                                "chinese_name": "",
                                "cellphone": "1371111",
                                "position": "",
                                "location": "",
                                "member_since": "2017-11-29 14:16:27",
                                "last_seen": "2017-11-29 14:16:27",
                                "roles": []
                            }
                        ],
                        "current_page": 1
                    },
                    "msg": "获取成功!"
                }
        """
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)

        id = args.get('id', type=int)
        email = args.get('email', type=str)
        username = args.get('username', type=str)
        chinese_name = args.get('chinese_name', type=str)
        cellphone = args.get('cellphone', type=str)
        actived = args.get('actived', type=int)
        user_query = DBUser.query
        if id is not None:
            user_query = user_query.filter_by(id=id)
        if email is not None:
            user_query = user_query.filter(DBUser.email.like('%' + email +
                                                             '%'))
        if username is not None:
            user_query = user_query.filter(
                DBUser.username.like('%' + username + '%'))
        if chinese_name is not None:
            user_query = user_query.filter(
                DBUser.chinese_name.like('%' + chinese_name + '%'))
        if cellphone is not None:
            user_query = user_query.filter(
                DBUser.cellphone.like('%' + cellphone + '%'))
        if actived is not None:
            user_query = user_query.filter_by(actived=actived)
        marshal_records = marshal(
            user_query.order_by(DBUser.id.desc()).paginate(
                current_page, page_size, error_out=False).items, user_fields)
        results_wrapper = {
            'total': user_query.count(),
            'users': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_user_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #11
0
    def get(self):
        """
        功能:获取日志资源列表
        ---
        security:
          - UserSecurity: []
        tags:
          - DNSOperationLog
        parameters:
          - name: currentPage
            in: query
            description: 当前是第几页
            type: integer
            required: false
            default: 1
          - name: pageSize
            in: query
            description: 每页显示的记录数
            type: integer
            required: false
            default: 10
          - name: id
            in: query
            description: 日志ID
            type: integer
            required: false
          - name: operation_type
            in: query
            description: 操作类型,添加/修改/删除
            type: string
            required: false
          - name: operator
            in: query
            description: 操作人
            type: string
            required: false
          - name: target_type
            in: query
            description: 资源类型,Server/View/Zone/Record
            type: string
            required: false
          - name: target_name
            in: query
            description: 资源名称
            type: string
            required: false
          - name: target_id
            in: query
            description: 资源ID
            type: integer
            required: false
        responses:
          200:
            description: 请求结果
            schema:
              properties:
                code:
                  type: integer
                  description: response code
                msg:
                  type: string
                  description: response message
                data:
                  type: string
                  description: response data
            examples:
                {
                    "code": 100000,
                    "data": {
                        "total": 66,
                        "operation_logs": [
                        {
                            "id": 67,
                            "operation_time": "2017-12-04 18:22:19",
                            "operation_type": "添加",
                            "operator": "LIJIAJIA873",
                            "target_type": "Record",
                            "target_name": "xxx333",
                            "target_id": "32",
                            "target_detail": "id: 32\\n记录主机: xxx333\\n记录类型: A\\n记录值: 0.0.0.0\\nTTL: 600\\n线路类型: wqerqwer\\n备注: xxx111\\n创建人: None\\n创建时间: 2017-12-04 18:22:18.805320"
                        }
                        ],
                        "current_page": 1
                    },
                    "msg": "获取成功!"
                }
        """
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)

        id = args.get('id', type=int)
        operation_type = args.get('operation_type', type=str)
        operator = args.get('operator', type=str)
        target_type = args.get('target_type', type=str)
        target_name = args.get('target_name', type=str)
        oplog_query = DBOperationLog.query
        if id is not None:
            oplog_query = oplog_query.filter(DBOperationLog.id == id)
        if operation_type is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.operation_type == operation_type)
        if operator is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.operator.like('%' + operator + '%'))
        if target_type is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.target_type == target_type)
        if target_name is not None:
            oplog_query = oplog_query.filter(
                DBOperationLog.target_name.like('%' + target_name + '%'))
        marshal_records = marshal(
            oplog_query.order_by(DBOperationLog.id.desc()).paginate(
                current_page, page_size, error_out=False).items, log_fields)
        results_wrapper = {
            'total': oplog_query.count(),
            'operation_logs': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_log_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #12
0
파일: role.py 프로젝트: yjlmzh/peb-dns
    def get(self):
        """
        功能: 获取角色列表资源
        ---
        security:
          - UserSecurity: []
        tags:
          - Role
        parameters:
          - name: currentPage
            in: query
            description: the page of Role
            type: integer
            default: 1
          - name: pageSize
            in: query
            description: the max records of page
            type: integer
            default: 10
          - name: id
            in: query
            description: Role id
            type: integer
            default: 1
          - name: name
            type: string
            in: query
            description: the name of Role
            default: Guest
          - name: user_id
            in: query
            type: integer
            description: the id of User
            default: 1
        definitions:
          Roles:
            properties:
              total:
                type: integer
              current_page:
                type: integer
              roles:
                type: array
                items:
                  $ref: "#/definitions/Role"
        responses:
          200:
            description: 请求结果
            schema:
              properties:
                code:
                  type: integer
                msg:
                  type: string
                data:
                  $ref: "#/definitions/Roles"
            examples:
                {
                    "code": 100000,
                    "msg": "获取成功!",
                    "data": {
                        "total": 7,
                        "roles": [
                            {
                                "id": 6,
                                "name": "zone_admin",
                                "privileges": [
                                    {
                                        "id": 2,
                                        "name": "ZONE_ADD",
                                        "operation": 0,
                                        "resource_type": 0,
                                        "resource_id": 0,
                                        "comment": null
                                    },
                                    {
                                        "id": 6,
                                        "name": "ZONE#xcvwretwgvrfv3wf.com#UPDATE",
                                        "operation": 1,
                                        "resource_type": 2,
                                        "resource_id": 1,
                                        "comment": null
                                    }
                                ]
                            },
                            {
                                "id": 2,
                                "name": "server_admin",
                                "privileges": [
                                    {
                                        "id": 1,
                                        "name": "SERVER_ADD",
                                        "operation": 0,
                                        "resource_type": 0,
                                        "resource_id": 0,
                                        "comment": null
                                    },
                                    {
                                        "id": 17,
                                        "name": "SERVER#s1#ACCESS",
                                        "operation": 0,
                                        "resource_type": 0,
                                        "resource_id": 1,
                                        "comment": null
                                    }
                                ]
                            }
                        ]
                        },
                        "current_page": 1
                    }
        """
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)
        user_id = args.get('user_id', type=int)

        id = args.get('id', type=int)
        name = args.get('name', type=str)
        role_query = DBRole.query
        if id is not None:
            role_query = role_query.filter_by(id=id)
        if name is not None:
            role_query = role_query.filter(DBRole.name.like('%'+name+'%'))
        if user_id is not None:
            role_query = role_query \
                .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
                .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
                .filter(DBUser.id == user_id)
        
        marshal_records = marshal(
                role_query.order_by(DBRole.id.desc()).paginate(
                    current_page, 
                    page_size, 
                    error_out=False).items, role_fields)
        results_wrapper = {
            'total': role_query.count(), 
            'roles': marshal_records, 
            'current_page': current_page
            }
        response_wrapper_fields = get_response_wrapper_fields(fields.Nested(paginated_role_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!', results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #13
0
파일: server.py 프로젝트: yjlmzh/peb-dns
    def get(self):
        """
        功能:获取Server资源列表
        ---
        security:
          - UserSecurity: []
        tags:
          - Server
        parameters:
          - name: currentPage
            in: query
            description: Server list in current page
            type: integer
            default: 1
          - name: pageSize
            in: query
            description: the number of servers per page.
            type: integer
            default: 10
          - name: id
            in: query
            description: Server id
            type: integer
            default: 1
          - name: host
            type: string
            in: query
            description: server host name
            default: s1
          - name: ip
            in: query
            description: the ip address of the server
            type: integer
            default: 1.1.1.1
          - name: env
            type: string
            in: query
            description: the env group of the server
            default: prod
            enum: ['qa', 'smk', 'prod']
          - name: dns_server_type
            type: string
            in: query
            description: the env group of the server
            default: master
            enum: ['master', 'slave']
        definitions:
          Server:
            properties:
              total:
                type: integer
                description: the number of servers
              current_page:
                type: integer
                description: current page number
              servers:
                type: array
                items:
                  $ref: "#/definitions/Server"
        responses:
          200:
            description: 请求结果
            schema:
              properties:
                code:
                  type: integer
                  description: response code
                msg:
                  type: string
                  description: response message
                data:
                  $ref: "#/definitions/Server"
            examples:
                {
                    "code": 100000,
                    "data": {
                        "total": 4,
                        "servers": [
                            {
                                "id": 2,
                                "host": "s2",
                                "ip": "0.0.0.1",
                                "env": "anhouse",
                                "dns_server_type": "master",
                                "zb_process_itemid": "222",
                                "zb_port_itemid": "222",
                                "zb_resolve_itemid": "222",
                                "zb_resolve_rate_itemid": "189254",
                                "can_update": true,
                                "can_delete": true
                            },
                            {
                                "id": 1,
                                "host": "s1",
                                "ip": "0.0.0.0",
                                "env": "dev",
                                "dns_server_type": "master",
                                "zb_process_itemid": "111",
                                "zb_port_itemid": "111",
                                "zb_resolve_itemid": "111",
                                "zb_resolve_rate_itemid": "189243",
                                "can_update": true,
                                "can_delete": true
                            }
                        ],
                        "current_page": 1
                    },
                    "msg": "获取成功!"
                }
        """
        args = request.args
        current_page = request.args.get('currentPage', 1, type=int)
        page_size = request.args.get('pageSize', 10, type=int)

        id = args.get('id', type=int)
        host = args.get('host', type=str)
        ip = args.get('ip', type=str)
        env = args.get('env', type=str)
        dns_server_type = args.get('dns_server_type', type=str)
        server_query = db.session.query(DBDNSServer) \
            .join(DBPrivilege, and_(
                DBDNSServer.id == DBPrivilege.resource_id,
                DBPrivilege.resource_type == ResourceType.SERVER,
                DBPrivilege.operation == Operation.ACCESS
                )) \
            .join(DBRolePrivilege, and_(
                DBPrivilege.id == DBRolePrivilege.privilege_id
                )) \
            .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
            .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
            .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
            .filter(DBUser.id == g.current_user.id)
        if id is not None:
            server_query = server_query.filter(DBDNSServer.id == id)
        if host is not None:
            server_query = server_query.filter(
                DBDNSServer.host.like('%' + host + '%'))
        if ip is not None:
            server_query = server_query.filter(
                DBDNSServer.ip.like('%' + ip + '%'))
        if env is not None:
            server_query = server_query.filter(
                DBDNSServer.env.like('%' + env + '%'))
        if dns_server_type is not None:
            server_query = server_query.filter(
                DBDNSServer.dns_server_type == dns_server_type)
        marshal_records = marshal(
            server_query.order_by(DBDNSServer.id.desc()).paginate(
                current_page, page_size, error_out=False).items, server_fields)
        results_wrapper = {
            'total': server_query.count(),
            'servers': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_server_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #14
0
파일: privilege.py 프로젝트: yjlmzh/peb-dns
    def get(self):
        """
        功能: 获取权限列表资源
        ---
        security:
          - UserSecurity: []
        tags:
          - Privilege
        parameters:
          - name: currentPage
            in: query
            description: the page of Privilege
            type: integer
            default: 1
          - name: pageSize
            in: query
            description: the max records of page
            type: integer
            default: 10
          - name: id
            in: query
            description: Privilege id
            type: integer
            default: 1
          - name: name
            type: string
            in: query
            description: the name of Privilege
            default: PRIVILEGE_MODIFY
          - name: operation
            in: query
            type: integer
            description: the value of Privilege
            default: 1
            enum: [0, 1, 2]
          - name: role_id
            in: query
            type: integer
            description: the id of role
            default: 1
          - name: resource_type
            in: query
            type: integer
            description: the id of resource_type
            default: 1
            enum: [0, 1, 2, 3]
          - name: resource_id
            in: query
            type: integer
            description: the id of resource
            default: 1
        definitions:
          Privileges:
            properties:
              total:
                type: integer
                description: the count of records
              current_page:
                type: integer
                description: the current page
              privileges:
                type: array
                items:
                  $ref: "#/definitions/Privilege"
        responses:
          200:
            description: 请求结果
            schema:
              properties:
                code:
                  type: integer
                  description: response code
                msg:
                  type: string
                  description: response message
                data:
                  $ref: "#/definitions/Privileges"
            examples:
                {
                    "code": 100000,
                    "data": {
                        "total": 37,
                        "privileges": [
                            {
                                "id": 58,
                                "name": "VIEW#v555#DELETE",
                                "operation": 2,
                                "resource_type": 1,
                                "resource_id": 6,
                                "comment": null
                            },
                            {
                                "id": 57,
                                "name": "VIEW#v555#UPDATE",
                                "operation": 1,
                                "resource_type": 1,
                                "resource_id": 6,
                                "comment": null
                            }
                        ],
                        "current_page": 1
                    },
                    "msg": "获取成功!"
                }
        """
        args = request.args
        current_page = args.get('currentPage', 1, type=int)
        page_size = args.get('pageSize', 10, type=int)
        role_id = args.get('role_id', type=int)

        id = args.get('id', type=int)
        name = args.get('name', type=str)
        operation = args.get('operation', type=int)
        resource_type = args.get('resource_type', type=int)
        resource_id = args.get('resource_id', type=int)
        privilege_query = DBPrivilege.query
        if id is not None:
            privilege_query = privilege_query.filter_by(id=id)
        if name is not None:
            privilege_query = privilege_query.filter(
                DBPrivilege.name.like('%' + name + '%'))
        if operation is not None:
            privilege_query = privilege_query.filter_by(operation=operation)
        if resource_type is not None:
            privilege_query = privilege_query.filter_by(
                resource_type=resource_type)
        if resource_id is not None:
            privilege_query = privilege_query.filter_by(
                resource_id=resource_id)
        if role_id is not None:
            privilege_query = privilege_query.join(
                DBRolePrivilege, and_(DBRolePrivilege.privilege_id == DBPrivilege.id)) \
                    .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
                    .filter(DBRole.id == role_id)

        marshal_records = marshal(
            privilege_query.order_by(DBPrivilege.id.desc()).paginate(
                current_page, page_size, error_out=False).items,
            privilege_fields)
        results_wrapper = {
            'total': privilege_query.count(),
            'privileges': marshal_records,
            'current_page': current_page
        }
        response_wrapper_fields = get_response_wrapper_fields(
            fields.Nested(paginated_privilege_fields))
        response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                        results_wrapper)
        return marshal(response_wrapper, response_wrapper_fields)
예제 #15
0
파일: view.py 프로젝트: yjlmzh/peb-dns
 def get(self):
     """
     功能:获取View资源列表
     ---
     security:
       - UserSecurity: []
     tags:
       - View
     parameters:
       - name: currentPage
         in: query
         description: View list in current page
         type: integer
         default: 1
       - name: pageSize
         in: query
         description: the number of views per page.
         type: integer
         default: 10
       - name: id
         in: query
         description: View id
         type: integer
         default: 1
       - name: name
         type: string
         in: query
         description: the name of View
         default: z1.com
       - name: zone_id
         in: query
         description: the id of the zone which was related to views
         type: integer
         default: 1
     definitions:
       View:
         properties:
           total:
             type: integer
             description: the number of views
           current_page:
             type: integer
             description: current page number
           views:
             type: array
             items:
               $ref: "#/definitions/View"
     responses:
       200:
         description: 请求结果
         schema:
           properties:
             code:
               type: integer
               description: response code
             msg:
               type: string
               description: response message
             data:
               $ref: "#/definitions/View"
         examples:
             {
                 "code": 100000,
                 "data": {
                     "total": 4,
                     "views": [
                         {
                             "id": 2,
                             "name": "vvvv111111111",
                             "acl": "0.0.0.0",
                             "can_update": true,
                             "can_delete": true
                         },
                         {
                             "id": 1,
                             "name": "wqerqwer",
                             "acl": "0.0.0.0\\n1.1.1.1",
                             "can_update": true,
                             "can_delete": true
                         }
                     ],
                     "current_page": 1
                 },
                 "msg": "获取成功!"
             }
     """
     args = request.args
     zone_id = args.get('zone_id', type=int)
     current_page = request.args.get('currentPage', 1, type=int)
     page_size = request.args.get('pageSize', 10, type=int)
     id = args.get('id', type=int)
     name = args.get('name', type=str)
     view_query = DBView.query \
         .join(DBPrivilege, and_(
             DBView.id == DBPrivilege.resource_id,
             DBPrivilege.resource_type == ResourceType.VIEW,
             DBPrivilege.operation == Operation.ACCESS
             )) \
         .join(DBRolePrivilege, and_(
             DBPrivilege.id == DBRolePrivilege.privilege_id
             )) \
         .join(DBRole, and_(DBRole.id == DBRolePrivilege.role_id)) \
         .join(DBUserRole, and_(DBUserRole.role_id == DBRole.id)) \
         .join(DBUser, and_(DBUser.id == DBUserRole.user_id)) \
         .filter(DBUser.id == g.current_user.id)
     if id is not None:
         view_query = view_query.filter_by(id=id)
     if name is not None:
         view_query = view_query.filter(DBView.name.like('%' + name + '%'))
     if zone_id is not None:
         current_zone = DBZone.query.get(zone_id)
         if current_zone.zone_group == 0:
             return get_response(RequestCode.SUCCESS, '获取成功!',
                                 DNSPod.getDNSPodLines(current_zone.name))
         view_query = view_query.join(
             DBViewZone, and_(DBViewZone.view_id == DBView.id)) \
             .join(DBZone, and_(DBZone.id == DBViewZone.zone_id)) \
             .filter(DBZone.id == int(zone_id))
     marshal_records = marshal(
         view_query.order_by(DBView.id.desc()).paginate(
             current_page, page_size, error_out=False).items, view_fields)
     results_wrapper = {
         'total': view_query.count(),
         'views': marshal_records,
         'current_page': current_page
     }
     response_wrapper_fields = get_response_wrapper_fields(
         fields.Nested(paginated_view_fields))
     response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!',
                                     results_wrapper)
     return marshal(response_wrapper, response_wrapper_fields)
예제 #16
0
파일: record.py 프로젝트: yjlmzh/peb-dns
 def get(self):
     """
     功能:获取Record资源列表
     ---
     security:
       - UserSecurity: []
     tags:
       - Record
     parameters:
       - name: currentPage
         in: query
         description: Record list in current page
         type: integer
         default: 1
       - name: pageSize
         in: query
         description: the number of records per page.
         type: integer
         default: 10
       - name: zone_id
         in: query
         description: Zone id the record related to
         type: integer
         default: 1
       - name: id
         in: query
         description: Record id
         type: integer
         default: 1
       - name: host
         type: string
         in: query
         description: record host name
       - name: record_type
         type: string
         in: query
         description: record type
         default: A
         enum: ['A', 'CNAME', 'PTR', 'NS']
       - name: value
         type: string
         in: query
         description: ip address format
         default: 1.1.1.1
       - name: ttl
         type: integer
         in: query
         description: ttl
         default: 600
         enum: [600, 1800, 3600]
       - name: view_name
         type: string
         in: query
         description: view name
     definitions:
       Record:
         properties:
           total:
             type: integer
             description: the number of records
           current_page:
             type: integer
             description: current page number
           records:
             type: array
             items:
               $ref: "#/definitions/Record"
     responses:
       200:
         description: 请求结果
         schema:
           properties:
             code:
               type: integer
               description: response code
             msg:
               type: string
               description: response message
             data:
               $ref: "#/definitions/Record"
         examples:
             {
                 "code": 100000,
                 "data": {
                     "total": 9,
                     "records": [
                         {
                             "id": 16,
                             "host": "xxx333",
                             "record_type": "A",
                             "ttl": "600",
                             "value": "0.0.0.0",
                             "view_name": "jtest",
                             "comment": "xxx111",
                             "zone_id": 4,
                             "can_update": true,
                             "can_delete": true
                         },
                         {
                             "id": 15,
                             "host": "xxx333",
                             "record_type": "A",
                             "ttl": "600",
                             "value": "0.0.0.0",
                             "view_name": "vvvv111111111",
                             "comment": "xxx111",
                             "zone_id": 4,
                             "can_update": true,
                             "can_delete": true
                         }
                     ],
                     "current_page": 1
                 },
                 "msg": "获取成功!"
             }
     """
     args = request.args
     zone_id = args.get('zone_id')
     if zone_id:
         if not g.current_user.is_admin():
             current_zone = DBZone.query.get(int(zone_id))
             if not current_zone.can_access:
                 abort(403)
     else:
         if not g.current_user.is_admin():
             abort(403)
     current_page = args.get('currentPage', 1, type=int)
     page_size = args.get('pageSize', 10, type=int)
     id = args.get('id', type=int)
     host = args.get('host', type=str)
     record_type = args.get('record_type', type=str)
     ttl = args.get('ttl', type=str)
     value = args.get('value', type=str)
     view_name = args.get('view_name', type=str)
     record_query = DBRecord.query
     if id is not None:
         record_query = record_query.filter(DBRecord.id==id)
     if host is not None:
         record_query = record_query.filter(DBRecord.host.like('%'+host+'%'))
     if record_type is not None:
         record_query = record_query.filter(DBRecord.record_type==record_type)
     if ttl is not None:
         record_query = record_query.filter(DBRecord.ttl==ttl)
     if value is not None:
         record_query = record_query.filter(DBRecord.value.like('%'+value+'%'))
     if view_name is not None:
         record_query = record_query.filter(DBRecord.view_name==view_name) 
     if zone_id is not None:
         record_query = record_query.filter(DBRecord.zone_id==int(zone_id)) 
     marshal_records = marshal(
             record_query.order_by(DBRecord.id.desc())
             .paginate(current_page, page_size, error_out=False).items, 
             record_fields)
     results_wrapper = {
         'total': record_query.count(), 
         'records': marshal_records, 
         'current_page': current_page
         }
     response_wrapper_fields = get_response_wrapper_fields(fields.Nested(paginated_record_fields))
     response_wrapper = get_response(RequestCode.SUCCESS, '获取成功!', results_wrapper)
     return marshal(response_wrapper, response_wrapper_fields)