Esempio n. 1
0
    def validate(self, data):
        """
        validate
        """
        request_profile = self.context['request'].user.profile
        username = self.context['request'].user.username

        if 'bookmark_parent' in data:
            bookmark_parent_len = len(data['bookmark_parent'])

            if bookmark_parent_len > 1:
                raise errors.ValidationException(
                    'bookmark_parent has more than one folder')
            elif bookmark_parent_len == 1:
                bookmark_parent_id = data['bookmark_parent'][0]['id']
                data[
                    'bookmark_parent_object'] = model_access.get_bookmark_entry_by_id(
                        request_profile, bookmark_parent_id)

                if data['bookmark_parent_object'].type != 'FOLDER':
                    raise errors.ValidationException(
                        'bookmark_parent entry must be FOLDER')
            elif bookmark_parent_len < 1:
                data[
                    'bookmark_parent_object'] = model_access.create_get_user_root_bookmark_folder(
                        request_profile)

        if 'children' in data:
            bookmark_children_ids = []
            for child in data['children']:
                if 'id' in child:
                    bookmark_children_ids.append(child['id'])
            data['bookmark_children'] = bookmark_children_ids

        return data
Esempio n. 2
0
    def create(self, validated_data):
        """
        Create BookmarkPermission entry

        Required Fields:
            pass
        """
        username = self.context['request'].user.username
        request_profile = self.context['request'].user.profile
        bookmark_entry = self.context['bookmark_entry']

        user_type = validated_data.get('user_type')

        target_username = validated_data.get('profile',
                                             {}).get('user',
                                                     {}).get('username')
        if not target_username:
            raise errors.ValidationException('Valid Username is Required')

        target_profile = generic_model_access.get_profile(target_username)

        if not target_profile:
            raise errors.ValidationException('Valid User is Required')

        return model_access.share_bookmark_entry(request_profile,
                                                 bookmark_entry,
                                                 target_profile, None,
                                                 user_type)
Esempio n. 3
0
    def to_internal_value(self, data):
        ret = super(BookmarkSerializer, self).to_internal_value(data)
        ret['children'] = data.get('children', [])
        if 'children' in ret:
            for child in ret['children']:
                if not isinstance(child, dict):
                    raise errors.ValidationException(
                        'children has to be a list of dictionaries')
                if 'id' not in child:
                    raise errors.ValidationException(
                        'child in children list of dictionaries is mising id field'
                    )

        return ret
    def update(self, request, pk=None, listing_pk=None):
        """
        Update an existing review
        """
        listing = model_access.get_listing_by_id(request.user.username,
                                                 listing_pk, True)
        custom_field = model_access.get_custom_field_value_by_id(pk)
        if model_access.is_listing_owner_or_admin(request.user.username,
                                                  listing):
            serializer = serializers.CustomFieldValueSerializer(
                custom_field,
                data=request.data,
                context={
                    'request': request,
                    'listing': listing
                },
                partial=True)

            if not serializer.is_valid():
                logger.error('{0!s}'.format(serializer.errors),
                             extra={'request': request})
                raise errors.ValidationException('{0}'.format(
                    serializer.errors))

            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)

        else:
            return Response(status=status.HTTP_403_FORBIDDEN)
Esempio n. 5
0
    def create(self, request):
        """
        Upload an image

        Use content_type = `application/form-data`
        Data (key = value) example:
        ```
        security_marking = UNCLASSIFIED
        image_type = listing_small_screenshot
        file_extension = jpg
        image = <file>
        ```
        """
        # This is a long story. The short version is that, when using HTTP
        # Basic Auth, the client makes a request w/o auth credentials, and the
        # server returns a 401, instructing the client to make the request with
        # auth credentials. This usually works just fine under the covers, but
        # in this particular case (using multipart/form-data with a file
        # attachement), IE croaks. This dummy endpoint is used to 'prep' the
        # client so that when it makes the real request to this endpoint, it
        # already knows to set the necessary authentication header
        if 'cuz_ie' in request.data:
            return Response('IE made me do this', status=status.HTTP_200_OK)

        serializer = serializers.ImageCreateSerializer(
            data=request.data, context={'request': request})
        if not serializer.is_valid():
            raise errors.ValidationException('{0!s}'.format(serializer.errors))

        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
Esempio n. 6
0
    def update(self, request, pk=None, profile_pk=None):
        """
        Update an existing listing visit count
        """
        if profile_pk == 'self':
            profile = model_access.get_self(request.user.username)
        else:
            profile = model_access.get_profile_by_id(profile_pk)
        if 'listing' in request.data and 'id' in request.data['listing']:
            listing = listing_model_access.get_listing_by_id(
                request.user.username, request.data['listing']['id'], True)
        else:
            listing = None

        visit_count = model_access.get_visit_count_by_id(pk)

        serializer = listing_serializers.ListingVisitCountSerializer(
            visit_count,
            data=request.data,
            context={
                'request': request,
                'profile': profile,
                'listing': listing
            },
            partial=True)
        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors),
                         extra={'request': request})
            raise errors.ValidationException('{0}'.format(serializer.errors))

        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)
Esempio n. 7
0
    def create(self, request, category_pk=None):
        """
        ModelViewSet for Bulk Update (Post)

        [
            {
                "id": 7,
                "categories": [
                    {
                        "title": "Business",
                    },
                    {
                        "title": "Finance",
                    }
                ]
            },
            {
                "id": 65,
                "categories": [
                    {
                        "title": "Finance",
                    }
                ]
            }
        ]
        """
        serializer = serializers.CreateCategoryListingSerializer(
            data=request.data, context={'request': request}, many=True)

        if not serializer.is_valid():
            raise errors.ValidationException('{0}'.format(serializer.errors))

        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
Esempio n. 8
0
    def create(self, validated_data):
        """
        Create BOOKMARK entry

        Required Fields:
            * Type
            * `listing id` if type is LISTING
            * `title` if type is folder
        """
        username = self.context['request'].user.username
        request_profile = self.context['request'].user.profile
        bookmark_parent_object = validated_data.get('bookmark_parent_object')
        type = validated_data.get('type')
        bookmark_children = validated_data.get('bookmark_children')
        listing_id = validated_data.get('listing', {}).get('id')

        if type == model_access.LISTING_TYPE:
            if not listing_id:
                raise errors.ValidationException('Listing id entry not found')

            listing = listing_model_access.get_listing_by_id(
                username, listing_id)

            if not listing:
                raise errors.ValidationException('Listing id entry not found')

            return model_access.create_listing_bookmark_for_profile(
                request_profile, listing, bookmark_parent_object)

        elif type == model_access.FOLDER_TYPE:
            if 'title' not in validated_data:
                raise errors.ValidationException('No title provided')

            listing = None
            if listing_id:
                listing = listing_model_access.get_listing_by_id(
                    username, listing_id)

                if not listing:
                    raise errors.ValidationException(
                        'Listing id entry not found')

            return model_access.create_folder_bookmark_for_profile(
                request_profile, validated_data['title'],
                bookmark_parent_object, bookmark_children, listing)
        else:
            raise errors.ValidationException('No valid type provided')
Esempio n. 9
0
    def update(self, request):
        current_request_profile = model_access.get_self(request.user.username)
        serializer = serializers.ProfileSerializer(current_request_profile,
            data=request.data, context={'request': request}, partial=True)
        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors))
            raise errors.ValidationException('{0!s}'.format(serializer.errors))

        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)
Esempio n. 10
0
    def create(self, request):
        serializer = serializers.NotificationSerializer(data=request.data,
            context={'request': request}, partial=True)

        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors))
            raise errors.ValidationException('{0!s}'.format(serializer.errors))

        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
Esempio n. 11
0
    def validate(self, data):
        """
        validate
        """
        request_profile = self.context['request'].user.profile
        # data: {'user_type': 'OWNER', 'profile': OrderedDict([('id', 1)])}

        user_type = data.get('user_type')
        # user_type is required field, choices are validate via django non_field_errors
        if not user_type:
            raise errors.ValidationException('user_type field is missing')

        return data
Esempio n. 12
0
    def update(self, request, pk=None):
        """
        Update is used only change the expiration date of the message
        """
        instance = self.get_queryset().get(pk=pk)
        serializer = serializers.NotificationSerializer(instance,
            data=request.data, context={'request': request}, partial=True)

        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors))
            raise errors.ValidationException('{0!s}'.format(serializer.errors))

        serializer.save()

        return Response(serializer.data, status=status.HTTP_200_OK)
Esempio n. 13
0
    def create(self, request, listing_pk=None):
        listing = model_access.get_listing_by_id(request.user.username,
                                                 listing_pk, True)

        serializer = serializers.RecommendationFeedbackSerializer(
            data=request.data,
            context={
                'request': request,
                'listing': listing
            })

        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors),
                         extra={'request': request})
            raise errors.ValidationException('{0}'.format(serializer.errors))

        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
    def create(self, request, listing_pk=None):
        listing = model_access.get_listing_by_id(request.user.username,
                                                 listing_pk, True)
        if model_access.is_listing_owner_or_admin(request.user.username,
                                                  listing):
            serializer = serializers.CustomFieldValueSerializer(
                data=request.data,
                context={
                    'request': request,
                    'listing': listing
                })

            if not serializer.is_valid():
                logger.error('{0!s}'.format(serializer.errors),
                             extra={'request': request})
                raise errors.ValidationException('{0}'.format(
                    serializer.errors))

            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(status=status.HTTP_403_FORBIDDEN)
Esempio n. 15
0
    def update(self, request, pk=None, listing_pk=None):
        """
        Update an existing review
        """
        listing = model_access.get_listing_by_id(request.user.username,
                                                 listing_pk, True)
        review = model_access.get_review_by_id(pk)

        serializer = serializers.ReviewSerializer(review,
                                                  data=request.data,
                                                  context={
                                                      'request': request,
                                                      'listing': listing
                                                  },
                                                  partial=True)
        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors),
                         extra={'request': request})
            raise errors.ValidationException('{0}'.format(serializer.errors))

        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)
Esempio n. 16
0
    def create(self, request):
        """
        Save a new Listing - only title is required

        Sample Payload:
        {
           "title":"My Test App",
           "description":"This is the full description of my app",
           "descriptionShort":"short app description",
           "contacts":[
              {
                 "type":"Technical Support",
                 "name":"Tech Support Contact",
                 "organization":"ABC Inc",
                 "email":"*****@*****.**",
                 "securePhone":"555-555-5555",
                 "unsecurePhone":"111-222-3454"
              }
           ],
           "tags":[
              "tag1",
              "tag2"
           ],
           "type":"Web Application",
           "usage_requirements":"None",
           "system_requirements":"None",
           "versionName":"1.0.0",
           "launchUrl":"http://www.google.com/myApp",
           "whatIsNew":"Nothing is new",
           "owners":[
              {
                 "username":"******"
              }
           ],
           "agency":"Test Organization",
           "categories":[
              "Entertainment",
              "Media and Video"
           ],
           "intents":[
              "application/json/edit",
              "application/json/view"
           ],
           "docUrls":[
              {
                 "name":"wiki",
                 "url":"http://www.wikipedia.com/myApp"
              }
           ],
           "smallIconId":"b0b54993-0668-4419-98e8-787e4c3a2dc2",
           "largeIconId":"e94128ab-d32d-4241-8820-bd2c69a64a87",
           "bannerIconId":"ecf79771-79a0-4884-a36d-5820c79c6d72",
           "featuredBannerIconId":"c3e6a369-4773-485e-b369-5cebaa331b69",
           "changeLogs":[

           ],
           "screenshots":[
              {
                 "smallImageId":"0b8db892-b669-4e86-af23-d899cb4d4d91",
                 "largeImageId":"80957d25-f34b-48bc-b860-b353cfd9e101"
              }
           ]
        }

        ---
        parameters:
            - name: body
              required: true
              paramType: body
        parameters_strategy:
            form: replace
            query: replace
        omit_serializer: true
        """
        # logger.debug('inside ListingViewSet.create', extra={'request': request})
        serializer = serializers.ListingSerializer(
            data=request.data, context={'request': request}, partial=True)

        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors),
                         extra={'request': request})
            raise errors.ValidationException('{0}'.format(serializer.errors))

        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
Esempio n. 17
0
    def update(self, request, pk=None):
        """
        Update a Listing

        Sample payload:

        {
           "id":45,
           "title":"My Test App",
           "description":"This is the full description of my app",
           "descriptionShort":"short app description",
           "contacts":[
              {
                 "securePhone":"555-555-5555",
                 "unsecurePhone":"111-222-3454",
                 "email":"*****@*****.**",
                 "organization":"ABC Inc",
                 "name":"Tech Support Contact",
                 "type":"Technical Support"
              }
           ],
           "totalReviews":0,
           "avgRate":0,
           "totalRate1":0,
           "totalRate2":0,
           "totalRate3":0,
           "totalRate4":0,
           "height":null,
           "width":null,
           "totalRate5":0,
           "totalVotes":0,
           "tags":[
              "tag2",
              "tag1"
           ],
           "type":"Web Application",
           "uuid":"e378c427-bba6-470c-b2f3-e550b9129504",
           "usage_requirements":"None",
           "system_requirements":"None",
           "iframe_compatible":false,
           "versionName":"1.0.0",
           "launchUrl":"http://www.google.com/myApp",
           "whatIsNew":"Nothing is new",
           "owners":[
              {
                 "displayName":"kevink",
                 "username":"******",
                 "id":5
              }
           ],
           "agency":"Test Organization",
           "agencyShort":"TO",
           "currentRejection":null,
           "isEnabled":true,
           "categories":[
              "Media and Video",
              "Entertainment"
           ],
           "editedDate":"2015-08-12T10:53:47.036+0000",
           "intents":[
              "application/json/edit",
              "application/json/view"
           ],
           "docUrls":[
              {
                 "url":"http://www.wikipedia.com/myApp",
                 "name":"wiki"
              }
           ],
           "approvalStatus":"IN_PROGRESS",
           "isFeatured":false,
           "smallIconId":"b0b54993-0668-4419-98e8-787e4c3a2dc2",
           "largeIconId":"e94128ab-d32d-4241-8820-bd2c69a64a87",
           "bannerIconId":"ecf79771-79a0-4884-a36d-5820c79c6d72",
           "featuredBannerIconId":"c3e6a369-4773-485e-b369-5cebaa331b69",
           "changeLogs":[

           ],
           "screenshots":[
              {
                 "largeImageId":"80957d25-f34b-48bc-b860-b353cfd9e101",
                 "smallImageId":"0b8db892-b669-4e86-af23-d899cb4d4d91"
              }
           ]
        }
        """
        # logger.debug('inside ListingViewSet.update', extra={'request': request})
        instance = self.get_queryset().get(pk=pk)
        serializer = serializers.ListingSerializer(
            instance,
            data=request.data,
            context={'request': request},
            partial=True)

        # logger.debug('created ListingSerializer', extra={'request': request})

        if not serializer.is_valid():
            logger.error('{0!s}'.format(serializer.errors),
                         extra={'request': request})
            raise errors.ValidationException('{0}'.format(serializer.errors))

        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)