Ejemplo n.º 1
0
    def update(self, request, *args, **kwargs):  # pylint: disable=unused-argument, too-many-locals
        '''
        黑白名单局部操作
        '''
        perm = self.get_object()
        clean = self.request.data.get('clean', False)
        if clean:
            UserPerm.valid_objects.filter(perm=perm).update(status='0')
            DeptPerm.valid_objects.filter(perm=perm).update(status='0')
            GroupPerm.valid_objects.filter(perm=perm).update(status='0')

        user_perm_status = self.request.data.get('user_perm_status', [])
        for ups in user_perm_status:
            user = User.valid_objects.filter(username=ups['uid']).first()
            if user:
                owner_perm = UserPerm.get(user, perm)
                owner_perm.update_status(ups['status'])
        node_perm_status = self.request.data.get('node_perm_status', [])
        for nps in node_perm_status:
            node, _ = Dept.retrieve_node(nps['uid'])
            if node:
                node_perm = node.owner_perm_cls.get(node, perm)
                node_perm.update_status(nps['status'])

        cli = LOG_CLI()
        cli.assign_perm_owners(perm)
        return Response({
            'user_perm_status': user_perm_status,
            'node_perm_status': node_perm_status
        })
Ejemplo n.º 2
0
    def patch(self, request, uid):  # pylint: disable=unused-argument
        """
        update group perms
        """
        data = request.data
        group = self.get_object()

        perm_statuses = data.get('perm_statuses', []) if data else []

        for perm_status in perm_statuses:
            try:
                perm = Perm.valid_objects.get_queryset().get(
                    uid=perm_status['uid'])
            except ObjectDoesNotExist:
                raise ValidationError({
                    'perm_statuses':
                    ['perm:{} does not exist'.format(perm_status['uid'])]
                })
            group_perm = GroupPerm.valid_objects.get_queryset().get(
                owner=group, perm=perm)
            group_perm.update_status(perm_status['status'])

        res_group_perms = GroupPerm.valid_objects.filter(
            owner=group, perm__uid__in=[item['uid'] for item in perm_statuses])
        cli = LOG_CLI()
        cli.assign_node_perms(group)
        return Response(self.get_serializer(res_group_perms, many=True).data)
Ejemplo n.º 3
0
    def patch(self, request, uid):  # pylint: disable=unused-argument
        """
        update user perms
        """
        dept = self.get_object()

        perm_statuses = request.data.get('perm_statuses', [])

        for perm_status in perm_statuses:
            try:
                perm = Perm.valid_objects.get_queryset().get(
                    uid=perm_status['uid'])
            except ObjectDoesNotExist:
                raise ValidationError({
                    'perm_statuses':
                    ['perm:{} does not exist'.format(perm_status['uid'])]
                })
            if not perm.under_manage(request.user):
                raise ValidationError({
                    'perm_statuses':
                    ['perm:{} out of scope'.format(perm_status['uid'])]
                })
            dept_perm = DeptPerm.valid_objects.get_queryset().get(owner=dept,
                                                                  perm=perm)
            dept_perm = dept_perm.update_status(perm_status['status'])

        res_dept_perms = DeptPerm.valid_objects.filter(
            owner=dept, perm__uid__in=[item['uid'] for item in perm_statuses])
        cli = LOG_CLI()
        cli.assign_node_perms(dept)
        return Response(self.get_serializer(res_dept_perms, many=True).data)
Ejemplo n.º 4
0
 def perform_destroy(self, instance):
     """
     delete config
     """
     cli = LOG_CLI()
     cli.delete_i18n_mobile_config(instance)
     instance.kill()
Ejemplo n.º 5
0
 def perform_update(self, serializer):
     """
     update config detail
     """
     super().perform_update(serializer)  # pylint: disable=no-member
     cli = LOG_CLI()
     cli.update_i18n_mobile_config(serializer.instance)
Ejemplo n.º 6
0
Archivo: app.py Proyecto: justpic/arkid
 def perform_destroy(self, instance):
     '''
     reject if not editable
     '''
     if not instance.editable:
         raise MethodNotAllowed('DELETE protected APP')
     cli = LOG_CLI()
     cli.delete_app(instance)
     instance.delete()
Ejemplo n.º 7
0
 def perform_destroy(self, instance):
     '''
     硬删除
     '''
     if not instance.editable:
         raise MethodNotAllowed('DELETE protected perm')
     instance.kill()
     cli = LOG_CLI()
     cli.delete_perm(instance)
Ejemplo n.º 8
0
    def update(self, request, *args, **kwargs):  # pylint: disable=unused-argument, too-many-locals
        '''
        黑白名单局部操作
        '''
        perm = self.get_object()
        clean = self.request.data.get('clean', False)
        if clean:
            UserPerm.valid_objects.filter(perm=perm).update(status='0')
            DeptPerm.valid_objects.filter(perm=perm).update(status='0')
            GroupPerm.valid_objects.filter(perm=perm).update(status='0')
        user_perm_status = self.request.data.get('user_perm_status', [])
        node_perm_status = self.request.data.get('node_perm_status', [])

        if not isinstance(user_perm_status, list):
            raise ValidationError({'user_perm_status': ['must be a list']})
        if not isinstance(node_perm_status, list):
            raise ValidationError({'node_perm_status': ['must be a list']})

        for ups in user_perm_status:
            user = User.valid_objects.filter(username=ups['uid']).first()
            # TODO: 目前对每个对象都逐一检验 under_manage,开销大; 且对于没有权限的,只是静默跳过,没有提示。需改进。
            if not (user and user.under_manage(request.user)):
                raise ValidationError(
                    {'user_perm_status': [f'invalid uid: `{ups["uid"]}`']})
            ups['instance'] = user

        for nps in node_perm_status:
            node, _ = Dept.retrieve_node(nps['uid'])
            if not (node and node.under_manage(request.user)):
                raise ValidationError(
                    {'node_perm_status': [f'invalid uid: `{nps["uid"]}`']})
            nps['instance'] = node

        for ups in user_perm_status:
            instance = ups.pop('instance')
            owner_perm = UserPerm.get(instance, perm)
            owner_perm.update_status(ups['status'])
        for nps in node_perm_status:
            instance = nps.pop('instance')
            owner_perm = instance.owner_perm_cls.get(instance, perm)
            owner_perm.update_status(nps['status'])

        cli = LOG_CLI()
        cli.assign_perm_owners(perm)
        return Response({
            'user_perm_status': user_perm_status,
            'node_perm_status': node_perm_status
        })
Ejemplo n.º 9
0
 def get_token(self, open_id):    # pylint: disable=no-self-use
     '''
     从QQUser表查询用户,返回token
     '''
     qq_user = QQUser.valid_objects.filter(open_id=open_id).first()
     if qq_user:
         user = qq_user.user
         token = user.token
         LOG_CLI(user).user_login()
         context = {'token': token, **UserWithPermSerializer(user).data}
     else:
         context = {'token': '', 'third_party_id': open_id}
     return context
Ejemplo n.º 10
0
 def get_token(self, unionid):    # pylint: disable=no-self-use
     '''
     从Wechat表查询用户,返回token
     '''
     wechat_user = WechatUser.valid_objects.filter(unionid=unionid).first()
     if wechat_user:
         user = wechat_user.user
         token = user.token
         LOG_CLI(user).user_login()
         context = {'token': token, **UserWithPermSerializer(user).data}
     else:
         context = {'token': '', 'third_party_id': unionid}
     return context
Ejemplo n.º 11
0
 def get_token(self, alipay_user_id):    # pylint: disable=no-self-use
     '''
     从AlipayUser表查询用户,返回token
     '''
     alipay_user = AlipayUser.valid_objects.filter(alipay_user_id=alipay_user_id).first()
     if alipay_user:
         user = alipay_user.user
         token = user.token
         LOG_CLI(user).user_login()
         context = {'token': token, **UserWithPermSerializer(user).data}
     else:
         context = {'token': '', 'third_party_id': alipay_user_id}
     return context
Ejemplo n.º 12
0
 def get_token(self, user_id):    # pylint: disable=no-self-use
     """
     从Github表查询用户,返回token
     """
     github_user = GithubUser.valid_objects.filter(github_user_id=user_id).first()
     if github_user:
         user = github_user.user
         token = user.token
         LOG_CLI(user).user_login()
         context = {'token': token, **UserWithPermSerializer(user).data}
     else:
         context = {'token': '', 'third_party_id': user_id}
     return context
Ejemplo n.º 13
0
    def update(self, request, *args, **kwargs):    # pylint: disable=unused-argument
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        validated_data = serializer.validated_data

        user = validated_data.pop('user')
        if user.is_settled:
            raise AuthenticationFailed({'only for unsettled user'})
        cli = CLI(user=user)
        user.__dict__.update(validated_data)
        user.save()
        cli.set_user_password(user, validated_data['password'])
        LOG_CLI(user).user_activate()
        return Response({
        # 'token': user.token,
            **UserWithPermSerializer(user).data,
        })
Ejemplo n.º 14
0
 def post(self, request):
     '''
     绑定用户
     '''
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     user = serializer.validated_data['user']
     ding_id = serializer.validated_data['ding_id']
     ding_user = DingUser.objects.filter(user=user).first()
     if ding_user:
         ding_user.ding_id = ding_id
     else:
         ding_user = DingUser.objects.create(ding_id=ding_id, user=user)
     ding_user.save()
     token = user.token
     data = {'token': token, **UserWithPermSerializer(user).data}
     LOG_CLI(user).user_login()
     return Response(data, HTTP_201_CREATED)
Ejemplo n.º 15
0
 def post(self, request):
     """
     绑定用户
     """
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     user = serializer.validated_data['user']
     github_user_id = serializer.validated_data['user_id']
     github_user = GithubUser.valid_objects.filter(user=user).first()
     if github_user:
         github_user.github_user_id = github_user_id
     else:
         github_user = GithubUser.valid_objects.create(github_user_id=github_user_id, user=user)
     github_user.save()
     token = user.token
     data = {'token': token, **UserWithPermSerializer(user).data}
     LOG_CLI(user).user_login()
     return Response(data, HTTP_201_CREATED)
Ejemplo n.º 16
0
 def post(self, request):
     '''
     绑定用户
     '''
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     user = serializer.validated_data['user']
     unionid = serializer.validated_data['user_id']
     wechat_user = WechatUser.valid_objects.filter(user=user).first()
     if wechat_user:
         wechat_user.unionid = unionid
     else:
         wechat_user = WechatUser.valid_objects.create(unionid=unionid, user=user)
     wechat_user.save()
     token = user.token
     data = {'token': token, **UserWithPermSerializer(user).data}
     LOG_CLI(user).user_login()
     return Response(data, HTTP_201_CREATED)
Ejemplo n.º 17
0
    def post(self, request):    # pylint: disable=no-self-use
        '''
        get oneid token by ding code
        '''
        code = request.data.get('code', None)
        if not code:
            raise ValidationError({'code': ['this field is requried']})

        ding_userid = self.auth_code(code)
        user = User.valid_objects.filter(ding_user__uid=ding_userid).first()
        if not user:
            raise ValidationError({'code': ["this account hasn't registered"]})

        res = UserWithPermSerializer(user).data
        res.update(token=user.token)

        LOG_CLI(user).user_login()

        return Response(data=res)
Ejemplo n.º 18
0
    def post(self, request, *args, **kwargs):
        """Respond to POSTed username/password with token."""
        serializer = AuthTokenSerializer(data=request.data, context={'request': request})
        if serializer.is_valid():
            res = self.pre_get_token(request)
            if res:
                return res
            user = serializer.validated_data['user']
            token, _ = ExpiringToken.objects.get_or_create(user=user)
            if token.expired():
                # If the token is expired, generate a new one.
                token.delete()
                token = ExpiringToken.objects.create(user=user)

            data = {'token': token.key, **self.attachment(token)}
            LOG_CLI(user).user_login()
            user.update_last_active_time()
            return Response(data)

        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
Ejemplo n.º 19
0
 def perform_create(self, serializer):
     user = serializer.save()
     LOG_CLI(serializer.instance).user_register()
     return user
Ejemplo n.º 20
0
 def perform_update(self, serializer):
     super().perform_update(serializer)
     LOG_CLI(serializer.instance).user_reset_password()
Ejemplo n.º 21
0
 def perform_create(self, serializer):
     super().perform_create(serializer.instance)
     LOG_CLI(serializer.instance).user_register()
Ejemplo n.º 22
0
 def perform_create(self, serializer):
     """save with i18n mobile config"""
     serializer.is_valid(raise_exception=True)
     serializer.save()
     cli = LOG_CLI()
     cli.create_i18n_mobile_config(serializer.instance)
Ejemplo n.º 23
0
 def perform_update(self, serializer):
     super().perform_update(serializer)  # pylint: disable=no-member
     LOG_CLI().update_config()
Ejemplo n.º 24
0
Archivo: app.py Proyecto: justpic/arkid
 def perform_update(self, serializer):
     super().perform_update(serializer)  # pylint: disable=no-member
     cli = LOG_CLI()
     cli.update_app(serializer.instance, serializer.validated_data)
Ejemplo n.º 25
0
 def perform_create(self, serializer):
     super().perform_create(serializer)  # pylint: disable=no-member
     cli = LOG_CLI()
     cli.create_perm(serializer.instance)