parameters: (filename, data, source_name, user=None,
                       description=None, related_md5=None, method='',
                       reference='', tlp=None, relationship=None, bucket_list=None,
                       ticket=None, related_id=None, related_type=None,
                       relationship_type=None)
return_statement: return status
docstring: Add a Certificate.
  
      :param filename: The filename of the Certificate.
      :type filename: str
      :param data: The filedata of the Certificate.
      :type data: str
      :param source_name: The source which provided this Certificate.
      :type source_name: str,
                         :class:`crits.core.crits_mongoengine.EmbeddedSource`,
                         list of :class:`crits.core.crits_mongoengine.EmbeddedSource`
      :param user: The user adding the Certificate.
      :type user: str
      :param description: Description of the Certificate.
      :type description: str
      :param related_md5: MD5 of a top-level object related to this Certificate.
      :type related_md5: str
      :param related_type: The CRITs type of the related top-level object.
      :type related_type: str
      :param method: The method of acquiring this Certificate.
      :type method: str
      :param reference: A reference to the source of this Certificate.
      :type reference: str
      :param tlp: The TLP for this certificate.
      :type tlp: str
      :param relationship: The relationship between the parent and the Certificate.
      :type relationship: str
      :param bucket_list: Bucket(s) to add to this Certificate
      :type bucket_list: str(comma separated) or list.
      :param ticket: Ticket(s) to add to this Certificate
      :type ticket: str(comma separated) or list.
      :param related_id: ID of object to create relationship with
      :type related_id: str
      :param related_type: Type of object to create relationship with
      :type related_id: str
      :param relationship_type: Type of relationship to create.
      :type relationship_type: str
      :returns: dict with keys:
                'success' (boolean),
                'message' (str),
                'md5' (str) if successful.
docstring_summary: Add a Certificate.
docstring_tokens: Add a Certificate .
function: def handle_cert_file(filename, data, source_name, user=None,
                       description=None, related_md5=None, method='',
                       reference='', tlp=None, relationship=None, bucket_list=None,
                       ticket=None, related_id=None, related_type=None,
                       relationship_type=None):
      """
      Add a Certificate.
  
      :param filename: The filename of the Certificate.
      :type filename: str
      :param data: The filedata of the Certificate.
      :type data: str
      :param source_name: The source which provided this Certificate.
      :type source_name: str,
                         :class:`crits.core.crits_mongoengine.EmbeddedSource`,
                         list of :class:`crits.core.crits_mongoengine.EmbeddedSource`
      :param user: The user adding the Certificate.
      :type user: str
      :param description: Description of the Certificate.
      :type description: str
      :param related_md5: MD5 of a top-level object related to this Certificate.
      :type related_md5: str
      :param related_type: The CRITs type of the related top-level object.
      :type related_type: str
      :param method: The method of acquiring this Certificate.
      :type method: str
      :param reference: A reference to the source of this Certificate.
      :type reference: str
      :param tlp: The TLP for this certificate.
      :type tlp: str
      :param relationship: The relationship between the parent and the Certificate.
      :type relationship: str
      :param bucket_list: Bucket(s) to add to this Certificate
      :type bucket_list: str(comma separated) or list.
      :param ticket: Ticket(s) to add to this Certificate
      :type ticket: str(comma separated) or list.
      :param related_id: ID of object to create relationship with
      :type related_id: str
      :param related_type: Type of object to create relationship with
      :type related_id: str
      :param relationship_type: Type of relationship to create.
      :type relationship_type: str
      :returns: dict with keys:
                'success' (boolean),
                'message' (str),
                'md5' (str) if successful.
      """
  
      if not data:
          status = {
              'success':   False,
              'message':  'No data object passed in'
          }
          return status
      if len(data) <= 0:
          status = {
              'success':   False,
              'message':  'Data length <= 0'
          }
          return status
      if ((related_type and not (related_id or related_md5)) or
          (not related_type and (related_id or related_md5))):
          status = {
              'success':   False,
              'message':  'Must specify both related_type and related_id or related_md5.'
          }
          return status
  
      related_obj = None
      if related_id or related_md5:
          if related_id:
              related_obj = class_from_id(related_type, related_id)
          else:
              related_obj = class_from_value(related_type, related_md5)
          if not related_obj:
              status = {
                  'success': False,
                  'message': 'Related object not found.'
              }
              return status
  
      # generate md5 and timestamp
      md5 = hashlib.md5(data).hexdigest()
      timestamp = datetime.datetime.now()
  
      # generate Certificate
      cert = Certificate.objects(md5=md5).first()
      if not cert:
          cert = Certificate()
          cert.filename = filename
          cert.created = timestamp
          cert.size = len(data)
          cert.description = description
          cert.md5 = md5
  
      # generate source information and add to certificate
      if isinstance(source_name, basestring) and len(source_name) > 0:
          if user.check_source_write(source_name):
              s = create_embedded_source(source_name,
                                               reference=reference,
                                               method=method,
                                               tlp=tlp,
                                               analyst=user.username)
          else:
              return {"success": False,
                      "message": "User does not have permission to add objects \
                      using source %s." % str(source_name)}
  
          cert.add_source(s)
      elif isinstance(source_name, EmbeddedSource):
          cert.add_source(source_name, method=method, reference=reference,
                          tlp=tlp)
      elif isinstance(source_name, list) and len(source_name) > 0:
          for s in source_name:
              if isinstance(s, EmbeddedSource):
                  cert.add_source(s, method=method, reference=reference,
                                  tlp=tlp)
  
      if bucket_list:
          cert.add_bucket_list(bucket_list, user)
  
      if ticket:
          cert.add_ticket(ticket, user)
  
      # add file to GridFS
      if not isinstance(cert.filedata.grid_id, ObjectId):
          cert.add_file_data(data)
  
      # save cert
      cert.save(username=user)
      cert.reload()
  
      # run certificate triage
      if AnalysisResult.objects(object_id=str(cert.id)).count() < 1 and data:
          run_triage(cert, user)
  
      # update relationship if a related top-level object is supplied
      if related_obj and cert:
          if relationship_type:
              relationship=RelationshipTypes.inverse(relationship=relationship_type)
          if not relationship:
              relationship = RelationshipTypes.RELATED_TO
  
          cert.add_relationship(related_obj,
                                relationship,
                                analyst=user,
                                get_rels=False)
          cert.save(username=user)
  
      status = {
          'success':      True,
          'message':      'Uploaded certificate',
          'md5':          md5,
          'id':           str(cert.id),
          'object':       cert
      }
  
      return status
function_tokens: def handle_cert_file ( filename , data , source_name , user = None , description = None , related_md5 = None , method = '' , reference = '' , tlp = None , relationship = None , bucket_list = None , ticket = None , related_id = None , related_type = None , relationship_type = None ) : if not data : status = { 'success' : False , 'message' : 'No data object passed in' } return status if len ( data ) <= 0 : status = { 'success' : False , 'message' : 'Data length <= 0' } return status if ( ( related_type and not ( related_id or related_md5 ) ) or ( not related_type and ( related_id or related_md5 ) ) ) : status = { 'success' : False , 'message' : 'Must specify both related_type and related_id or related_md5.' } return status related_obj = None if related_id or related_md5 : if related_id : related_obj = class_from_id ( related_type , related_id ) else : related_obj = class_from_value ( related_type , related_md5 ) if not related_obj : status = { 'success' : False , 'message' : 'Related object not found.' } return status # generate md5 and timestamp md5 = hashlib . md5 ( data ) . hexdigest ( ) timestamp = datetime . datetime . now ( ) # generate Certificate cert = Certificate . objects ( md5 = md5 ) . first ( ) if not cert : cert = Certificate ( ) cert . filename = filename cert . created = timestamp cert . size = len ( data ) cert . description = description cert . md5 = md5 # generate source information and add to certificate if isinstance ( source_name , basestring ) and len ( source_name ) > 0 : if user . check_source_write ( source_name ) : s = create_embedded_source ( source_name , reference = reference , method = method , tlp = tlp , analyst = user . username ) else : return { "success" : False , "message" : "User does not have permission to add objects \
                      using source %s." % str ( source_name ) } cert . add_source ( s ) elif isinstance ( source_name , EmbeddedSource ) : cert . add_source ( source_name , method = method , reference = reference , tlp = tlp ) elif isinstance ( source_name , list ) and len ( source_name ) > 0 : for s in source_name : if isinstance ( s , EmbeddedSource ) : cert . add_source ( s , method = method , reference = reference , tlp = tlp ) if bucket_list : cert . add_bucket_list ( bucket_list , user ) if ticket : cert . add_ticket ( ticket , user ) # add file to GridFS if not isinstance ( cert . filedata . grid_id , ObjectId ) : cert . add_file_data ( data ) # save cert cert . save ( username = user ) cert . reload ( ) # run certificate triage if AnalysisResult . objects ( object_id = str ( cert . id ) ) . count ( ) < 1 and data : run_triage ( cert , user ) # update relationship if a related top-level object is supplied if related_obj and cert : if relationship_type : relationship = RelationshipTypes . inverse ( relationship = relationship_type ) if not relationship : relationship = RelationshipTypes . RELATED_TO cert . add_relationship ( related_obj , relationship , analyst = user , get_rels = False ) cert . save ( username = user ) status = { 'success' : True , 'message' : 'Uploaded certificate' , 'md5' : md5 , 'id' : str ( cert . id ) , 'object' : cert } return status