예제 #1
0
    def get_risks(self, constraint_id=-1, simplify=True, skip_misuse=False):
        """
        :type constraint_id: int
        :type simplify: bool
        :rtype: dict[str,Risk]
        """
        try:
            risks = self.db_proxy.getRisks(constraintId=constraint_id)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)

        if isinstance(risks, dict):
            for key, value in risks.items():
                if value.theMisuseCase and not skip_misuse:
                    risks[
                        key].theMisuseCase = self.get_misuse_case_by_risk_name(
                            value.theName, simplify=False)
                if simplify:
                    risks[key] = self.simplify(value)

        return risks
예제 #2
0
 def create_new_project(self):
     try:
         self.db_proxy.clearDatabase(session_id=self.session_id)
     except ARM.DatabaseProxyException as ex:
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         raise ARMHTTPError(ex)
예제 #3
0
    def update_attacker_capability(self,
                                   attacker_capability,
                                   name,
                                   environment_name=''):
        assert isinstance(attacker_capability, ValueType)

        found_capability = self.get_attacker_capability_by_name(
            name, environment_name)

        params = ValueTypeParameters(vtName=attacker_capability.theName,
                                     vtDesc=attacker_capability.theDescription,
                                     vType='capability',
                                     envName=environment_name,
                                     vtScore=attacker_capability.theScore,
                                     vtRat=attacker_capability.theRationale)
        params.setId(found_capability.theId)

        try:
            self.db_proxy.updateValueType(params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #4
0
    def add_environment(self, environment):
        """
        :return: Returns the ID of the new environment
        :raise ARMHTTPError:
        """
        env_params = self.to_environment_parameters(environment)
        try:
            if not self.check_existing_environment(environment.theName):
                self.db_proxy.addEnvironment(env_params)
            else:
                self.close()
                raise ARM.DatabaseProxyException('Environment name already exists within the database.')
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)

        try:
            new_environment = self.get_environment_by_name(environment.theName, simplify=False)
            if new_environment is not None:
                return new_environment.theId
        except ObjectNotFoundHTTPError:
            self.logger.warning('The new environment was not found in the database')
            self.logger.warning('Environment name: %s', environment.theName)
            return -1
예제 #5
0
    def update_vulnerability_type(self,
                                  vulnerability_type,
                                  name,
                                  environment_name=''):
        assert isinstance(vulnerability_type, ValueType)

        found_type = self.get_vulnerability_type_by_name(
            name, environment_name)

        params = ValueTypeParameters(vtName=vulnerability_type.theName,
                                     vtDesc=vulnerability_type.theDescription,
                                     vType='vulnerability_type',
                                     envName=environment_name,
                                     vtScore=vulnerability_type.theScore,
                                     vtRat=vulnerability_type.theRationale)
        params.setId(found_type.theId)

        try:
            self.db_proxy.updateValueType(params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #6
0
    def update_vulnerability(self, vulnerability, name=None, vuln_id=None):
        if name is not None:
            found_vulnerability = self.get_vulnerability_by_name(
                name, simplify=False)
        elif vuln_id is not None:
            found_vulnerability = self.get_vulnerability_by_id(vuln_id,
                                                               simplify=False)
        else:
            self.close()
            raise MissingParameterHTTPError(param_names=['name'])

        vuln_params = VulnerabilityParameters(
            vulName=vulnerability.theVulnerabilityName,
            vulDesc=vulnerability.theVulnerabilityDescription,
            vulType=vulnerability.theVulnerabilityType,
            tags=vulnerability.theTags,
            cProperties=vulnerability.theEnvironmentProperties)
        vuln_params.setId(found_vulnerability.theVulnerabilityId)

        try:
            if self.check_existing_vulnerability(name):
                self.db_proxy.updateVulnerability(vuln_params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #7
0
    def add_vulnerability_type(self, vulnerability_type, environment_name=''):
        assert isinstance(vulnerability_type, ValueType)
        type_exists = self.check_existing_vulnerability_type(
            vulnerability_type.theName, environment_name=environment_name)

        if type_exists:
            self.close()
            raise OverwriteNotAllowedHTTPError(
                obj_name='The vulnerability type')

        params = ValueTypeParameters(vtName=vulnerability_type.theName,
                                     vtDesc=vulnerability_type.theDescription,
                                     vType='vulnerability_type',
                                     envName=environment_name,
                                     vtScore=vulnerability_type.theScore,
                                     vtRat=vulnerability_type.theRationale)

        try:
            return self.db_proxy.addValueType(params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #8
0
    def get_misuse_case_by_risk_name(self, risk_name, simplify=True):
        found_risk = self.get_risk_by_name(risk_name, skip_misuse=True)

        try:
            misuse_case = self.db_proxy.riskMisuseCase(found_risk.theId)

        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)

        if not misuse_case:
            self.close()
            raise ObjectNotFoundHTTPError(
                'The misuse case associated with the risk')
        assert isinstance(misuse_case, MisuseCase)

        misuse_case = self.expand_mc_props(misuse_case)

        if simplify:
            misuse_case = self.simplify(misuse_case)

        return misuse_case
예제 #9
0
    def update_asset_properties(self, props, name, existing_params=None):
        if existing_params is None:
            asset = self.get_asset_by_name(name, simplify=False)

            existing_params = AssetParameters(
                assetName=asset.theName,
                shortCode=asset.theShortCode,
                assetDesc=asset.theDescription,
                assetSig=asset.theSignificance,
                assetType=asset.theType,
                cFlag=asset.isCritical,
                cRationale=asset.theCriticalRationale,
                tags=asset.theTags,
                ifs=asset.theInterfaces,
                cProperties=[])
            existing_params.setId(asset.theId)

        existing_params.theEnvironmentProperties = props

        try:
            self.db_proxy.updateAsset(existing_params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #10
0
    def add_attacker(self, attacker):
        """
        :type attacker: Attacker
        :rtype: int
        :raise ARMHTTPError:
        """
        attacker_params = AttackerParameters(
            name=attacker.theName,
            desc=attacker.theDescription,
            image=attacker.theImage,
            tags=attacker.theTags,
            properties=attacker.theEnvironmentProperties)

        try:
            if not self.check_existing_attacker(attacker.theName):
                new_id = self.db_proxy.addAttacker(attacker_params)
                return new_id
            else:
                self.close()
                raise OverwriteNotAllowedHTTPError(obj_name=attacker.theName)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #11
0
    def update_attacker_motivation(self,
                                   attacker_motivation,
                                   name,
                                   environment_name=''):
        """
        :return:
        :raise: ARMHTTPError:
        """
        assert isinstance(attacker_motivation, ValueType)

        found_motivation = self.get_attacker_motivation_by_name(
            name, environment_name)

        params = ValueTypeParameters(vtName=attacker_motivation.theName,
                                     vtDesc=attacker_motivation.theDescription,
                                     vType='motivation',
                                     envName=environment_name,
                                     vtScore=attacker_motivation.theScore,
                                     vtRat=attacker_motivation.theRationale)
        params.setId(found_motivation.theId)

        try:
            self.db_proxy.updateValueType(params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #12
0
    def add_attacker_motivation(self,
                                attacker_motivation,
                                environment_name=''):
        """
        :rtype: int
        :raises
            CairisHTTPError:
            OverwriteNotAllowedHTTPError:
        """
        assert isinstance(attacker_motivation, ValueType)
        type_exists = self.check_existing_attacker_motivation(
            attacker_motivation.theName, environment_name=environment_name)

        if type_exists:
            self.close()
            raise OverwriteNotAllowedHTTPError(
                obj_name='The attacker motivation')

        params = ValueTypeParameters(vtName=attacker_motivation.theName,
                                     vtDesc=attacker_motivation.theDescription,
                                     vType='motivation',
                                     envName=environment_name,
                                     vtScore=attacker_motivation.theScore,
                                     vtRat=attacker_motivation.theRationale)

        try:
            return self.db_proxy.addValueType(params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #13
0
    def update_threat(self, threat, name=None, threat_id=None):
        if name is not None:
            found_threat = self.get_threat_by_name(name, simplify=False)
        elif threat_id is not None:
            found_threat = self.get_threat_by_id(threat_id, simplify=False)
        else:
            self.close()
            raise MissingParameterHTTPError(param_names=['name'])

        threat_params = ThreatParameters(
            threatName=threat.theThreatName,
            thrType=threat.theType,
            thrMethod=threat.theMethod,
            tags=threat.theTags,
            cProperties=threat.theEnvironmentProperties)
        threat_params.setId(found_threat.theId)

        try:
            if self.check_existing_threat(name):
                self.db_proxy.updateThreat(threat_params)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #14
0
 def get_goal_values(self, environment_name=''):
     try:
         goal_values = self.db_proxy.getValueTypes('goal_value',
                                                   environment_name)
         return goal_values
     except ARM.DatabaseProxyException as ex:
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         raise ARMHTTPError(ex)
예제 #15
0
    def delete_goal_type(self, name, environment_name=''):
        found_type = self.get_goal_type_by_name(name, environment_name)

        try:
            self.db_proxy.deleteGoalType(found_type.theId)
        except ARM.DatabaseProxyException as ex:
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            raise ARMHTTPError(ex)
예제 #16
0
 def get_asset_names(self, environment=''):
     try:
         asset_names = self.db_proxy.getDimensionNames('asset', environment)
         return asset_names
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
예제 #17
0
    def delete_threat_type(self, name, environment_name=''):
        found_type = self.get_threat_type_by_name(name, environment_name)

        try:
            self.db_proxy.deleteThreatType(found_type.theId)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #18
0
    def delete_risk(self, name):
        found_risk = self.get_risk_by_name(name)

        try:
            self.db_proxy.deleteRisk(found_risk.theId)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #19
0
    def delete_goal(self, name):
        found_goal = self.get_goal_by_name(name)

        try:
            self.db_proxy.deleteGoal(found_goal.theId)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #20
0
 def get_threat_types(self, environment_name=''):
     try:
         threat_types = self.db_proxy.getValueTypes('threat_type',
                                                    environment_name)
         return threat_types
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
예제 #21
0
    def delete_attacker(self, name):
        found_attacker = self.get_attacker_by_name(name, simplify=False)
        attacker_id = found_attacker.theId

        try:
            self.db_proxy.deleteAttacker(attacker_id)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #22
0
 def apply_settings(self, settings):
     try:
         self.db_proxy.updateSettings(
             settings.projectName, settings.projectBackground,
             settings.projectGoals, settings.projectScope,
             settings.definitions, settings.contributions,
             settings.revisions, settings.richPicture, settings.fontSize,
             settings.fontName)
     except ARM.DatabaseProxyException as ex:
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         raise ARMHTTPError(ex)
예제 #23
0
 def get_environment_names_by_threat_vulnerability(self, threat_name, vulnerability_name):
     """
     :rtype : list[str]
     """
     try:
         environments = self.db_proxy.riskEnvironments(threat_name, vulnerability_name)
         return environments
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
예제 #24
0
    def get_settings(self):
        try:
            pSettings = self.db_proxy.getProjectSettings()
            pDict = self.db_proxy.getDictionary()
            contributors = self.db_proxy.getContributors()
            revisions = self.db_proxy.getRevisions()
        except ARM.DatabaseProxyException as ex:
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            raise ARMHTTPError(ex)

        settings = ProjectSettings(pSettings, pDict, contributors, revisions)
        return settings
예제 #25
0
 def get_scores_by_rtve(self, risk_name, threat_name, vulnerability_name,
                        environment_name):
     try:
         scores = self.db_proxy.riskScore(threat_name, vulnerability_name,
                                          environment_name, risk_name)
         if len(scores) > 0:
             scores = self.convert_scores(real_scores=scores)
         return scores
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
예제 #26
0
 def get_asset_values(self, environment_name=''):
     """
     :rtype : list[ValueType]
     """
     try:
         asset_values = self.db_proxy.getValueTypes('asset_value',
                                                    environment_name)
         return asset_values
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
예제 #27
0
    def delete_attacker_capability(self, name, environment_name=''):
        """
        :raise ARMHTTPError:
        """
        found_capability = self.get_attacker_capability_by_name(
            name, environment_name)

        try:
            self.db_proxy.deleteAssetType(found_capability.theId)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)
예제 #28
0
 def get_attacker_motivations(self, environment_name=''):
     """
     :rtype : list[ValueType]
     :raise ARMHTTPError:
     """
     try:
         attacker_motivations = self.db_proxy.getValueTypes(
             'motivation', environment_name)
         return attacker_motivations
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
예제 #29
0
 def get_environment_names(self):
     """
     Get the available environment names.
     :rtype list[str]
     :raise ARMHTTPError:
     """
     try:
         environment_names = self.db_proxy.getEnvironmentNames()
     except ARM.DatabaseProxyException as ex:
         self.close()
         raise ARMHTTPError(ex)
     except ARM.ARMException as ex:
         self.close()
         raise ARMHTTPError(ex)
     return environment_names
예제 #30
0
    def delete_dependencies(self, environment, depender, dependee, dependency):
        found_dependencies = self.get_dependency(environment, depender,
                                                 dependee, dependency)

        try:
            for found_dependency in found_dependencies:
                self.db_proxy.deleteDependency(
                    found_dependency.theId, found_dependency.theDependencyType)
            return len(found_dependencies)
        except ARM.DatabaseProxyException as ex:
            self.close()
            raise ARMHTTPError(ex)
        except ARM.ARMException as ex:
            self.close()
            raise ARMHTTPError(ex)