Commit 755588b2 authored by Arturo Filastò's avatar Arturo Filastò
Browse files

Merge pull request #35 from TheTorProject/feature/path_checks

Implement checking of paths before starting oonib.
parents 55021316 aebeb92b
Loading
Loading
Loading
Loading
+27 −1
Original line number Diff line number Diff line
@@ -10,7 +10,33 @@ from twisted.application import app
sys.path[:] = map(os.path.abspath, sys.path)
sys.path.insert(0, os.path.abspath(os.getcwd()))

from oonib import runner, config
from oonib import errors as e
from oonib.config import config

try:
    config.load()
except e.ConfigFileNotSpecified:
    print "Config file not specified!"
    print "Use -c to specify one!"
    config.usageOptions()
    sys.exit(1)
except e.ConfigFileDoesNotExist, path:
    print "Config file \"%s\" does not exist!" % path
    sys.exit(2)
except e.InvalidReportDirectory, path:
    print "Invalid report directory: %s!" % path
    sys.exit(3)
except e.InvalidArchiveDirectory, path:
    print "Invalid archive directory: %s!" % path
    sys.exit(4)
except e.InvalidInputDirectory, path:
    print "Invalid input directory: %s" % path
    sys.exit(5)
except e.InvalidDeckDirectory, path:
    print "Invalid deck directory: %s" % path
    sys.exit(6)

from oonib import runner
from oonib.oonibackend import application

if config.main.chroot:
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ from oonib.input.api import inputAPI
from oonib.policy.api import policyAPI
from oonib.bouncer.api import bouncerAPI

from oonib import config
from oonib.config import config

ooniBouncer = None
ooniBackendAPI = []
+6 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ import random
import yaml
from oonib import errors as e
from oonib.handlers import OONIBHandler
from oonib import config
from oonib.config import config

class Bouncer(object):
    def __init__(self):
@@ -139,5 +139,10 @@ class BouncerQueryHandler(OONIBHandler):
        except KeyError:
            raise e.TestHelpersKeyMissing
        
        try:
            assert isinstance(requested_helpers, list)
        except AssertionError:
            raise e.InvalidRequest

        response = self.bouncer.filterHelperAddresses(requested_helpers)
        self.write(response)
+44 −26
Original line number Diff line number Diff line
import yaml
from oonib import errors as e
from oonib import Storage
from oonib import __version__

from oonib.options import OONIBOptions
import os

def get_root_path():
    this_directory = os.path.dirname(__file__)
    root = os.path.join(this_directory, '..')
    root = os.path.abspath(root)
    return root

def loadConfigFile():
class Config(object):
    main = None
    helpers = None
    reports = {}
    backend_version = __version__
    opts = OONIBOptions()
    opts.parseOptions()
    if 'config' in opts.keys():
        with open(opts['config']) as f:
            config_file_contents = '\n'.join(f.readlines())
            configuration = yaml.safe_load(config_file_contents)
            main = Storage(opts)

    def __init__(self):
        self.opts.parseOptions()

    def load(self):
        try:
            config_file = self.opts['config']
        except KeyError:
            raise e.ConfigFileNotSpecified

        try:
            with open(self.opts['config']) as f:
                configuration = yaml.safe_load(f)
        except IOError:
            raise e.ConfigFileDoesNotExist(self.opts['config'])

        self.main = Storage()
        for k, v in configuration['main'].items():
                main[k] = v
            helpers = Storage()
            for k, v in configuration['helpers'].items():
                helpers[k] = Storage()
                for k2, v2 in v.items():
                    helpers[k][k2] = v2
            return main, helpers
    return None, None
            self.main[k] = v
        self.helpers = Storage()
        for name, helper in configuration['helpers'].items():
            self.helpers[name] = Storage()
            for k, v in helper.items():
                self.helpers[name][k] = v
        self.check_paths()
    
    def check_paths(self):
        if not self.main.report_dir or not os.path.isdir(self.main.report_dir):
            raise e.InvalidReportDirectory(self.main.report_dir)
        if not self.main.archive_dir or not os.path.isdir(self.main.archive_dir):
            raise e.InvalidArchiveDirectory(self.main.report_dir)

        if self.main.input_dir and not os.path.isdir(self.main.input_dir):
            raise e.InvalidInputDirectory(self.main.input_dir)
        if self.main.deck_dir and not os.path.isdir(self.main.deck_dir):
            raise e.InvalidDeckDirectory(self.main.deck_dir)

main = None
backend_version = __version__
reports = {}

if not main:
    main, helpers = loadConfigFile()
config = Config()
+1 −1
Original line number Diff line number Diff line
from cyclone import web
from oonib.deck import handlers
from oonib import config
from oonib.config import config

deckAPI = [
    (r"/deck", handlers.DeckListHandler),
Loading