Skip to content

Commit

Permalink
AuthError Replaces PermissionError Because 2.7
Browse files Browse the repository at this point in the history
Well it seems Python 2.7 is missing PermissionError, and only cool versions like 3.4 have it. So we just created our own error and called it a day.
  • Loading branch information
super3 committed Aug 24, 2015
1 parent 765b3e2 commit 59e007e
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 deletions.
16 changes: 12 additions & 4 deletions dataserv/Farmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@
from dataserv.Validator import is_btc_address


class AuthError(Exception):
def __init__(self, value):
self.value = value

def __str__(self):
return repr(self.value)


def sha256(content):
"""Finds the sha256 hash of the content."""
content = content.encode('utf-8')
Expand Down Expand Up @@ -49,23 +57,23 @@ def authenticate(self, header_authorization, header_date):
if app.config["SKIP_AUTHENTICATION"]:
return True
if not header_authorization:
raise PermissionError("Header authorization required!")
raise AuthError("Header authorization required!")
if not header_date:
raise PermissionError("Header date required!")
raise AuthError("Header date required!")

# verify date
date = datetime(*parsedate(header_date)[:6])
timeout = self.get_server_authentication_timeout()
delta = datetime.now() - date
if delta >= timedelta(seconds=timeout):
raise PermissionError("Header date to old!")
raise AuthError("Header date to old!")

# verify signature
message = self.get_server_address() + " " + header_date
if not BtcTxStore().verify_signature_unicode(self.btc_addr,
header_authorization,
message):
raise PermissionError("Invalid header_authorization!")
raise AuthError("Invalid header_authorization!")
return True

def validate(self, registering=False):
Expand Down
8 changes: 5 additions & 3 deletions dataserv/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
# Import modules
from sqlalchemy import desc
from dataserv.run import app, db
from dataserv.Farmer import Farmer

from dataserv.Farmer import Farmer, AuthError

# Helper functions
def secs_to_mins(seconds):
Expand Down Expand Up @@ -59,12 +58,15 @@ def register_with_payout(btc_addr, payout_addr):
request.headers.get('Date'))
user.register(payout_addr)
return make_response(user.to_json(), 200)
except ValueError as e:
except ValueError:
msg = "Invalid Bitcoin address."
return make_response(error_msg.format(msg), 400)
except LookupError:
msg = "Address already is registered."
return make_response(error_msg.format(msg), 409)
except AuthError:
msg = "Invalid authentication headers."
return make_response(error_msg.format(msg), 409)


@app.route('/api/ping/<btc_addr>', methods=["GET"])
Expand Down
4 changes: 2 additions & 2 deletions tests/test_Farmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from btctxstore import BtcTxStore
from dataserv.app import db, app
from dataserv.Farmer import sha256
from dataserv.Farmer import Farmer
from dataserv.Farmer import Farmer, AuthError
from email.utils import formatdate
from datetime import datetime
from datetime import timedelta
Expand Down Expand Up @@ -149,7 +149,7 @@ def callback():
message = farmer.get_server_address() + " " + header_date
header_authorization = blockchain.sign_unicode(wif, message)
farmer.authenticate(header_authorization, header_date)
self.assertRaises(PermissionError, callback)
self.assertRaises(AuthError, callback)

# TODO test incorrect address
# TODO test incorrect signature

0 comments on commit 59e007e

Please sign in to comment.