Пример #1
0
def exportArchitecture(outFile,session_id = None):
  b = Borg()
  rmArchitecture = b.get_dbproxy(session_id).redmineArchitecture()

  buf = ''
  noAPs = 0
  for aName,aType,sTxt in rmArchitecture:
    buf += sTxt + '\n'
    noAPs += 1
    if (aType == 'component'):
      caName = aName.replace(' ','_') + 'AssetModel.jpg'
      cgName = aName.replace(' ','_') + 'GoalModel.jpg'
      buildComponentAssetModel(b.get_dbproxy(session_id),aName,caName)
      buildComponentGoalModel(b.get_dbproxy(session_id),aName,cgName)
    elif (aType == 'architectural_pattern'):
      graphName = aName.replace(' ','_') + 'ComponentModel.jpg'
      buildComponentModel(b.get_dbproxy(session_id),aName,graphName)
  
  aFile = open(outFile,'w')
  aFile.write(buf)
  aFile.close()

  outFilePrefix,outFilePostfix = outFile.split('.')
  summaryFile = outFilePrefix + '-summary.' + outFilePostfix

  archSumm = b.get_dbproxy(session_id).redmineArchitectureSummary('Complete')
  buf = ''
  for aName,sTxt in archSumm:
    buf += sTxt + '\n'

  aFile = open(summaryFile,'w')
  aFile.write(buf)
  aFile.close()
 
  return 'Exported ' + str(noAPs) + ' architectural patterns.'
Пример #2
0
def exportAttackPatterns(outFile,session_id = None):
  b = Borg()
  rmAttackPatterns = b.get_dbproxy(session_id).redmineAttackPatterns()

  buf = 'h1. Contextualised Attack Patterns\n\nThis section was automatically generated based on the contents of the webinos WP 2 git repository at http://dev.webinos.org/git/wp2.git.\n\nh2. Obstacle probability: colour codes\n\n!{width:200px}ObsColour.jpg!\n\n'
  apdxBuf = ''
  noAPs = 0
  for apName,envName,cType,apTxt in rmAttackPatterns:
    if (cType == 'body'):
      buf += apTxt + '\n'
      gmName = apName.replace(' ','_') + 'ObstacleModel.jpg'
      buildRiskObstacleModel(b.get_dbproxy(session_id),apName,envName,gmName)
    else:
      apdxBuf += apTxt + '\n' 
    noAPs += 1
  aFile = open(outFile,'w')
  aFile.write(buf)
  aFile.close()

  fileName,filePostfix = outFile.split('.')
  summaryFile = fileName + '-summary.txt'
  buf = b.get_dbproxy(session_id).redmineAttackPatternsSummary('Complete')
  aFile = open(summaryFile,'w')
  aFile.write(buf)
  aFile.close()

  return 'Exported ' + str(noAPs) + ' attack patterns.'
Пример #3
0
def exportArchitecture(outFile,session_id = None):
  b = Borg()
  rmArchitecture = b.get_dbproxy(session_id).redmineArchitecture()

  buf = ''
  noAPs = 0
  for aName,aType,sTxt in rmArchitecture:
    buf += sTxt + '\n'
    noAPs += 1
    if (aType == 'component'):
      caName = aName.replace(' ','_') + 'AssetModel.jpg'
      cgName = aName.replace(' ','_') + 'GoalModel.jpg'
      buildComponentAssetModel(b.get_dbproxy(session_id),aName,caName)
      buildComponentGoalModel(b.get_dbproxy(session_id),aName,cgName)
    elif (aType == 'architectural_pattern'):
      graphName = aName.replace(' ','_') + 'ComponentModel.jpg'
      buildComponentModel(b.get_dbproxy(session_id),aName,graphName)
  
  aFile = open(outFile,'w')
  aFile.write(buf)
  aFile.close()

  outFilePrefix,outFilePostfix = outFile.split('.')
  summaryFile = outFilePrefix + '-summary.' + outFilePostfix

  archSumm = b.get_dbproxy(session_id).redmineArchitectureSummary('Complete')
  buf = ''
  for aName,sTxt in archSumm:
    buf += sTxt + '\n'

  aFile = open(summaryFile,'w')
  aFile.write(buf)
  aFile.close()
 
  return 'Exported ' + str(noAPs) + ' architectural patterns.'
Пример #4
0
def exportAttackPatterns(outFile,session_id = None):
  b = Borg()
  rmAttackPatterns = b.get_dbproxy(session_id).redmineAttackPatterns()

  buf = 'h1. Contextualised Attack Patterns\n\nThis section was automatically generated based on the contents of the webinos WP 2 git repository at http://dev.webinos.org/git/wp2.git.\n\nh2. Obstacle probability: colour codes\n\n!{width:200px}ObsColour.jpg!\n\n'
  apdxBuf = ''
  noAPs = 0
  for apName,envName,cType,apTxt in rmAttackPatterns:
    if (cType == 'body'):
      buf += apTxt + '\n'
      gmName = apName.replace(' ','_') + 'ObstacleModel.jpg'
      buildRiskObstacleModel(b.get_dbproxy(session_id),apName,envName,gmName)
    else:
      apdxBuf += apTxt + '\n' 
    noAPs += 1
  aFile = open(outFile,'w')
  aFile.write(buf)
  aFile.close()

  fileName,filePostfix = outFile.split('.')
  summaryFile = fileName + '-summary.txt'
  buf = b.get_dbproxy(session_id).redmineAttackPatternsSummary('Complete')
  aFile = open(summaryFile,'w')
  aFile.write(buf)
  aFile.close()

  return 'Exported ' + str(noAPs) + ' attack patterns.'
Пример #5
0
def exportRedmineUseCases(outFile, session_id=None):
    b = Borg()
    rmUseCases = b.get_dbproxy(session_id).redmineUseCases()

    buf = ''
    noUseCases = 0

    ucDict = {}
    envs = b.get_dbproxy(session_id).getEnvironments()
    for envName in envs:
        envShortCode = envs[envName].shortCode()
        ucDict[envShortCode] = []

    for ucName, ucShortCode, ucAuthor, ucTxt in rmUseCases:
        ucCat = re.sub('[0-9]', '', ucShortCode)
        ucDict[ucCat].append((ucName, ucShortCode, ucAuthor, ucTxt))
    fnlCats = list(ucDict.keys())
    fnlCats.sort()

    for fnlCat in fnlCats:
        for ucName, ucShortCode, ucAuthor, ucTxt in ucDict[fnlCat]:
            buf += ucTxt + '\n'
            noUseCases += 1
    ucFile = open(outFile, 'w')
    ucFile.write(buf)
    ucFile.close()
    return 'Exported ' + str(noUseCases) + ' use cases.'
Пример #6
0
def importMisusability(crParameterSet, tcParameterSet, session_id):
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    crCount = 0
    for crParameters in crParameterSet:
        objtId = db_proxy.existingObject(crParameters.name(),
                                         'concept_reference')
        if objtId == -1:
            db_proxy.addConceptReference(crParameters)
        else:
            crParameters.setId(objtId)
            db_proxy.updateConceptReference(crParameters)
        crCount += 1

    tcCount = 0
    for tcParameters in tcParameterSet:
        objtId = db_proxy.existingObject(tcParameters.task(),
                                         'task_characteristic')
        if objtId == -1:
            db_proxy.addTaskCharacteristic(tcParameters)
        else:
            tcParameters.setId(objtId)
            db_proxy.updateTaskCharacterisric(tcParameters)
        tcCount += 1
    msgStr = 'Imported ' + str(crCount) + ' concept references, and ' + str(
        tcCount) + ' task characteristics.'
    return msgStr
Пример #7
0
  def get_dbproxy(self, session_id):
    """
    Searches the MySQLDatabaseProxy instance associated with the session ID.
    :param
      session_id: The session ID
    :type
      session_id: str
    :rtype
      MySQLDatabaseProxy
    :return
      The MySQLDatabaseProxy instance associated with the session ID
    :raise
      CairisHTTPError
    """
    if session_id:
      b = Borg()
      try:
        db_proxy = b.get_dbproxy(session_id)
      except SessionNotFound as ex:
        raise NoSessionError(ex)

      if isinstance(db_proxy, MySQLDatabaseProxy):
        if db_proxy.conn is None:
          db_proxy.reconnect(session_id=session_id)
        return db_proxy
      else:
        raise CairisHTTPError(
          status_code=CONFLICT,
          message='The database connection was not properly set up. Please try to reset the connection.'
        )
    else:
      raise MissingParameterHTTPError(
        param_names=['session_id']
      )
Пример #8
0
    def get_dbproxy(self, session_id):
        """
        Searches the MySQLDatabaseProxy instance associated with the session ID.
        :param
            session_id: The session ID
        :type
            session_id: str
        :rtype
            MySQLDatabaseProxy
        :return
            The MySQLDatabaseProxy instance associated with the session ID
        :raise
            CairisHTTPError
        """
        if session_id:
            b = Borg()
            db_proxy = b.get_dbproxy(session_id)

            if db_proxy is None:
                raise CairisHTTPError(
                    status_code=httplib.CONFLICT,
                    message='The database connection could not be created.')
            elif isinstance(db_proxy, MySQLDatabaseProxy):
                db_proxy.reconnect(session_id=session_id)
                return db_proxy
            else:
                raise CairisHTTPError(
                    status_code=httplib.CONFLICT,
                    message=
                    'The database connection was not properly set up. Please try to reset the connection.'
                )
        else:
            raise MissingParameterHTTPError(param_names=['session_id'])
Пример #9
0
    def get_dbproxy(self, session_id):
        """
    Searches the MySQLDatabaseProxy instance associated with the session ID.
    :param
      session_id: The session ID
    :type
      session_id: str
    :rtype
      MySQLDatabaseProxy
    :return
      The MySQLDatabaseProxy instance associated with the session ID
    :raise
      CairisHTTPError
    """
        if session_id:
            b = Borg()
            try:
                db_proxy = b.get_dbproxy(session_id)
            except SessionNotFound as ex:
                raise NoSessionError(ex)

            if isinstance(db_proxy, MySQLDatabaseProxy):
                if db_proxy.conn is None:
                    db_proxy.reconnect(session_id=session_id)
                return db_proxy
            else:
                raise CairisHTTPError(
                    status_code=CONFLICT,
                    message=
                    'The database connection was not properly set up. Please try to reset the connection.'
                )
        else:
            raise MissingParameterHTTPError(param_names=['session_id'])
Пример #10
0
    def get_dbproxy(self, session_id):
        """
        Searches the MySQLDatabaseProxy instance associated with the session ID.
        :param
            session_id: The session ID
        :type
            session_id: str
        :rtype
            MySQLDatabaseProxy
        :return
            The MySQLDatabaseProxy instance associated with the session ID
        :raise
            CairisHTTPError
        """
        if session_id:
            b = Borg()
            db_proxy = b.get_dbproxy(session_id)

            if db_proxy is None:
                raise CairisHTTPError(
                    status_code=httplib.CONFLICT,
                    message='The database connection could not be created.'
                )
            elif isinstance(db_proxy, MySQLDatabaseProxy):
                db_proxy.reconnect(session_id=session_id)
                return db_proxy
            else:
                raise CairisHTTPError(
                    status_code=httplib.CONFLICT,
                    message='The database connection was not properly set up. Please try to reset the connection.'
                )
        else:
            raise MissingParameterHTTPError(
                param_names=['session_id']
            )
Пример #11
0
def exportSecurityPatterns(outFileName, session_id=None):
    b = Borg()
    buf = b.get_dbproxy(session_id).securityPatternsToXml()
    rFile = open(outFileName, 'w')
    rFile.write(buf)
    rFile.close()
    return 'Exported security patterns'
Пример #12
0
def exportRedmineUseCases(outFile, session_id=None):
    b = Borg()
    rmUseCases = b.get_dbproxy(session_id).redmineUseCases()

    buf = ''
    noUseCases = 0
    ucDict = {
        'ID': [],
        'DA': [],
        'NM': [],
        'PS': [],
        'NC': [],
        'LC': [],
        'CAP': [],
        'TMS': []
    }

    for ucName, ucShortCode, ucAuthor, ucTxt in rmUseCases:
        ucCat = re.sub('[0-9]', '', ucShortCode)
        ucDict[ucCat].append((ucName, ucShortCode, ucAuthor, ucTxt))
    fnlCats = ucDict.keys()
    fnlCats.sort()

    for fnlCat in fnlCats:
        for ucName, ucShortCode, ucAuthor, ucTxt in ucDict[fnlCat]:
            buf += ucTxt + '\n'
            noUseCases += 1
    ucFile = open(outFile, 'w')
    ucFile.write(buf)
    ucFile.close()
    return 'Exported ' + str(noUseCases) + ' use cases.'
Пример #13
0
def importModelFile(importFile, isOverwrite=1, session_id=None):
    try:
        b = Borg()
        db_proxy = b.dbProxy
        if (session_id != None):
            db_proxy = b.get_dbproxy(session_id)

        modelTxt = ''
        if isOverwrite == 1:
            db_proxy.clearDatabase(session_id)
            modelTxt += importTVTypeFile(
                importFile, isOverwrite, session_id=session_id) + '  '
        modelTxt += importDomainValuesFile(importFile, session_id) + ' '
        modelTxt += importProjectFile(importFile, session_id) + ' '
        modelTxt += importRiskAnalysisFile(importFile, session_id) + ' '
        modelTxt += importUsabilityFile(importFile, session_id) + ' '
        modelTxt += importRequirementsFile(importFile, session_id) + ' '
        modelTxt += importAssociationsFile(importFile, session_id) + ' '
        modelTxt += importSynopsesFile(importFile, session_id) + ' '
        modelTxt += importMisusabilityFile(importFile, session_id) + ' '
        modelTxt += importDataflowsFile(importFile, session_id) + ' '
        modelTxt += importLocationsFile(importFile, session_id)
        return modelTxt
    except xml.sax.SAXException as e:
        raise ARMException("Error parsing" + importFile + ": " +
                           e.getMessage())
Пример #14
0
def importRequirements(dpParameterSet, goalParameterSet, obsParameterSet,
                       reqParameterSet, cmParameterSet, session_id):
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    dpCount = 0
    for dpParameters in dpParameterSet:
        objtId = db_proxy.existingObject(dpParameters.name(), 'domainproperty')
        if objtId == -1:
            db_proxy.addDomainProperty(dpParameters)
        else:
            dpParameters.setId(objtId)
            db_proxy.updateDomainProperty(dpParameters)
        dpCount += 1

    goalCount = 0
    for goalParameters in goalParameterSet:
        objtId = db_proxy.existingObject(goalParameters.name(), 'goal')
        if objtId == -1:
            db_proxy.addGoal(goalParameters)
        else:
            goalParameters.setId(objtId)
            db_proxy.updateGoal(goalParameters)
        goalCount += 1

    obsCount = 0
    for obsParameters in obsParameterSet:
        objtId = db_proxy.existingObject(obsParameters.name(), 'obstacle')
        if objtId == -1:
            db_proxy.addObstacle(obsParameters)
        else:
            obsParameters.setId(objtId)
            db_proxy.updateObstacle(obsParameters)
        obsCount += 1

    reqCount = 0
    for req, refName, refType in reqParameterSet:
        objtId = db_proxy.existingObject(req.name(), 'requirement')
        if objtId == -1:
            isAsset = True
            if (refType == 'environment'):
                isAsset = False
            db_proxy.addRequirement(req, refName, isAsset)
        else:
            db_proxy.updateRequirement(req)
        reqCount += 1

    cmCount = 0
    for cmParameters in cmParameterSet:
        objtId = db_proxy.existingObject(cmParameters.name(), 'countermeasure')
        if objtId == -1:
            db_proxy.addCountermeasure(cmParameters)
        else:
            cmParameters.setId(objtId)
            db_proxy.updateCountermeasure(cmParameters)
        cmCount += 1
    msgStr = 'Imported ' + str(dpCount) + ' domain properties, ' + str(
        goalCount) + ' goals, ' + str(obsCount) + ' obstacles, ' + str(
            reqCount) + ' requirements, and ' + str(
                cmCount) + ' countermeasures.'
    return msgStr
Пример #15
0
def importDiagramsNetAssetModel(importFile,envName,session_id):
  objts, assocs = importDiagramsNetFile(importFile,'asset')
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)

  newAssetCount = 0
  for asset in objts:
    assetName = asset['name']
    assetType = asset['type'].capitalize()

    if (db_proxy.existingObject(assetName,'asset') == -1):
      db_proxy.addAsset(AssetParameters(assetName,asset['short_code'],asset['description'],asset['significance'],assetType,0,'',[],[],[AssetEnvironmentProperties(envName,asset['properties'],asset['rationale'])]))
      newAssetCount += 1

  newAssocCount = 0
  for assoc in assocs:
    headAsset = assoc['head']
    tailAsset = assoc['tail']
    try:
      db_proxy.checkAssetAssociation(envName,headAsset,tailAsset)
      db_proxy.addClassAssociation(ClassAssociationParameters(envName,headAsset,'asset',assoc['headNav'],assoc['headType'],'*','','','*',assoc['tailType'],assoc['tailNav'],'asset',tailAsset,'To be defined'))
      newAssocCount += 1
    except DatabaseProxyException as ex:
      if str(ex.value).find('already exists') == -1:
        raise ARMException(str(ex.value))
  
  msgStr = 'Imported ' + str(newAssetCount) + ' asset'
  if (newAssetCount != 1): msgStr += 's'
  msgStr += ', and ' + str(newAssocCount) + ' asset association'
  if (newAssocCount != 1): msgStr += 's'
  msgStr += '.'
  return msgStr
Пример #16
0
def importSecurityPatterns(taps, spps, vts, session_id=None):
    noOfTaps = len(taps)
    noOfSpps = len(spps)

    b = Borg()
    db_proxy = b.get_dbproxy(session_id)

    msgStr = 'No patterns imported'
    if (noOfTaps > 0):
        tapId = 0
        db_proxy.deleteSecurityPattern(-1)
        db_proxy.deleteTemplateAsset(-1)

        for vt in vts:
            db_proxy.addValueType(vt)

        for tap in taps:
            tap.setId(tapId)
            db_proxy.addTemplateAsset(tap)
            tapId += 1

        if (noOfSpps > 0):
            spId = 0
            db_proxy.deleteSecurityPattern(-1)
            for sp in spps:
                sp.setId(spId)
                db_proxy.addSecurityPattern(sp)
                spId += 1
            msgStr = 'Imported ' + str(
                noOfTaps) + ' template assets and ' + str(
                    noOfSpps) + ' security patterns'
    return msgStr
Пример #17
0
def importLocations(locations, session_id):
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    msgStr = ''
    for locs in locations:
        db_proxy.addLocations(locs)
        msgStr = 'Imported ' + locs.name() + '. '
    return msgStr
Пример #18
0
def importProcesses(docs, codes, memos, quotations, codeNetworks, processes,
                    ics, intentions, contributions, session_id):
    noOfDocs = len(docs)
    noOfCodes = len(codes)
    noOfMemos = len(memos)
    noOfQuotations = len(quotations)
    noOfCNs = len(codeNetworks)
    noOfProcs = len(processes)
    noOfICs = len(ics)
    noOfIntentions = len(intentions)
    noOfContributions = len(contributions)

    b = Borg()
    db_proxy = b.get_dbproxy(session_id)

    for dp in docs:
        db_proxy.addInternalDocument(dp)

    for cp in codes:
        db_proxy.addCode(cp)

    for mp in memos:
        db_proxy.addMemo(mp)

    for q in quotations:
        db_proxy.addQuotation(q)

    # Necessary because adding document memos currently overwrites the existing memo text
    for mp in memos:
        db_proxy.updateMemo(mp)

    for cn in codeNetworks:
        personaName = cn[0]
        rtName = cn[1]
        fromCode = cn[2]
        toCode = cn[3]
        db_proxy.addCodeRelationship(personaName, fromCode, toCode, rtName)

    for p in processes:
        db_proxy.addImpliedProcess(p)

    for ic in ics:
        db_proxy.addImpliedCharacteristic(ic)

    for intention in intentions:
        db_proxy.addIntention(intention)

    for contribution in contributions:
        db_proxy.addContribution(contribution)

    msgStr = 'Imported ' + str(noOfDocs) + ' internal documents, ' + str(
        noOfCodes) + ' codes, ' + str(noOfMemos) + ' memos, ' + str(
            noOfQuotations) + ' quotations, ' + str(
                noOfCNs) + ' code relationships, ' + str(
                    noOfProcs) + ' implied processes, ' + str(
                        noOfIntentions) + ' intentions, and ' + str(
                            noOfContributions) + ' contributions.'
    return msgStr
Пример #19
0
def exportGRL(outFileName,personaNames,taskNames,envName,session_id = None):
  b = Borg()
  pStr = personaNames
  tStr = taskNames
  buf = b.get_dbproxy(session_id).pcToGrl(pStr,tStr,envName)
  rFile = open(outFileName,'w')
  rFile.write(buf)
  rFile.close()
  return 'Exported GRL for ' + pStr + ' in tasks ' + tStr + ' situated in environment ' + envName
Пример #20
0
 def __init__(self, session_id=None):
     b = Borg()
     self.dbProxy = b.get_dbproxy(session_id)
     self.configDir = b.configDir
     self.theCharacteristicSynopses = []
     self.theReferenceSynopses = []
     self.theStepSynopses = []
     self.theReferenceContributions = []
     self.theUseCaseContributions = []
Пример #21
0
def importUsability(personaParameterSet, edParameterSet, drParameterSet,
                    pcParameterSet, taskParameterSet, session_id):
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    personaCount = 0
    for personaParameters in personaParameterSet:
        objtId = db_proxy.existingObject(personaParameters.name(), 'persona')
        if objtId == -1:
            db_proxy.addPersona(personaParameters)
        else:
            personaParameters.setId(objtId)
            db_proxy.updatePersona(personaParameters)
        personaCount += 1

    edCount = 0
    for edParameters in edParameterSet:
        objtId = db_proxy.existingObject(edParameters.name(),
                                         'external_document')
        if objtId == -1:
            db_proxy.addExternalDocument(edParameters)
        else:
            edParameters.setId(objtId)
            db_proxy.updateExternalDocument(edParameters)
        edCount += 1

    drCount = 0
    for drParameters in drParameterSet:
        objtId = db_proxy.existingObject(drParameters.name(),
                                         'document_reference')
        if objtId == -1:
            db_proxy.addDocumentReference(drParameters)
        else:
            drParameters.setId(objtId)
            db_proxy.updateDocumentReference(drParameters)
        drCount += 1

    taskCount = 0
    for taskParameters in taskParameterSet:
        objtId = db_proxy.existingObject(taskParameters.name(), 'task')
        if objtId == -1:
            db_proxy.addTask(taskParameters)
        else:
            taskParameters.setId(objtId)
            db_proxy.updateTask(taskParameters)
        taskCount += 1

    pcCount = 0
    for pcParameters in pcParameterSet:
        db_proxy.addPersonaCharacteristic(pcParameters)
        pcCount += 1

    msgStr = 'Imported ' + str(personaCount) + ' personas, ' + str(
        edCount) + ' external documents, ' + str(
            drCount) + ' document references, ' + str(
                pcCount) + ' persona characteristics, ' + str(
                    taskCount) + ' tasks.'
    return msgStr
 def __init__(self, session_id=None):
     b = Borg()
     self.dbProxy = b.get_dbproxy(session_id)
     self.configDir = b.configDir
     self.theCharacteristicSynopses = []
     self.theReferenceSynopses = []
     self.theStepSynopses = []
     self.theReferenceContributions = []
     self.theUseCaseContributions = []
Пример #23
0
def addDefaultAsset(objtName,envName,session_id,assetType= 'Information'):
  assetDesc = 'To be defined'
  shortCode = 'TBD'
  significanceText = 'To be defined'
  b = Borg()
  dbProxy = b.get_dbproxy(session_id)
  envProps = [AssetEnvironmentProperties(envName,[0,0,1,0,0,0,0,0],['None','None','To be defined','None','None','None','None','None'])]
  p = AssetParameters(objtName,shortCode,assetDesc,significanceText,assetType,False,'',[],[],envProps)
  return dbProxy.addAsset(p)
Пример #24
0
def exportGRL(outFileName,personaNames,taskNames,envName,session_id = None):
  b = Borg()
  pStr = ', '.join(personaNames)
  tStr = ', '.join(taskNames)
  buf = b.get_dbproxy(session_id).pcToGrl(pStr,tStr,envName)
  rFile = open(outFileName,'w')
  rFile.write(buf)
  rFile.close()
  return 'Exported GRL for ' + pStr + ' in tasks ' + tStr + ' situated in environment ' + envName
Пример #25
0
def importRequirements(dpParameterSet,goalParameterSet,obsParameterSet,reqParameterSet,cmParameterSet,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  dpCount = 0
  for dpParameters in dpParameterSet:
    objtId = db_proxy.existingObject(dpParameters.name(),'domainproperty')
    if objtId == -1:
      db_proxy.addDomainProperty(dpParameters)
    else:
      dpParameters.setId(objtId)
      db_proxy.updateDomainProperty(dpParameters)
    dpCount += 1

  goalCount = 0
  for goalParameters in goalParameterSet:
    objtId = db_proxy.existingObject(goalParameters.name(),'goal')
    if objtId == -1:
      db_proxy.addGoal(goalParameters)
    else:
      goalParameters.setId(objtId)
      db_proxy.updateGoal(goalParameters)
    goalCount += 1

  obsCount = 0
  for obsParameters in obsParameterSet:
    objtId = db_proxy.existingObject(obsParameters.name(),'obstacle')
    if objtId == -1:
      db_proxy.addObstacle(obsParameters)
    else:
      obsParameters.setId(objtId)
      db_proxy.updateObstacle(obsParameters)
    obsCount += 1

  reqCount = 0
  for req,refName,refType in reqParameterSet:
    objtId = db_proxy.existingObject(req.name(),'requirement')
    if objtId == -1:
      isAsset = True
      if (refType == 'environment'):
        isAsset = False
      db_proxy.addRequirement(req,refName,isAsset)
    else:
      db_proxy.updateRequirement(req)
    reqCount += 1

  cmCount = 0
  for cmParameters in cmParameterSet:
    objtId = db_proxy.existingObject(cmParameters.name(),'countermeasure')
    if objtId == -1:
      db_proxy.addCountermeasure(cmParameters)
    else:
      cmParameters.setId(objtId)
      db_proxy.updateCountermeasure(cmParameters)
    cmCount += 1
  msgStr = 'Imported ' + str(dpCount) + ' domain properties, ' + str(goalCount) + ' goals, ' + str(obsCount) + ' obstacles, ' + str(reqCount) + ' requirements, and ' + str(cmCount) + ' countermeasures.'
  return msgStr
Пример #26
0
def validate_proxy(session, id, request=None, conf=None):
    """
    Validates that the DB proxy object is properly set up
    :param session: The session object of the request
    :param id: The session ID provided by the user
    :param conf: A dictionary containing configuration settings for direct authenrication
    :return: The MySQLDatabaseProxy object associated to the session
    :rtype : MySQLDatabaseProxy
    :raise CairisHTTPError: Raises a CairisHTTPError when the database could not be properly set up
    """

    if session is not None:
        session_id = session.get('session_id', -1)
    else:
        session_id = None

    if conf is not None:
        if isinstance(conf, dict):
            try:
                db_proxy = MySQLDatabaseProxy(host=conf['dbhost'], port=conf['dbport'], user=conf['dbuser'], passwd=conf['dbpasswd'], db=conf['dbname'])
                if db_proxy is not None:
                    return db_proxy
                else:
                    raise CairisHTTPError(
                        status_code=httplib.CONFLICT,
                        message='The database connection could not be created.'
                    )
            except DatabaseProxyException:
                raise CairisHTTPError(
                    status_code=httplib.BAD_REQUEST,
                    message='The provided settings are invalid and cannot be used to create a database connection'
                )

    if not (session_id is None and id is None):
        if id is None:
            id = session_id
        b = Borg()
        db_proxy = b.get_dbproxy(id)

        if db_proxy is None:
            raise CairisHTTPError(
                status_code=httplib.CONFLICT,
                message='The database connection could not be created.'
            )
        elif isinstance(db_proxy, MySQLDatabaseProxy):
            return db_proxy
        else:
            raise CairisHTTPError(
                status_code=httplib.CONFLICT,
                message='The database connection was not properly set up. Please try to reset the connection.'
            )
    else:
        raise CairisHTTPError(
            status_code=httplib.BAD_REQUEST,
            message='The session is neither started or no session ID is provided with the request.'
        )
Пример #27
0
def importAttackTreeString(buf,session_id = None):
  try:
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    modelTxt = ''
    modelTxt += importRequirementsString(buf,session_id) + ' '
    modelTxt += importAssociationsString(buf,session_id) + ' '
    return modelTxt
  except xml.sax.SAXException as e:
    raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
Пример #28
0
def exportRedmineRequirements(outFileName, session_id=None):
    b = Borg()
    reqs = b.get_dbproxy(session_id).getRedmineRequirements()

    envNames = list(reqs.keys())
    envNames.sort()
    outputDir = os.environ['OUTPUT_DIR']

    outputBuf = ''
    for envName in envNames:
        envReqs = reqs[envName]
        envCode = envReqs[0][5]
        buf = 'h1. ' + envName + ' requirements\n\n'

        cmFile = envCode + '_conceptMap'
        buildConceptMap(b.get_dbproxy(session_id), envName, cmFile)
        buf += '!' + cmFile + '!\n\n'

        buf += '|*Short Name*|*Comments*|*Scenarios*|*Use Cases*|*Backlog*|\n'

        for envReq in envReqs:
            reqName = envReq[0]
            reqOrig = envReq[1]
            reqPri = envReq[2]
            reqComments = envReq[3]
            reqDesc = envReq[4]
            reqScs = envReq[6]
            reqUcs = envReq[7]
            reqBis = envReq[8]

            buf += '|/2.*' + reqName + '*\n' + reqPri + ', ' + reqOrig + '|\\4.' + reqDesc + '|\n|' + reqComments + '|' + listToString(
                reqScs) + '|' + listToString(reqUcs) + '|' + listToString(
                    reqBis) + '|\n'
        envFile = open(outputDir + '/' + envCode + '-requirements.txt', 'w,')
        envFile.write(buf)
        envFile.close()
        outputBuf += buf + '\n'

    outputFile = open(outFileName, 'w')
    outputFile.write(outputBuf)
    outputFile.close()
    return 'Exported requirements'
Пример #29
0
    def __init__(self, session_id=None):
        b = Borg()
        self.dbProxy = b.get_dbproxy(session_id)
        self.configDir = b.configDir
        self.theManualAssociations = set([])
        self.theGoalAssociations = []
        self.theDependencyAssociations = []

        self.resetManualAssociationAttributes()
        self.resetGoalAssociationAttributes()
        self.resetDependencyAssociationAttributes()
Пример #30
0
def importSecurityPatterns(taps, spps, vts, session_id=None):
    noOfTaps = len(taps)
    noOfSpps = len(spps)

    b = Borg()
    db_proxy = b.get_dbproxy(session_id)

    db_proxy.addSecurityPatterns(vts, taps, spps)
    msgStr = 'Imported ' + str(noOfTaps) + ' template assets and ' + str(
        noOfSpps) + ' security patterns'
    return msgStr
    def __init__(self, session_id=None):
        b = Borg()
        self.dbProxy = b.get_dbproxy(session_id)
        self.configDir = b.configDir
        self.theManualAssociations = set([])
        self.theGoalAssociations = []
        self.theDependencyAssociations = []

        self.resetManualAssociationAttributes()
        self.resetGoalAssociationAttributes()
        self.resetDependencyAssociationAttributes()
Пример #32
0
def extractPackage(session_id = None, ignoreValidityCheck = 0):
  buf = io.BytesIO()
  zf = zipfile.ZipFile(buf,'w',zipfile.ZIP_DEFLATED)
  zf.writestr('model.xml',extractModel(session_id,ignoreValidityCheck))

  b = Borg()
  apNames = b.get_dbproxy(session_id).getDimensionNames('component_view','')
  for apName in apNames:
    apBuf = b.get_dbproxy(session_id).architecturalPatternToXml(apName)
    zf.writestr(apName + '.xml',apBuf)

  spNames = b.get_dbproxy(session_id).getDimensionNames('securitypattern','')
  if (len(spNames) > 0):
    spBuf = b.get_dbproxy(session_id).securityPatternsToXml()
    zf.writestr('security_patterns.xml',spBuf)

  for imgName,imgContent in b.get_dbproxy(session_id).getImages():
    zf.writestr(imgName,b64decode(imgContent))
  zf.close()
  return buf.getvalue()
Пример #33
0
def importDataflows(dataflows, session_id):
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    for df in dataflows:
        db_proxy.addDataFlow(df)
    noOfDataflows = len(dataflows)
    msgStr = 'Imported ' + str(noOfDataflows) + ' dataflow'
    if (noOfDataflows != 1):
        msgStr += 's'
    msgStr += '. '
    return msgStr
Пример #34
0
def addDefaultUseCase(objtName,envName,session_id):
  b = Borg()
  dbProxy = b.get_dbproxy(session_id)
  roleId = dbProxy.existingObject('Unknown','role')
  if (roleId == -1):
    roleId = dbProxy.addRole(RoleParameters('Unknown','Stakeholder','UNKNOWN','Unknown role',None))
  
  s = Steps()
  s.append(Step('Undefined'))
  envProps = [UseCaseEnvironmentProperties(envName,'To be defined',s,'To be defined')]
  p = UseCaseParameters(objtName,'Unknown','TBC',['Unknown'],'To be defined',[],envProps)
  return dbProxy.addUseCase(p)
Пример #35
0
def exportRedmineRequirements(outFileName,session_id = None):
  b = Borg()
  reqs = b.get_dbproxy(session_id).getRedmineRequirements()

  envNames = reqs.keys()
  envNames.sort()
  outputDir = os.environ['OUTPUT_DIR']

  outputBuf = ''
  for envName in envNames:
    envReqs = reqs[envName]
    envCode = envReqs[0][5]
    buf = 'h1. ' + envName + ' requirements\n\n' 

    cmFile = envCode + '_conceptMap'
    buildConceptMap(b.get_dbproxy(session_id),envName,cmFile)
    buf +='!' + cmFile + '!\n\n'
    
    buf += '|*Short Name*|*Comments*|*Scenarios*|*Use Cases*|*Backlog*|\n'

    for envReq in envReqs:
      reqName = envReq[0]
      reqOrig = envReq[1]
      reqPri = envReq[2]
      reqComments = envReq[3]
      reqDesc = envReq[4]
      reqScs = envReq[6]
      reqUcs = envReq[7]
      reqBis = envReq[8]
   
      buf += '|/2.*' + reqName + '*\n' + reqPri + ', ' + reqOrig + '|\\4.' + reqDesc + '|\n|' + reqComments + '|' + listToString(reqScs) + '|' + listToString(reqUcs) + '|' + listToString(reqBis) + '|\n'
    envFile = open(outputDir + '/' + envCode + '-requirements.txt','w,')
    envFile.write(buf)
    envFile.close()
    outputBuf += buf + '\n'

  outputFile = open(outFileName,'w')
  outputFile.write(outputBuf)
  outputFile.close()
  return 'Exported requirements'
Пример #36
0
def importDomainValues(tvValues, rvValues, cvValues, svValues, lvValues,
                       capValues, motValues, session_id):
    noOfTvs = len(tvValues)
    noOfRvs = len(rvValues)
    noOfCvs = len(cvValues)
    noOfSvs = len(svValues)
    noOfLvs = len(lvValues)
    noOfCapVs = len(capValues)
    noOfMotVs = len(motValues)

    b = Borg()
    db_proxy = b.get_dbproxy(session_id)

    tId = 0
    if (noOfTvs > 0):
        for tvp in tvValues:
            tvp.setId(tId)
            db_proxy.updateValueType(tvp)
            tId += 1
    tId = 1
    if (noOfRvs > 0):
        for rvp in rvValues:
            rvp.setId(tId)
            db_proxy.updateValueType(rvp)
            tId += 1
    tId = 0
    if (noOfCvs > 0):
        for cvp in cvValues:
            cvp.setId(tId)
            db_proxy.updateValueType(cvp)
            tId += 1
    tId = 0
    if (noOfSvs > 0):
        for svp in svValues:
            svp.setId(tId)
            db_proxy.updateValueType(svp)
            tId += 1
    tId = 0
    if (noOfLvs > 0):
        for lvp in lvValues:
            lvp.setId(tId)
            db_proxy.updateValueType(lvp)
            tId += 1
    if (noOfCapVs > 0):
        for capvp in capValues:
            db_proxy.addValueType(capvp)
    if (noOfMotVs > 0):
        for motvp in motValues:
            db_proxy.addValueType(motvp)

    msgStr = 'Imported domain values'
    return msgStr
Пример #37
0
def exportRedmineScenarios(outFile,session_id = None):
  b = Borg()
  rmScenarios = b.get_dbproxy(session_id).redmineScenarios()

  buf = ''
  noScenarios = 0
  for sName,sEnv,sTxt in rmScenarios:
    buf += sTxt + '\n'
    noScenarios += 1
  sFile = open(outFile,'w')
  sFile.write(buf)
  sFile.close()
  return 'Exported ' + str(noScenarios) + ' scenarios.'
Пример #38
0
def importSecurityPatterns(taps,spps,vts,session_id=None):
  noOfTaps = len(taps)
  noOfSpps = len(spps)

  b = Borg()
  db_proxy = b.get_dbproxy(session_id)

  for tap in taps:
    if (db_proxy.nameExists(tap.name(),'asset')):
      raise ARMException("Cannot import template asset with name " + tap.name() + " as asset with same name already exists.")
  db_proxy.addSecurityPatterns(vts,taps,spps)
  msgStr =  'Imported ' + str(noOfTaps) + ' template assets and ' + str(noOfSpps) + ' security patterns'
  return msgStr
Пример #39
0
def importTrustBoundaries(tbs, session_id):
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    for tb in tbs:
        db_proxy.addTrustBoundary(tb)
    noOfTrustBoundaries = len(tbs)
    msgStr = 'Imported ' + str(noOfTrustBoundaries) + ' trust boundar'
    if (noOfTrustBoundaries != 1):
        msgStr += 'ies'
    else:
        msgStr += 'y'
    msgStr += '.'
    return msgStr
Пример #40
0
def exportRedmineScenarios(outFile,session_id = None):
  b = Borg()
  rmScenarios = b.get_dbproxy(session_id).redmineScenarios()

  buf = ''
  noScenarios = 0
  for sName,sEnv,sTxt in rmScenarios:
    buf += sTxt + '\n'
    noScenarios += 1
  sFile = open(outFile,'w')
  sFile.write(buf)
  sFile.close()
  return 'Exported ' + str(noScenarios) + ' scenarios.'
Пример #41
0
def importDomainValues(tvValues,rvValues,cvValues,svValues,lvValues,capValues,motValues,session_id):
  noOfTvs = len(tvValues)
  noOfRvs = len(rvValues)
  noOfCvs = len(cvValues)
  noOfSvs = len(svValues)
  noOfLvs = len(lvValues)
  noOfCapVs = len(capValues)
  noOfMotVs = len(motValues)
 
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)

  tId = 0
  if (noOfTvs > 0):
    for tvp in tvValues:
      tvp.setId(tId)
      db_proxy.updateValueType(tvp)
      tId += 1
  tId =1
  if (noOfRvs > 0):
    for rvp in rvValues:
      rvp.setId(tId)
      db_proxy.updateValueType(rvp)
      tId += 1
  tId = 0
  if (noOfCvs > 0):
    for cvp in cvValues:
      cvp.setId(tId)
      db_proxy.updateValueType(cvp)
      tId += 1
  tId = 0
  if (noOfSvs > 0):
    for svp in svValues:
      svp.setId(tId)
      db_proxy.updateValueType(svp)
      tId += 1
  tId = 0
  if (noOfLvs > 0):
    for lvp in lvValues:
      lvp.setId(tId)
      db_proxy.updateValueType(lvp)
      tId += 1
  if (noOfCapVs > 0):
    for capvp in capValues:
      db_proxy.addValueType(capvp)
  if (noOfMotVs > 0):
    for motvp in motValues:
      db_proxy.addValueType(motvp)

  msgStr = 'Imported domain values'
  return msgStr
Пример #42
0
def importProcesses(docs,codes,memos,quotations,codeNetworks,processes,ics,intentions,contributions,session_id):
  noOfDocs = len(docs)
  noOfCodes = len(codes)
  noOfMemos = len(memos)
  noOfQuotations = len(quotations)
  noOfCNs = len(codeNetworks)
  noOfProcs = len(processes)
  noOfICs = len(ics)
  noOfIntentions = len(intentions)
  noOfContributions = len(contributions)

  b = Borg()
  db_proxy = b.get_dbproxy(session_id)

  for dp in docs:
    db_proxy.addInternalDocument(dp)

  for cp in codes:
    db_proxy.addCode(cp)

  for mp in memos:
    db_proxy.addMemo(mp)

  for q in quotations:
    db_proxy.addQuotation(q)

  # Necessary because adding document memos currently overwrites the existing memo text
  for mp in memos:
    db_proxy.updateMemo(mp)

  for cn in codeNetworks:
    personaName = cn[0]
    rtName = cn[1]
    fromCode = cn[2]
    toCode = cn[3]
    db_proxy.addCodeRelationship(personaName,fromCode,toCode,rtName)

  for p in processes:
    db_proxy.addImpliedProcess(p)

  for ic in ics:
    db_proxy.addImpliedCharacteristic(ic)

  for intention in intentions:
    db_proxy.addIntention(intention)

  for contribution in contributions:
    db_proxy.addContribution(contribution)

  msgStr = 'Imported ' + str(noOfDocs) + ' internal documents, ' + str(noOfCodes) + ' codes, ' + str(noOfMemos) + ' memos, ' + str(noOfQuotations) + ' quotations, ' + str(noOfCNs) + ' code relationships, ' + str(noOfProcs) + ' implied processes, ' + str(noOfIntentions) + ' intentions, and ' + str(noOfContributions) + ' contributions.'
  return msgStr
Пример #43
0
def exportModel(outFile=None, session_id=None):
    b = Borg()
    xmlBuf = '<?xml version="1.0"?>\n<!DOCTYPE cairis_model PUBLIC "-//CAIRIS//DTD MODEL 1.0//EN" "http://cairis.org/dtd/cairis_model.dtd">\n<cairis_model>\n\n\n'
    xmlBuf += b.get_dbproxy(session_id).tvTypesToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).domainValuesToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).projectToXml(0) + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).riskAnalysisToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).usabilityToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).goalsToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).associationsToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).misusabilityToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(session_id).dataflowsToXml(0)[0] + '\n\n'
    xmlBuf += b.get_dbproxy(
        session_id).locationsToXml()[0] + '\n\n</cairis_model>'
    if outFile == None:
        return xmlBuf
    else:
        f = codecs.open(outFile, 'w', 'utf-8')
        f.write(xmlBuf)
        f.close()
        return 'Exported model'
Пример #44
0
  def __init__(self,session_id = None):
    b = Borg()
    self.dbProxy = b.get_dbproxy(session_id)
    self.configDir = b.configDir
    self.theDomainProperties = []
    self.theGoals = []
    self.theObstacles = []
    self.theRequirements = []
    self.theCountermeasures = []

    self.resetDomainPropertyAttributes()
    self.resetGoalAttributes()
    self.resetObstacleAttributes()
    self.resetRequirementAttributes()
    self.resetGoalAttributes()
    self.resetCountermeasureAttributes()
Пример #45
0
def importAssets(valueTypes,assets,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  vtCount = 0
  taCount = 0

  for vtParameters in valueTypes:
    vtId = db_proxy.existingObject(vtParameters.name(),vtParameters.type())
    if vtId == -1:
      db_proxy.addValueType(vtParameters)
      vtCount += 1
  for taParameters in assets:
    taId = db_proxy.existingObject(taParameters.name(),'template_asset')
    if taId == -1:
      db_proxy.addTemplateAsset(taParameters)
      taCount += 1
  return 'Imported ' + str(vtCount) + ' value types, and ' + str(taCount) + ' template assets.'
Пример #46
0
def importSynopses(charSyns,refSyns,stepSyns,refConts,ucConts,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  for cs in charSyns:
    db_proxy.addCharacteristicSynopsis(cs)
  for rs in refSyns:
    db_proxy.addReferenceSynopsis(rs)
  for ucName,envName,stepNo,synName,aType,aName in stepSyns:
    db_proxy.addStepSynopsis(ucName,envName,stepNo,synName,aType,aName)
  db_proxy.conn.commit()
  for rc in refConts:
    db_proxy.addReferenceContribution(rc)
  for uc in ucConts:
    db_proxy.addUseCaseContribution(uc)

  msgStr = 'Imported ' + str(len(charSyns)) + ' characteristic synopses, ' + str(len(refSyns)) + ' reference synopses, ' + str(len(stepSyns)) + ' step synopses, ' + str(len(refConts)) + ' reference contributions, and ' + str(len(ucConts)) + ' use case contributions.'
  return msgStr
Пример #47
0
def importAssociations(maParameterSet,gaParameterSet,depParameterSet,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  maCount = 0
  for tTable,fromId,toId,refType in maParameterSet:
    db_proxy.addTrace(tTable,fromId,toId,refType)
    maCount += 1
  gaCount = 0
  for gaParameters in gaParameterSet:
    db_proxy.addGoalAssociation(gaParameters)
    gaCount += 1
  depCount = 0
  for depParameters in depParameterSet:
    db_proxy.addDependency(depParameters)
    depCount += 1
  msgStr = 'Imported ' + str(maCount) + ' manual associations, ' + str(gaCount) + ' goal associations, and ' + str(depCount) + ' dependency associations.'
  return msgStr
Пример #48
0
def importTVTypes(vulTypes,threatTypes,isOverwrite,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  noOfVts = len(vulTypes)
  noOfTts = len(threatTypes)
  if (noOfVts > 0):
    if (isOverwrite):
      db_proxy.deleteVulnerabilityType(-1)
    for vt in vulTypes:
      db_proxy.addValueType(vt)
  if (noOfTts > 0):
    if (isOverwrite):
      db_proxy.deleteThreatType(-1)
    for tt in threatTypes:
      db_proxy.addValueType(tt)
  msgStr = 'Imported ' + str(noOfVts) + ' vulnerability types and ' + str(noOfTts) + ' threat types.'
  return msgStr
Пример #49
0
def importModelFile(importFile,isOverwrite = 1,session_id = None):
  try:
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    modelTxt = ''
    if isOverwrite == 1:
      db_proxy.clearDatabase(session_id)
      modelTxt += importTVTypeFile(importFile,isOverwrite,session_id = session_id) + '  '
    modelTxt += importDomainValuesFile(importFile,session_id) + ' '
    modelTxt += importProjectFile(importFile,session_id) + ' '
    modelTxt += importRiskAnalysisFile(importFile,session_id) + ' '
    modelTxt += importUsabilityFile(importFile,session_id) + ' '
    modelTxt += importRequirementsFile(importFile,session_id) + ' '
    modelTxt += importAssociationsFile(importFile,session_id) + ' '
    modelTxt += importSynopsesFile(importFile,session_id)
    return modelTxt
  except xml.sax.SAXException, e:
    raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
Пример #50
0
def exportModel(outFile = None,session_id = None):
  b = Borg()
  xmlBuf = '<?xml version="1.0"?>\n<!DOCTYPE cairis_model PUBLIC "-//CAIRIS//DTD MODEL 1.0//EN" "http://cairis.org/dtd/cairis_model.dtd">\n<cairis_model>\n\n\n'
  xmlBuf+= b.get_dbproxy(session_id).tvTypesToXml(0)[0] + '\n\n'
  xmlBuf+= b.get_dbproxy(session_id).domainValuesToXml(0)[0] + '\n\n'
  xmlBuf+= b.get_dbproxy(session_id).projectToXml(0) + '\n\n'
  xmlBuf+= b.get_dbproxy(session_id).riskAnalysisToXml(0)[0] + '\n\n'
  xmlBuf+= b.get_dbproxy(session_id).usabilityToXml(0)[0] + '\n\n'
  xmlBuf+= b.get_dbproxy(session_id).goalsToXml(0)[0] + '\n\n'
  xmlBuf+= b.get_dbproxy(session_id).associationsToXml(0)[0] + '\n\n</cairis_model>'
  if outFile == None:
    return xmlBuf
  else:
    f = open(outFile,'w')
    f.write(xmlBuf)
    f.close()
    return 'Exported model'
Пример #51
0
def importProjectData(pSettings,envParameterSet,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  if (pSettings != None):
    db_proxy.updateSettings(pSettings[0],pSettings[1],pSettings[2],pSettings[3],pSettings[4],pSettings[5],pSettings[6],pSettings[7])
  envCount = 0
  for envParameters in envParameterSet:
    objtId = db_proxy.existingObject(envParameters.name(),'environment')
    if objtId == -1:
      db_proxy.addEnvironment(envParameters)
    else:
      envParameters.setId(objtId)
      db_proxy.updateEnvironment(envParameters)
    envCount += 1
  msgText = 'Imported ' + str(envCount) + ' environments'
  if (pSettings != None):
    msgText += ', and project settings'
    msgText += '.'
  return msgText
Пример #52
0
def importDirectoryFile(importFile,isOverwrite=1,session_id = None):
  try:
    parser = xml.sax.make_parser()
    handler = DirectoryContentHandler()
    parser.setContentHandler(handler)
    parser.setEntityResolver(handler)
    parser.parse(importFile)
    vulDir,threatDir = handler.directories()
    vdSize = len(vulDir)
    tdSize = len(threatDir)
    b = Borg()
    db_proxy = b.get_dbproxy(session_id)
    if (vdSize > 0):
      db_proxy.addVulnerabilityDirectory(vulDir,isOverwrite)
    if (tdSize > 0):
      db_proxy.addThreatDirectory(threatDir,isOverwrite)
    msgStr = 'Imported ' + str(vdSize) + ' template vulnerabilities and ' + str(tdSize) + ' template threats.'
    return msgStr
  except xml.sax.SAXException, e:
    raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
  def __init__(self,session_id = None):
    self.thePatternName = ''
    self.theLikelihood = ''
    self.theSeverity = ''
    self.theObstacles = []
    self.theObstacleAssociations = []
    self.inIntent = 0
    self.theIntent = ''
    self.theMotivations = []
    self.theEnvironment = ''
    self.theAttack = ''
    self.theExploit = ''
    self.theAttackObstacle = ''
    self.theExploitObstacle = ''
    self.theParticipants = []
    self.theTargets = []
    self.theExploits = []
    self.inConsequences = 0
    self.theConsequences = ''
    self.inImplementation = 0
    self.theImplementation = ''
    self.inKnownUses = 0
    self.theKnownUses = ''
    self.inRelatedPatterns = 0
    self.theRelatedPatterns = ''
    b = Borg()
    self.configDir = b.configDir
    self.dbProxy = b.get_dbproxy(session_id)

    self.theObstacleParameters = []
    self.theObstacleAssociationParameters = []
    self.theAssetParameters = []
    self.theAttackerParameters = []
    self.theVulnerabilityParameters = None
    self.theThreatParameters = None
    self.theRiskParameters = None

    self.resetObstacleElements()
    self.resetObstacleAssociationElements()
    self.resetMotivationElements()
    self.resetParticipantElements()
Пример #54
0
def importSecurityPatterns(importFile,session_id=None):
  try:
    parser = xml.sax.make_parser()
    handler = SecurityPatternContentHandler()
    parser.setContentHandler(handler)
    parser.setEntityResolver(handler)
    parser.parse(importFile)
    taps = handler.assets()
    spps = handler.patterns()
    vts = handler.metricTypes()
    noOfTaps = len(taps)
    noOfSpps = len(spps)

    b = Borg()
    db_proxy = b.get_dbproxy(session_id)

    msgStr = 'No patterns imported'
    if (noOfTaps > 0):
      tapId = 0;
      db_proxy.deleteSecurityPattern(-1)
      db_proxy.deleteTemplateAsset(-1)

      for vt in vts:
        db_proxy.addValueType(vt)

      for tap in taps:
        tap.setId(tapId)
        db_proxy.addTemplateAsset(tap)
        tapId += 1

      if (noOfSpps > 0):
        spId = 0;
        db_proxy.deleteSecurityPattern(-1)
        for sp in spps:
          sp.setId(spId)
          db_proxy.addSecurityPattern(sp)
          spId += 1
        msgStr =  'Imported ' + str(noOfTaps) + ' template assets and ' + str(noOfSpps) + ' security patterns'
    return msgStr
  except xml.sax.SAXException, e:
    raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
Пример #55
0
def exportRedmineUseCases(outFile):
  b = Borg()
  rmUseCases = b.get_dbproxy(session_id).redmineUseCases()

  buf = ''
  noUseCases = 0
  ucDict = {'ID':[],'DA':[],'NM':[],'PS':[],'NC':[],'LC':[],'CAP':[],'TMS':[]}

  for ucName,ucShortCode,ucAuthor,ucTxt in rmUseCases:
    ucCat = re.sub('[0-9]','',ucShortCode)
    ucDict[ucCat].append( (ucName,ucShortCode,ucAuthor,ucTxt))
  fnlCats = ucDict.keys()
  fnlCats.sort()

  for fnlCat in fnlCats:
    for ucName,ucShortCode,ucAuthor,ucTxt in ucDict[fnlCat]: 
      buf += ucTxt + '\n'
      noUseCases += 1
  ucFile = open(outFile,'w')
  ucFile.write(buf)
  ucFile.close()
  return 'Exported ' + str(noUseCases) + ' use cases.'
Пример #56
0
 def testModelCreation(self):
   b = Borg()  
   b.get_dbproxy().classModel('Psychosis')
   b.get_dbproxy().classModel('Psychosis','',True)
   b.get_dbproxy().goalModel('Psychosis')
   b.get_dbproxy().responsibilityModel('Psychosis')
   b.get_dbproxy().obstacleModel('Psychosis')
   b.get_dbproxy().taskModel('Psychosis')
   b.get_dbproxy().riskAnalysisModel('Psychosis')
   b.get_dbproxy().assumptionPersonaModel('Claire')
Пример #57
0
def importComponentViewData(view,session_id = None):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  db_proxy.addComponentView(view)
  msgStr = 'Imported architectural pattern'
  return msgStr
Пример #58
0
def importLocations(locations,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  db_proxy.addLocations(locations)
  msgStr = 'Imported ' + locations.name()
  return msgStr
Пример #59
0
 def testModelCreation(self):
   b = Borg()  
   b.get_dbproxy().classModel('Psychosis')
   b.get_dbproxy().classModel('Psychosis','',True)
   b.get_dbproxy().classModel('Psychosis','Clinical data',True)
   b.get_dbproxy().goalModel('Psychosis')
   b.get_dbproxy().goalModel('Psychosis','Process clinical data on NeuroGrid')
   b.get_dbproxy().responsibilityModel('Psychosis')
   b.get_dbproxy().responsibilityModel('Psychosis','Data Consumer')
   b.get_dbproxy().obstacleModel('Psychosis')
   b.get_dbproxy().obstacleModel('Psychosis','Unauthorised portal access')
   b.get_dbproxy().taskModel('Psychosis')
   b.get_dbproxy().taskModel('Psychosis','Upload data')
   b.get_dbproxy().riskAnalysisModel('Psychosis')
   b.get_dbproxy().riskAnalysisModel('Psychosis','risk','Unauthorised Certificate Access')
   b.get_dbproxy().riskObstacleModel('Unauthorised Certificate Access','Psychosis')
   b.get_dbproxy().assumptionPersonaModel('Claire')
   b.get_dbproxy().textualArgumentationModel('Claire','Activities')
   
   importModelFile(os.environ['CAIRIS_SRC'] + '/../examples/exemplars/ACME_Water/ACME_Water.xml',1,'test')
   importLocationsFile(os.environ['CAIRIS_SRC'] + '/../examples/exemplars/ACME_Water/PooleWWTW.xml','test')
   b.get_dbproxy().locationsRiskModel('PooleWWTW','Day')
Пример #60
0
def importUsability(personaParameterSet,edParameterSet,drParameterSet,crParameterSet,pcParameterSet,tcParameterSet,taskParameterSet,ucParameterSet,session_id):
  b = Borg()
  db_proxy = b.get_dbproxy(session_id)
  personaCount = 0
  for personaParameters in personaParameterSet:
    objtId = db_proxy.existingObject(personaParameters.name(),'persona')
    if objtId == -1:
      db_proxy.addPersona(personaParameters)
    else:
      personaParameters.setId(objtId)
      db_proxy.updatePersona(personaParameters)
    personaCount += 1

  edCount = 0
  for edParameters in edParameterSet:
    objtId = db_proxy.existingObject(edParameters.name(),'external_document')
    if objtId == -1:
      db_proxy.addExternalDocument(edParameters)
    else:
      edParameters.setId(objtId)
      db_proxy.updateExternalDocument(edParameters)
    edCount += 1

  drCount = 0
  for drParameters in drParameterSet:
    objtId = db_proxy.existingObject(drParameters.name(),'document_reference')
    if objtId == -1:
      db_proxy.addDocumentReference(drParameters)
    else:
      drParameters.setId(objtId)
      db_proxy.updateDocumentReference(drParameters)
    drCount += 1

  taskCount = 0
  for taskParameters in taskParameterSet:
    objtId = db_proxy.existingObject(taskParameters.name(),'task')
    if objtId == -1:
      db_proxy.addTask(taskParameters)
    else:
      taskParameters.setId(objtId)
      db_proxy.updateTask(taskParameters)
    taskCount += 1

  ucCount = 0
  for ucParameters in ucParameterSet:
    objtId = db_proxy.existingObject(ucParameters.name(),'usecase')
    if objtId == -1:
      db_proxy.addUseCase(ucParameters)
    else:
      ucParameters.setId(objtId)
      db_proxy.updateUseCase(ucParameters)
    ucCount += 1

  crCount = 0
  for crParameters in crParameterSet:
    objtId = db_proxy.existingObject(crParameters.name(),'concept_reference')
    if objtId == -1:
      db_proxy.addConceptReference(crParameters)
    else:
      crParameters.setId(objtId)
      db_proxy.updateConceptReference(crParameters)
    crCount += 1

  pcCount = 0
  for pcParameters in pcParameterSet:
    db_proxy.addPersonaCharacteristic(pcParameters)
    pcCount += 1

  tcCount = 0
  for tcParameters in tcParameterSet:
    objtId = db_proxy.existingObject(tcParameters.task(),'task_characteristic')
    if objtId == -1:
      db_proxy.addTaskCharacteristic(tcParameters)
    else:
      tcParameters.setId(objtId)
      db_proxy.updateTaskCharacterisric(tcParameters)
    tcCount += 1
  msgStr = 'Imported ' + str(personaCount) + ' personas, ' + str(edCount) + ' external documents, ' + str(drCount) + ' document references, ' + str(crCount) + ' concept references, ' + str(pcCount) + ' persona characteristics, ' + str(tcCount) + ' task characteristics, ' + str(taskCount) + ' tasks, and ' + str(ucCount) + ' use cases.'
  return msgStr