Skip to content

Commit

Permalink
Improved error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
failys committed Apr 23, 2016
1 parent e8cc500 commit c77790d
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 114 deletions.
17 changes: 13 additions & 4 deletions cairis/bin/cairis_gui.py
Expand Up @@ -15,17 +15,26 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

import os
import sys
from cairis.gui.IRISApp import IRISApp

def main(args=None):
if args is None:
args = sys.argv[1:]
import gtk
gtk.remove_log_handlers()
cairisApp = IRISApp()
cairisApp.MainLoop()

if __name__ == '__main__':
main()
try:
import gtk
gtk.remove_log_handlers()
from cairis.gui.IRISApp import IRISApp
from cairis.core.ARM import ARMException
main()
except ImportError:
print "Fatal CAIRIS error: Could not import the Python dependencies needed by CAIRIS. Either your Python installation is incomplete, or - if you have downloaded CAIRIS directly from github - PYTHONPATH needs to be set to the root directly of your source installation; this is the same directory that setup.py can be found in."
sys.exit(-1)
except ARMException, e:
print "Fatal CAIRIS error: " + str(e)
sys.exit(-1)
91 changes: 47 additions & 44 deletions cairis/bin/cexport.py
Expand Up @@ -18,55 +18,58 @@

import argparse
import sys
import cairis.core.BorgFactory
from cairis.mio.ModelExport import *
from cairis.core.ARM import *

def main(args=None):

try:
parser = argparse.ArgumentParser(description='Computer Aided Integration of Requirements and Information Security - Model Export to Redmine')
parser.add_argument('outputFile',help='output file name')
parser.add_argument('--type',dest='modelFormat',help='model type to export. One of all, requirements, scenarios, usecases, architecture, attackpatterns or GRL')
parser.add_argument('--persona',nargs='+',help='Persona name (relevant for GRL export only)')
parser.add_argument('--task',nargs='+',help='Task name (relevant for GRL export only)')
parser.add_argument('--environment',dest='envName',help='Environment name (relevant for GRL export only)')
args = parser.parse_args()
cairis.core.BorgFactory.initialise()
parser = argparse.ArgumentParser(description='Computer Aided Integration of Requirements and Information Security - Model Export to Redmine')
parser.add_argument('outputFile',help='output file name')
parser.add_argument('--type',dest='modelFormat',help='model type to export. One of all, requirements, scenarios, usecases, architecture, attackpatterns or GRL')
parser.add_argument('--persona',nargs='+',help='Persona name (relevant for GRL export only)')
parser.add_argument('--task',nargs='+',help='Task name (relevant for GRL export only)')
parser.add_argument('--environment',dest='envName',help='Environment name (relevant for GRL export only)')
args = parser.parse_args()
cairis.core.BorgFactory.initialise()

msgStr = ''
if (args.modelFormat == 'all'):
msgStr += exportModel(args.outputFile)
elif (args.modelFormat == 'scenarios'):
msgStr += exportRedmineScenarios(args.outputFile)
elif (args.modelFormat == 'requirements'):
msgStr += exportRedmineRequirements(args.outputFile)
elif (args.modelFormat == 'usecases'):
msgStr += exportRedmineUseCases(args.outputFile)
elif (args.modelFormat == 'architecture'):
msgStr += exportArchitecture(args.outputFile)
elif (args.modelFormat == 'attackpatterns'):
msgStr += exportAttackPatterns(args.outputFile)
elif (args.modelFormat == 'GRL'):
personaNames = []
personaNames.extend(args.persona)
taskNames = []
taskNames.extend(args.task)
msgStr = ''
if (args.modelFormat == 'all'):
msgStr += exportModel(args.outputFile)
elif (args.modelFormat == 'scenarios'):
msgStr += exportRedmineScenarios(args.outputFile)
elif (args.modelFormat == 'requirements'):
msgStr += exportRedmineRequirements(args.outputFile)
elif (args.modelFormat == 'usecases'):
msgStr += exportRedmineUseCases(args.outputFile)
elif (args.modelFormat == 'architecture'):
msgStr += exportArchitecture(args.outputFile)
elif (args.modelFormat == 'attackpatterns'):
msgStr += exportAttackPatterns(args.outputFile)
elif (args.modelFormat == 'GRL'):
personaNames = []
personaNames.extend(args.persona)
taskNames = []
taskNames.extend(args.task)

if len(personaNames) == 0:
raise ARMException('Persona name not specified for GRL export')
elif len(taskNames) == 0:
raise ARMException('Task name not specified for GRL export')
elif args.envName == None:
raise ARMException('Environment name not specified for GRL export')
else:
msgStr += exportGRL(args.outputFile,personaNames,taskNames,args.envName)
if len(personaNames) == 0:
raise ARMException('Persona name not specified for GRL export')
elif len(taskNames) == 0:
raise ARMException('Task name not specified for GRL export')
elif args.envName == None:
raise ARMException('Environment name not specified for GRL export')
else:
raise ARMException('Export model type ' + args.modelFormat + ' not recognised')
print msgStr
except ARMException, e:
print 'cexport error: ',e
exit(-1)
msgStr += exportGRL(args.outputFile,personaNames,taskNames,args.envName)
else:
raise ARMException('Export model type ' + args.modelFormat + ' not recognised')

if __name__ == '__main__':
main()

try:
import cairis.core.BorgFactory
from cairis.mio.ModelExport import *
from cairis.core.ARM import *
main()
except ImportError:
print "Fatal CAIRIS error: Could not import the Python dependencies needed by CAIRIS. Either your Python installation is incomplete, or - if you have downloaded CAIRIS directly from github - PYTHONPATH needs to be set to the root directly of your source installation; this is the same directory that setup.py can be found in."
sys.exit(-1)
except ARMException, e:
print 'Fatal cexport error: ' + str(e)
sys.exit(-1)
124 changes: 63 additions & 61 deletions cairis/bin/cimport.py
Expand Up @@ -19,71 +19,73 @@
import argparse
import os
import sys
import cairis.core.BorgFactory
from cairis.mio.ModelImport import *
from cairis.core.ARM import *
from cairis.core.Borg import Borg

def main(args=None):

try:
parser = argparse.ArgumentParser(description='Computer Aided Integration of Requirements and Information Security - Model Import')
parser.add_argument('modelFile',help='model file to import')
parser.add_argument('--type',dest='modelFormat',help='model type to import. One of securitypattern, attackpattern, tvtypes, directory, requirements, riskanalysis, usability, project, domainvalues, architecturalpattern, associations, synopses, processes, assets, locations or all')
parser.add_argument('--overwrite',dest='isOverwrite',help='Where appropriate, overwrite an existing CAIRIS model with this model')
parser.add_argument('--image_dir',dest='imageDir',help='Where appropriate, directory for model images (overwrites default_image_dir value in cairis.cnf)')
args = parser.parse_args()
mFormat = args.modelFormat
importFile = args.modelFile
overwriteFlag = args.isOverwrite
if overwriteFlag == None:
overwriteFlag = 1
parser = argparse.ArgumentParser(description='Computer Aided Integration of Requirements and Information Security - Model Import')
parser.add_argument('modelFile',help='model file to import')
parser.add_argument('--type',dest='modelFormat',help='model type to import. One of securitypattern, attackpattern, tvtypes, directory, requirements, riskanalysis, usability, project, domainvalues, architecturalpattern, associations, synopses, processes, assets, locations or all')
parser.add_argument('--overwrite',dest='isOverwrite',help='Where appropriate, overwrite an existing CAIRIS model with this model')
parser.add_argument('--image_dir',dest='imageDir',help='Where appropriate, directory for model images (overwrites default_image_dir value in cairis.cnf)')
args = parser.parse_args()
mFormat = args.modelFormat
importFile = args.modelFile
overwriteFlag = args.isOverwrite
if overwriteFlag == None:
overwriteFlag = 1

cairis.core.BorgFactory.initialise()
b = Borg()
cairis.core.BorgFactory.initialise()
b = Borg()

if args.imageDir != None:
b.imageDir = os.path.abspath(args.imageDir)
if args.imageDir != None:
b.imageDir = os.path.abspath(args.imageDir)

msgStr = ''
if (mFormat == 'securitypattern'):
msgStr += importSecurityPatterns(importFile)
if (mFormat == 'attackpattern'):
msgStr += importAttackPattern(importFile)
elif (mFormat == 'tvtypes'):
msgStr += importTVTypeFile(importFile,int(overwriteFlag))
elif (mFormat == 'directory'):
msgStr += importDirectoryFile(importFile,int(overwriteFlag))
elif (mFormat == 'requirements'):
msgStr += importRequirementsFile(importFile)
elif (mFormat == 'riskanalysis'):
msgStr += importRiskAnalysisFile(importFile)
elif (mFormat == 'usability'):
msgStr += importUsabilityFile(importFile)
elif (mFormat == 'associations'):
msgStr += importAssociationsFile(importFile)
elif (mFormat == 'project'):
msgStr += importProjectFile(importFile)
elif (mFormat == 'domainvalues'):
msgStr += importDomainValuesFile(importFile)
elif (mFormat == 'architecturalpattern'):
msgStr += importComponentViewFile(importFile)
elif (mFormat == 'synopses'):
msgStr += importSynopsesFile(importFile)
elif (mFormat == 'processes'):
msgStr += importProcessesFile(importFile)
elif (mFormat == 'assets'):
msgStr += importAssetsFile(importFile)
elif (mFormat == 'locations'):
msgStr += importLocationsFile(importFile)
elif (mFormat == 'all'):
msgStr += importModelFile(importFile,int(overwriteFlag))
else:
raise ARMException('Input model type ' + mFormat + ' not recognised')
print msgStr
except ARMException, e:
print 'cimport error: ',e
exit(-1)
msgStr = ''
if (mFormat == 'securitypattern'):
msgStr += importSecurityPatterns(importFile)
if (mFormat == 'attackpattern'):
msgStr += importAttackPattern(importFile)
elif (mFormat == 'tvtypes'):
msgStr += importTVTypeFile(importFile,int(overwriteFlag))
elif (mFormat == 'directory'):
msgStr += importDirectoryFile(importFile,int(overwriteFlag))
elif (mFormat == 'requirements'):
msgStr += importRequirementsFile(importFile)
elif (mFormat == 'riskanalysis'):
msgStr += importRiskAnalysisFile(importFile)
elif (mFormat == 'usability'):
msgStr += importUsabilityFile(importFile)
elif (mFormat == 'associations'):
msgStr += importAssociationsFile(importFile)
elif (mFormat == 'project'):
msgStr += importProjectFile(importFile)
elif (mFormat == 'domainvalues'):
msgStr += importDomainValuesFile(importFile)
elif (mFormat == 'architecturalpattern'):
msgStr += importComponentViewFile(importFile)
elif (mFormat == 'synopses'):
msgStr += importSynopsesFile(importFile)
elif (mFormat == 'processes'):
msgStr += importProcessesFile(importFile)
elif (mFormat == 'assets'):
msgStr += importAssetsFile(importFile)
elif (mFormat == 'locations'):
msgStr += importLocationsFile(importFile)
elif (mFormat == 'all'):
msgStr += importModelFile(importFile,int(overwriteFlag))
else:
raise ARMException('Input model type ' + mFormat + ' not recognised')

if __name__ == '__main__':
main()
try:
import cairis.core.BorgFactory
from cairis.mio.ModelImport import *
from cairis.core.ARM import *
from cairis.core.Borg import Borg
main()
except ImportError:
print "Fatal CAIRIS error: Could not import the Python dependencies needed by CAIRIS. Either your Python installation is incomplete, or - if you have downloaded CAIRIS directly from github - PYTHONPATH needs to be set to the root directly of your source installation; this is the same directory that setup.py can be found in."
sys.exit(-1)
except ARMException, e:
print 'Fatal cimport error: ' + str(e)
sys.exit(-1)

6 changes: 3 additions & 3 deletions cairis/core/BorgFactory.py
Expand Up @@ -19,6 +19,7 @@
import os
import logging
import DatabaseProxyFactory
from ARM import ARMException
from string import strip

def initialise():
Expand All @@ -29,11 +30,10 @@ def initialise():
try:
cfgFileName = os.environ['CAIRIS_CFG']
except KeyError:
cfgFileName = 'cairis.cnf'
raise ARMException('CAIRIS_CFG environment variable has not been set. Please set this to the correct location of your CAIRIS configuration file, e.g. export CAIRIS_CFG=/home/cairisuser/cairis.cnf')

if not os.path.exists(cfgFileName):
raise IOError('''Unable to locate configuration file at the following location:
'''+cfgFileName)
raise ARMException('Unable to locate configuration file at the following location:' + cfgFileName)

cfgFile = open(cfgFileName)
for cfgLine in cfgFile.readlines():
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Expand Up @@ -14,13 +14,13 @@
required = f.read().splitlines()

setup(name='cairis',
version='1.0.2',
version='1.0.3',
author='Shamal Faily',
author_email='shamal.faily@gmail.com',
description = 'A security design tool',
license = 'Apache Software License',
url='https://github.com/failys/cairis',
download_url='https://github.com/failys/cairis/tarball/1.0.2',
download_url='https://github.com/failys/cairis/tarball/1.0.3',
packages=['cairis'],
include_package_data=True,
data_files = [('cairis/examples', egFiles)],
Expand Down

0 comments on commit c77790d

Please sign in to comment.