commit
8d923df212
|
@ -121,7 +121,6 @@ def create_token(username, password):
|
||||||
raise ValueError("Invalid credentials")
|
raise ValueError("Invalid credentials")
|
||||||
|
|
||||||
if not account.confirmed:
|
if not account.confirmed:
|
||||||
print('ACCOUNT NOT CONFIRMED?')
|
|
||||||
raise ValueError("Email not confirmed")
|
raise ValueError("Email not confirmed")
|
||||||
|
|
||||||
return account.create_auth_token()
|
return account.create_auth_token()
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from flask_restful import Api
|
from flask_restful import Api
|
||||||
from marshmallow import ValidationError
|
from marshmallow import ValidationError
|
||||||
|
from app.errors import NotPresentError
|
||||||
from flask import Blueprint, jsonify
|
from flask import Blueprint, jsonify
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,6 +90,12 @@ def handle_value_error(e):
|
||||||
return jsonify({'status': 'error', 'message': str(e)}), 422
|
return jsonify({'status': 'error', 'message': str(e)}), 422
|
||||||
|
|
||||||
|
|
||||||
|
@api_bp.errorhandler(NotPresentError)
|
||||||
|
@api_bp.errorhandler(404)
|
||||||
|
def handle_not_present_error(e):
|
||||||
|
return jsonify({'status': 'error', 'message': str(e)}), 404
|
||||||
|
|
||||||
|
|
||||||
@api_bp.errorhandler(Exception)
|
@api_bp.errorhandler(Exception)
|
||||||
@api_bp.errorhandler(500)
|
@api_bp.errorhandler(500)
|
||||||
def handle_unknown_errors(e):
|
def handle_unknown_errors(e):
|
||||||
|
|
|
@ -86,24 +86,21 @@ class AccountListResource(Resource):
|
||||||
@use_args(UserSchema(), locations=('json',))
|
@use_args(UserSchema(), locations=('json',))
|
||||||
@swag_from('swagger/create_account_spec.yaml')
|
@swag_from('swagger/create_account_spec.yaml')
|
||||||
def post(self, args):
|
def post(self, args):
|
||||||
try:
|
created_account, emailtoken = accounts.create_account(
|
||||||
created_account, emailtoken = accounts.create_account(
|
args['username'],
|
||||||
args['username'],
|
args['email'],
|
||||||
args['email'],
|
args['password'])
|
||||||
args['password'])
|
confirm_url = api.url_for(
|
||||||
confirm_url = api.url_for(
|
AccountEmailTokenResource,
|
||||||
AccountEmailTokenResource,
|
token=emailtoken, _external=True)
|
||||||
token=emailtoken, _external=True)
|
html = render_template(
|
||||||
html = render_template(
|
'activate_mail.html',
|
||||||
'activate_mail.html',
|
confirm_url=confirm_url)
|
||||||
confirm_url=confirm_url)
|
send_email_task.delay(
|
||||||
send_email_task.delay(
|
args['email'],
|
||||||
args['email'],
|
'ETF IoT Email confirmation',
|
||||||
'ETF IoT Email confirmation',
|
html)
|
||||||
html)
|
return UserSchema().dump(created_account), 201
|
||||||
return UserSchema().dump(created_account), 201
|
|
||||||
except ValueError:
|
|
||||||
abort(422, message='Account already exists', status='error')
|
|
||||||
|
|
||||||
|
|
||||||
class AccountEmailTokenResource(Resource):
|
class AccountEmailTokenResource(Resource):
|
||||||
|
|
|
@ -11,6 +11,7 @@ from .models import (Device,
|
||||||
AccessLevel)
|
AccessLevel)
|
||||||
from itsdangerous import URLSafeSerializer
|
from itsdangerous import URLSafeSerializer
|
||||||
from app.core import app
|
from app.core import app
|
||||||
|
from app.errors import NotPresentError
|
||||||
from app.jsonql import api as jsonql
|
from app.jsonql import api as jsonql
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,7 +111,7 @@ def get_device_recordings(device_id):
|
||||||
:raises: ValueError if device does not exist
|
:raises: ValueError if device does not exist
|
||||||
"""
|
"""
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device with id %s does not exist" % device_id)
|
raise NotPresentError("Device with id %s does not exist" % device_id)
|
||||||
|
|
||||||
return Recording.get_many(device_id=device_id)
|
return Recording.get_many(device_id=device_id)
|
||||||
|
|
||||||
|
@ -134,7 +135,7 @@ def get_device_recordings_filtered(device_id, record_type=None,
|
||||||
:raises: ValueError if device does not exist
|
:raises: ValueError if device does not exist
|
||||||
"""
|
"""
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device with id %s does not exist" % device_id)
|
raise NotPresentError("Device with id %s does not exist" % device_id)
|
||||||
|
|
||||||
return Recording.get_many_filtered(device_id, record_type,
|
return Recording.get_many_filtered(device_id, record_type,
|
||||||
start_date, end_date)
|
start_date, end_date)
|
||||||
|
@ -282,7 +283,7 @@ def create_recording_and_return(device_id, raw_json,
|
||||||
:raises: ValueError if parsing fails or device does not exist
|
:raises: ValueError if parsing fails or device does not exist
|
||||||
"""
|
"""
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device does not exist!")
|
raise NotPresentError("Device does not exist!")
|
||||||
|
|
||||||
if not authenticated:
|
if not authenticated:
|
||||||
validate_hmac_in_message(device_id, raw_json)
|
validate_hmac_in_message(device_id, raw_json)
|
||||||
|
@ -303,7 +304,7 @@ def create_recording(device_id, raw_json):
|
||||||
:raises: ValueError if parsing fails or device does not exist
|
:raises: ValueError if parsing fails or device does not exist
|
||||||
"""
|
"""
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device does not exist!")
|
raise NotPresentError("Device does not exist!")
|
||||||
|
|
||||||
validate_hmac_in_message(device_id, raw_json)
|
validate_hmac_in_message(device_id, raw_json)
|
||||||
recording = parse_raw_json_recording(device_id, raw_json)
|
recording = parse_raw_json_recording(device_id, raw_json)
|
||||||
|
@ -326,9 +327,9 @@ def create_targeted_device_sharing_token(
|
||||||
:raises: ValueError if device does not exist
|
:raises: ValueError if device does not exist
|
||||||
"""
|
"""
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device does not exist!")
|
raise NotPresentError("Device does not exist!")
|
||||||
if not AccessLevel.exists(id=access_level_id):
|
if not AccessLevel.exists(id=access_level_id):
|
||||||
raise ValueError("AccessLevel does not exist!")
|
raise NotPresentError("AccessLevel does not exist!")
|
||||||
|
|
||||||
data_to_serialize = {
|
data_to_serialize = {
|
||||||
'device_id': device_id,
|
'device_id': device_id,
|
||||||
|
@ -363,7 +364,7 @@ def activate_device_sharing_token(account_id, token):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device does not exist!")
|
raise NotPresentError("Device does not exist!")
|
||||||
|
|
||||||
device_association = DeviceAssociation(device_id, account_id,
|
device_association = DeviceAssociation(device_id, account_id,
|
||||||
access_level_id)
|
access_level_id)
|
||||||
|
@ -376,7 +377,7 @@ def run_custom_query(device_id, request):
|
||||||
Runs custom query as defined by jsonql module
|
Runs custom query as defined by jsonql module
|
||||||
"""
|
"""
|
||||||
if not Device.exists(id=device_id):
|
if not Device.exists(id=device_id):
|
||||||
raise ValueError("Device does not exist!")
|
raise NotPresentError("Device does not exist!")
|
||||||
|
|
||||||
def recording_field_provider(name):
|
def recording_field_provider(name):
|
||||||
if name == 'record_value':
|
if name == 'record_value':
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class NotPresentError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class BadRequestError(Exception):
|
||||||
|
pass
|
|
@ -2,7 +2,7 @@ import os
|
||||||
|
|
||||||
# App configuration
|
# App configuration
|
||||||
DEBUG = os.environ['DEBUG']
|
DEBUG = os.environ['DEBUG']
|
||||||
APP_VERSION = '0.4.1'
|
APP_VERSION = '0.4.2'
|
||||||
|
|
||||||
# Define the application directory
|
# Define the application directory
|
||||||
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
Loading…
Reference in New Issue