Commit 6b6dd406 authored by Arturo Filastò's avatar Arturo Filastò
Browse files

More through e2e testing revealing some other bugs..

* Kill'em all..
parent f13cd5b4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,6 +5,6 @@ from oonib import config
deckAPI = [
    (r"/deck", handlers.DeckListHandler),
    (r"/deck/([a-z0-9]{64})$", handlers.DeckDescHandler),
    (r"/deck/([a-z0-9]{64})/yaml$", web.StaticFileHandler, {"path":
    (r"/deck/([a-z0-9]{64})/file$", web.StaticFileHandler, {"path":
        config.main.deck_dir}),
]
+7 −8
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import os
import re
import yaml

from oonib import errors as e
from oonib.handlers import OONIBHandler
from oonib import config, log

@@ -12,7 +13,7 @@ class DeckDescHandler(OONIBHandler):
        # note:
        # we don't have to sanitize deckID, because it's already checked
        # against matching a certain pattern in the handler.
        bn = os.path.basename(deckID)
        bn = os.path.basename(deckID + '.desc')
        try:
            with open(os.path.join(config.main.deck_dir, bn)) as f:
                response = {}
@@ -23,23 +24,21 @@ class DeckDescHandler(OONIBHandler):

        except IOError:
            log.err("Deck %s missing" % deckID)
            self.set_status(404)
            self.write({'error': 'missing-deck'})
            raise e.MissingDeck

        except KeyError:
            self.set_status(400)
            log.err("Deck %s missing required keys!" % deckID)
            self.write({'error': 'missing-deck-keys'})
            raise e.MissingDeckKeys

class DeckListHandler(OONIBHandler):
    def get(self):
        if not config.main.deck_dir: 
            self.set_status(501)
            self.write({'error': 'no-decks-configured'})
            return
            raise e.NoDecksConfigured

        path = os.path.abspath(config.main.deck_dir) + "/*"
        decknames = map(os.path.basename, glob.iglob(path))
        decknames = filter(lambda y: re.match("[a-z0-9]{40}", y), decknames)
        decknames = filter(lambda y: re.match("[a-z0-9]{64}.desc", y), decknames)
        deckList = []
        for deckname in decknames:
            with open(os.path.join(config.main.deck_dir, deckname)) as f: 
+16 −1
Original line number Diff line number Diff line
from cyclone.web import HTTPError

class OONIBError(HTTPError):
    status_code = 500
    log_message = 'oonib-error'
    def __init__(self):
        pass

class InvalidRequest(OONIBError):
    pass
    status_code = 400
    log_message = 'invalid-request'

class NoHelperFound(OONIBError):
    status_code = 404
@@ -38,6 +41,18 @@ class MissingReportHeaderKey(OONIBError):
        self.status_code = 406
        self.log_message = "missing-report-header-key %s" % key

class MissingDeckKeys(OONIBError):
    status_code = 400
    log_message = "missing-deck-keys"

class MissingDeck(OONIBError):
    status_code = 400
    log_message = "missing-deck"

class NoDecksConfigured(OONIBError):
    status_code = 501
    log_message = "no-decks-configured"

class InvalidReportHeader(OONIBError):
    def __init__(self, key):
        self.status_code = 406