Example #1
0
 def testSignatureAdd(self):
     title = SIGNATURE_TITLE
     description = SIGNATURE_DESCRIPTION
     data = SIGNATURE_DATA
     data_type = TDT
     source_name = TSRC
     user = TUSER_NAME
     (status) = handlers.handle_signature_file(data, source_name, user, description, title, data_type)
Example #2
0
File: api.py Project: 971sec/crits
    def obj_create(self, bundle, **kwargs):
        """
        Handles creating Signatures through the API.

        :param bundle: Bundle containing the information to create the RawData.
        :type bundle: Tastypie Bundle object.
        :returns: HttpResponse.

        """

        analyst = bundle.request.user.username
        content = {'return_code': 1,
                   'type': 'Signature'}
        data = bundle.data.get('data', None)
        source = bundle.data.get('source', None)
        description = bundle.data.get('description', '')
        title = bundle.data.get('title', None)
        data_type = bundle.data.get('data_type', None)
        data_type_min_version = bundle.data.get('data_type_min_version', None)
        data_type_max_version = bundle.data.get('data_type_max_version', None)
        data_type_dependency = bundle.data.get('data_type_dependency', None)
        link_id = bundle.data.get('link_id', None)
        copy_rels = bundle.data.get('copy_relationships', False)
        method = bundle.data.get('method', None) or 'Upload'
        reference = bundle.data.get('reference', None)
        bucket_list = bundle.data.get('bucket_list', None)
        ticket = bundle.data.get('ticket', None)

        if not title:
            content['message'] = "Must provide a title."
            self.crits_response(content)
        if not data_type:
            content['message'] = "Must provide a data type."
            self.crits_response(content)

        result = handle_signature_file(data, source, analyst,
                                      description, title, data_type,
                                      data_type_min_version,
                                      data_type_max_version,
                                      data_type_dependency,link_id,
                                      method=method,
                                      reference=reference,
                                      copy_rels=copy_rels,
                                      bucket_list=bucket_list,
                                      ticket=ticket)

        if result.get('message'):
            content['message'] = result.get('message')
        if result.get('_id'):
            url = reverse('api_dispatch_detail',
                          kwargs={'resource_name': 'signatures',
                                  'api_name': 'v1',
                                  'pk': str(result.get('_id'))})
            content['url'] = url
            content['id'] = str(result.get('_id'))
        if result['success']:
            content['return_code'] = 0
        self.crits_response(content)
Example #3
0
 def setUp(self):
     prep_db()
     self.factory = RequestFactory()
     self.user = CRITsUser.objects(username=TUSER_NAME).first()
     self.user.sources.append(TSRC)
     self.user.save()
     # Add a test signature
     title = SIGNATURE_TITLE
     description = SIGNATURE_DESCRIPTION
     data = SIGNATURE_DATA
     data_type = TDT
     source_name = TSRC
     user = TUSER_NAME
     (status) = handlers.handle_signature_file(data, source_name, user, description, title, data_type)
Example #4
0
def upload_signature(request, link_id=None):
    """
    Upload new Signature to CRITs.

    :param request: Django request object (Required)
    :type request: :class:`django.http.HttpRequest`
    :param link_id: The LinkId of Signature if this is a new version upload.
    :type link_id: str
    :returns: :class:`django.http.HttpResponse`
    """

    if request.method == 'POST':
        form = UploadSignatureForm(request.user, request.POST)
        if form.is_valid():
            analyst = request.user.username
            data = request.POST.get('data', None)
            source = form.cleaned_data.get('source')
            user = request.user.username
            description = form.cleaned_data.get('description', '')
            title = form.cleaned_data.get('title', None)
            data_type = form.cleaned_data.get('data_type', None)
            data_type_min_version = form.cleaned_data.get('data_type_min_version', None)
            data_type_max_version = form.cleaned_data.get('data_type_max_version', None)
            related_id=form.cleaned_data.get('related_id', '')
            related_type = form.cleaned_data.get('related_type', '')
            relationship_type = form.cleaned_data.get('relationship_type', '')

            ''' Parse out dependencies and add any new ones '''
            depend_string = form.cleaned_data.get('data_type_dependency', None)
            new_list = depend_string.split(',')
            data_type_dependency = []

            for dtd in new_list:
                dtd = dtd.strip()
                dtd = str(dtd)
                if dtd:
                    data_type_dependency.append(dtd)
                    add_new_signature_dependency(dtd,analyst)

            copy_rels = request.POST.get('copy_relationships', False)
            link_id = link_id
            bucket_list = form.cleaned_data.get('bucket_list')
            ticket = form.cleaned_data.get('ticket')
            method = form.cleaned_data.get('method', '') or 'Upload'
            reference = form.cleaned_data.get('reference', '')
            status = handle_signature_file(data, source, user,
                                          description, title, data_type,
                                          data_type_min_version,
                                          data_type_max_version,
                                          data_type_dependency, link_id,
                                          method=method,
                                          reference=reference,
                                          copy_rels=copy_rels,
                                          bucket_list=bucket_list,
                                          ticket=ticket,
                                          related_id=related_id,
                                          related_type=related_type,
                                          relationship_type=relationship_type)
            if status['success']:
                jdump = json.dumps({
                    'message': 'signature uploaded successfully! <a href="%s">View signature</a>'
                    % reverse('crits.signatures.views.signature_detail',
                              args=[status['_id']]), 'success': True})
                return HttpResponse(jdump, content_type="application/json")

            else:
                jdump = json.dumps({'success': False,
                                    'message': status['message']})
                return HttpResponse(jdump, content_type="application/json")

        else:
            jdump = json.dumps({'success': False,
                                'form': form.as_table()})
            return HttpResponse(jdump, content_type="application/json")

    else:
        return render_to_response('error.html',
                                  {'error': "Expected POST."},
                                  RequestContext(request))
Example #5
0
    def obj_create(self, bundle, **kwargs):
        """
        Handles creating Signatures through the API.

        :param bundle: Bundle containing the information to create the RawData.
        :type bundle: Tastypie Bundle object.
        :returns: HttpResponse.

        """

        user = bundle.request.user
        content = {'return_code': 1,
                   'type': 'Signature'}
        data = bundle.data.get('data', None)
        source = bundle.data.get('source', None)
        description = bundle.data.get('description', '')
        tlp = bundle.data.get('tlp', 'amber')
        title = bundle.data.get('title', None)
        data_type = bundle.data.get('data_type', None)
        data_type_min_version = bundle.data.get('data_type_min_version', None)
        data_type_max_version = bundle.data.get('data_type_max_version', None)
        data_type_dependency = bundle.data.get('data_type_dependency', None)
        link_id = bundle.data.get('link_id', None)
        copy_rels = bundle.data.get('copy_relationships', False)
        method = bundle.data.get('method', None) or 'Upload'
        reference = bundle.data.get('reference', None)
        bucket_list = bundle.data.get('bucket_list', None)
        ticket = bundle.data.get('ticket', None)

        if not title:
            content['message'] = "Must provide a title."
            self.crits_response(content)
        if not data_type:
            content['message'] = "Must provide a data type."
            self.crits_response(content)

        if not user.has_access_to(SignatureACL.WRITE):
            content['message'] = 'User does not have permission to create Object.'
            self.crits_response(content)

        result = handle_signature_file(data, source, user,
                                      description, title, data_type,
                                      data_type_min_version,
                                      data_type_max_version,
                                      data_type_dependency,link_id,
                                      source_method=method,
                                      source_reference=reference,
                                      source_tlp=tlp,
                                      copy_rels=copy_rels,
                                      bucket_list=bucket_list,
                                      ticket=ticket)

        if result.get('message'):
            content['message'] = result.get('message')
        if result.get('_id'):
            url = reverse('api_dispatch_detail',
                          kwargs={'resource_name': 'signatures',
                                  'api_name': 'v1',
                                  'pk': str(result.get('_id'))})
            content['url'] = url
            content['id'] = str(result.get('_id'))
        if result['success']:
            content['return_code'] = 0
        self.crits_response(content)
Example #6
0
def upload_signature(request, link_id=None):
    """
    Upload new Signature to CRITs.

    :param request: Django request object (Required)
    :type request: :class:`django.http.HttpRequest`
    :param link_id: The LinkId of Signature if this is a new version upload.
    :type link_id: str
    :returns: :class:`django.http.HttpResponse`
    """

    if request.method == 'POST':
        form = UploadSignatureForm(request.user, request.POST)
        if form.is_valid():
            analyst = request.user.username
            data = request.POST.get('data', None)
            source = form.cleaned_data.get('source')
            user = request.user.username
            description = form.cleaned_data.get('description', '')
            title = form.cleaned_data.get('title', None)
            data_type = form.cleaned_data.get('data_type', None)
            data_type_min_version = form.cleaned_data.get(
                'data_type_min_version', None)
            data_type_max_version = form.cleaned_data.get(
                'data_type_max_version', None)
            ''' Parse out dependencies and add any new ones '''
            depend_string = form.cleaned_data.get('data_type_dependency', None)
            new_list = depend_string.split(',')
            data_type_dependency = []

            for dtd in new_list:
                dtd = dtd.strip()
                dtd = str(dtd)
                if dtd:
                    data_type_dependency.append(dtd)
                    add_new_signature_dependency(dtd, analyst)

            copy_rels = request.POST.get('copy_relationships', False)
            link_id = link_id
            bucket_list = form.cleaned_data.get('bucket_list')
            ticket = form.cleaned_data.get('ticket')
            method = form.cleaned_data.get('method', '') or 'Upload'
            reference = form.cleaned_data.get('reference', '')
            status = handle_signature_file(data,
                                           source,
                                           user,
                                           description,
                                           title,
                                           data_type,
                                           data_type_min_version,
                                           data_type_max_version,
                                           data_type_dependency,
                                           link_id,
                                           method=method,
                                           reference=reference,
                                           copy_rels=copy_rels,
                                           bucket_list=bucket_list,
                                           ticket=ticket)
            if status['success']:
                jdump = json.dumps({
                    'message':
                    'signature uploaded successfully! <a href="%s">View signature</a>'
                    % reverse('crits.signatures.views.signature_detail',
                              args=[status['_id']]),
                    'success':
                    True
                })
                return HttpResponse(jdump, content_type="application/json")

            else:
                jdump = json.dumps({
                    'success': False,
                    'message': status['message']
                })
                return HttpResponse(jdump, content_type="application/json")

        else:
            jdump = json.dumps({'success': False, 'form': form.as_table()})
            return HttpResponse(jdump, content_type="application/json")

    else:
        return render_to_response('error.html', {'error': "Expected POST."},
                                  RequestContext(request))