factor error classes into a common file

This commit is contained in:
Brian Warner 2015-09-21 23:21:26 -07:00
parent 8f1ce1f835
commit 46f1fd2cd0
3 changed files with 26 additions and 35 deletions

View File

@ -1,5 +1,5 @@
from __future__ import print_function from __future__ import print_function
import os, sys, time, re, requests, json, textwrap import os, sys, time, re, requests, json
from binascii import hexlify, unhexlify from binascii import hexlify, unhexlify
from spake2 import SPAKE2_Symmetric from spake2 import SPAKE2_Symmetric
from nacl.secret import SecretBox from nacl.secret import SecretBox
@ -8,32 +8,13 @@ from nacl import utils
from .eventsource import EventSourceFollower from .eventsource import EventSourceFollower
from .. import __version__ from .. import __version__
from .. import codes from .. import codes
from ..errors import ServerError from ..errors import (ServerError, Timeout, WrongPasswordError,
ReflectionAttack, UsageError)
from ..util.hkdf import HKDF from ..util.hkdf import HKDF
SECOND = 1 SECOND = 1
MINUTE = 60*SECOND MINUTE = 60*SECOND
class Timeout(Exception):
pass
class WrongPasswordError(Exception):
"""
Key confirmation failed. Either you or your correspondent typed the code
wrong, or a would-be man-in-the-middle attacker guessed incorrectly. You
could try again, giving both your correspondent and the attacker another
chance.
"""
# or the data blob was corrupted, and that's why decrypt failed
def explain(self):
return textwrap.dedent(self.__doc__)
class ReflectionAttack(Exception):
"""An attacker (or bug) reflected our outgoing message back to us."""
class UsageError(Exception):
"""The programmer did something wrong."""
# relay URLs are: # relay URLs are:
# GET /list -> {channel-ids: [INT..]} # GET /list -> {channel-ids: [INT..]}
# POST /allocate/SIDE -> {channel-id: INT} # POST /allocate/SIDE -> {channel-id: INT}

View File

@ -1,4 +1,4 @@
import functools import functools, textwrap
class ServerError(Exception): class ServerError(Exception):
def __init__(self, message, relay): def __init__(self, message, relay):
@ -16,3 +16,23 @@ def handle_server_error(func):
print("Server error (from %s):\n%s" % (e.relay, e.message)) print("Server error (from %s):\n%s" % (e.relay, e.message))
return 1 return 1
return _wrap return _wrap
class Timeout(Exception):
pass
class WrongPasswordError(Exception):
"""
Key confirmation failed. Either you or your correspondent typed the code
wrong, or a would-be man-in-the-middle attacker guessed incorrectly. You
could try again, giving both your correspondent and the attacker another
chance.
"""
# or the data blob was corrupted, and that's why decrypt failed
def explain(self):
return textwrap.dedent(self.__doc__)
class ReflectionAttack(Exception):
"""An attacker (or bug) reflected our outgoing message back to us."""
class UsageError(Exception):
"""The programmer did something wrong."""

View File

@ -13,20 +13,10 @@ from spake2 import SPAKE2_Symmetric
from .eventsource_twisted import ReconnectingEventSource from .eventsource_twisted import ReconnectingEventSource
from .. import __version__ from .. import __version__
from .. import codes from .. import codes
from ..errors import ServerError from ..errors import (ServerError, WrongPasswordError,
ReflectionAttack, UsageError)
from ..util.hkdf import HKDF from ..util.hkdf import HKDF
class WrongPasswordError(Exception):
"""
Key confirmation failed.
"""
class ReflectionAttack(Exception):
"""An attacker (or bug) reflected our outgoing message back to us."""
class UsageError(Exception):
"""The programmer did something wrong."""
@implementer(IBodyProducer) @implementer(IBodyProducer)
class DataProducer: class DataProducer:
def __init__(self, data): def __init__(self, data):