Remove code from accounts __init__ to separate modules
parent
dfd84644fb
commit
f3a57cb2cd
|
@ -1,117 +0,0 @@
|
||||||
from app.core import bcrypt
|
|
||||||
from flask import Blueprint
|
|
||||||
from .models import Account, Role
|
|
||||||
|
|
||||||
accounts_bp = Blueprint('accounts', __name__)
|
|
||||||
|
|
||||||
|
|
||||||
def create_account(username, email, password):
|
|
||||||
"""
|
|
||||||
Tries to create account with given parameters. Raises error on failure
|
|
||||||
|
|
||||||
:param username: Desired username for Account
|
|
||||||
:param email: Desired email for Account
|
|
||||||
:param password: Desired password for Account
|
|
||||||
:type username: string
|
|
||||||
:type email: string
|
|
||||||
:type password: string
|
|
||||||
:returns: True if account is successfully created
|
|
||||||
:rtype: Boolean
|
|
||||||
:raises: ValueError if account already exists
|
|
||||||
"""
|
|
||||||
if not Account.exists_with_any_of(username=username, email=email):
|
|
||||||
pw_hash = bcrypt.generate_password_hash(password).decode('utf-8')
|
|
||||||
account = Account(username, pw_hash, email)
|
|
||||||
account.save()
|
|
||||||
return True
|
|
||||||
|
|
||||||
raise ValueError("Account with given parameters already exists")
|
|
||||||
|
|
||||||
|
|
||||||
def update_account_role(account_id, role_id):
|
|
||||||
"""
|
|
||||||
Tries to update account role
|
|
||||||
|
|
||||||
:param account_id: Target account id
|
|
||||||
:param role_id: New role role_id
|
|
||||||
:type account_id: int
|
|
||||||
:type role_id: int
|
|
||||||
:returns: True if role is updated successfully
|
|
||||||
:rtype: Boolean
|
|
||||||
"""
|
|
||||||
acc = Account.get(id=account_id)
|
|
||||||
acc.role_id = role_id
|
|
||||||
acc.save()
|
|
||||||
|
|
||||||
|
|
||||||
def create_role(display_name, permissions):
|
|
||||||
"""
|
|
||||||
Tries to create role
|
|
||||||
|
|
||||||
:param display_name: Name of role - display only
|
|
||||||
:param permissions: List of strings - permissions that this role has
|
|
||||||
:type display_name: String
|
|
||||||
:type permissions: List of String
|
|
||||||
:returns: True if role is successfully created
|
|
||||||
:rtype: Boolean
|
|
||||||
:raises: ValueError if role already exists
|
|
||||||
"""
|
|
||||||
role = Role(display_name, permissions)
|
|
||||||
role.save()
|
|
||||||
|
|
||||||
|
|
||||||
def get_role(role_id):
|
|
||||||
"""
|
|
||||||
Tries to get role
|
|
||||||
|
|
||||||
:param role_id: Id of role
|
|
||||||
:type role_id: int
|
|
||||||
:returns: Role if found
|
|
||||||
:rtype: Role
|
|
||||||
"""
|
|
||||||
return Role.get(role_id)
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_roles():
|
|
||||||
"""
|
|
||||||
Gets all roles
|
|
||||||
|
|
||||||
:returns: Role list if found
|
|
||||||
:rtype: List of Roles
|
|
||||||
"""
|
|
||||||
return Role.get_all()
|
|
||||||
|
|
||||||
|
|
||||||
def create_token(username, password):
|
|
||||||
"""
|
|
||||||
Tries to create token for account with given parameters.
|
|
||||||
Raises error on failure
|
|
||||||
|
|
||||||
:param username: username of Account
|
|
||||||
:param password: password of Account
|
|
||||||
:type username: string
|
|
||||||
:type password: string
|
|
||||||
:returns: created token
|
|
||||||
:rtype: string
|
|
||||||
:raises: ValueError if credentials are invalid or account does not exist
|
|
||||||
"""
|
|
||||||
if not Account.exists(username=username):
|
|
||||||
raise ValueError("Invalid credentials")
|
|
||||||
|
|
||||||
account = Account.get(username=username)
|
|
||||||
if not bcrypt.check_password_hash(account.password, password):
|
|
||||||
raise ValueError("Invalid credentials")
|
|
||||||
|
|
||||||
return account.create_auth_token()
|
|
||||||
|
|
||||||
|
|
||||||
def validate_token(token):
|
|
||||||
"""
|
|
||||||
Validates token and returns associated account
|
|
||||||
|
|
||||||
:param token: auth token to validate
|
|
||||||
:type token: string
|
|
||||||
:returns: created token
|
|
||||||
:rtype: Account
|
|
||||||
"""
|
|
||||||
return Account.validate_token(token)
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
from app.core import bcrypt
|
||||||
|
from .models import Account, Role
|
||||||
|
|
||||||
|
|
||||||
|
def create_account(username, email, password):
|
||||||
|
"""
|
||||||
|
Tries to create account with given parameters. Raises error on failure
|
||||||
|
|
||||||
|
:param username: Desired username for Account
|
||||||
|
:param email: Desired email for Account
|
||||||
|
:param password: Desired password for Account
|
||||||
|
:type username: string
|
||||||
|
:type email: string
|
||||||
|
:type password: string
|
||||||
|
:returns: True if account is successfully created
|
||||||
|
:rtype: Boolean
|
||||||
|
:raises: ValueError if account already exists
|
||||||
|
"""
|
||||||
|
if not Account.exists_with_any_of(username=username, email=email):
|
||||||
|
pw_hash = bcrypt.generate_password_hash(password).decode('utf-8')
|
||||||
|
account = Account(username, pw_hash, email)
|
||||||
|
account.save()
|
||||||
|
return True
|
||||||
|
|
||||||
|
raise ValueError("Account with given parameters already exists")
|
||||||
|
|
||||||
|
|
||||||
|
def update_account_role(account_id, role_id):
|
||||||
|
"""
|
||||||
|
Tries to update account role
|
||||||
|
|
||||||
|
:param account_id: Target account id
|
||||||
|
:param role_id: New role role_id
|
||||||
|
:type account_id: int
|
||||||
|
:type role_id: int
|
||||||
|
:returns: True if role is updated successfully
|
||||||
|
:rtype: Boolean
|
||||||
|
"""
|
||||||
|
acc = Account.get(id=account_id)
|
||||||
|
acc.role_id = role_id
|
||||||
|
acc.save()
|
||||||
|
|
||||||
|
|
||||||
|
def create_role(display_name, permissions):
|
||||||
|
"""
|
||||||
|
Tries to create role
|
||||||
|
|
||||||
|
:param display_name: Name of role - display only
|
||||||
|
:param permissions: List of strings - permissions that this role has
|
||||||
|
:type display_name: String
|
||||||
|
:type permissions: List of String
|
||||||
|
:returns: True if role is successfully created
|
||||||
|
:rtype: Boolean
|
||||||
|
:raises: ValueError if role already exists
|
||||||
|
"""
|
||||||
|
role = Role(display_name, permissions)
|
||||||
|
role.save()
|
||||||
|
|
||||||
|
|
||||||
|
def get_role(role_id):
|
||||||
|
"""
|
||||||
|
Tries to get role
|
||||||
|
|
||||||
|
:param role_id: Id of role
|
||||||
|
:type role_id: int
|
||||||
|
:returns: Role if found
|
||||||
|
:rtype: Role
|
||||||
|
"""
|
||||||
|
return Role.get(role_id)
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_roles():
|
||||||
|
"""
|
||||||
|
Gets all roles
|
||||||
|
|
||||||
|
:returns: Role list if found
|
||||||
|
:rtype: List of Roles
|
||||||
|
"""
|
||||||
|
return Role.get_all()
|
||||||
|
|
||||||
|
|
||||||
|
def create_token(username, password):
|
||||||
|
"""
|
||||||
|
Tries to create token for account with given parameters.
|
||||||
|
Raises error on failure
|
||||||
|
|
||||||
|
:param username: username of Account
|
||||||
|
:param password: password of Account
|
||||||
|
:type username: string
|
||||||
|
:type password: string
|
||||||
|
:returns: created token
|
||||||
|
:rtype: string
|
||||||
|
:raises: ValueError if credentials are invalid or account does not exist
|
||||||
|
"""
|
||||||
|
if not Account.exists(username=username):
|
||||||
|
raise ValueError("Invalid credentials")
|
||||||
|
|
||||||
|
account = Account.get(username=username)
|
||||||
|
if not bcrypt.check_password_hash(account.password, password):
|
||||||
|
raise ValueError("Invalid credentials")
|
||||||
|
|
||||||
|
return account.create_auth_token()
|
||||||
|
|
||||||
|
|
||||||
|
def validate_token(token):
|
||||||
|
"""
|
||||||
|
Validates token and returns associated account
|
||||||
|
|
||||||
|
:param token: auth token to validate
|
||||||
|
:type token: string
|
||||||
|
:returns: created token
|
||||||
|
:rtype: Account
|
||||||
|
"""
|
||||||
|
return Account.validate_token(token)
|
|
@ -0,0 +1,3 @@
|
||||||
|
from flask import Blueprint
|
||||||
|
|
||||||
|
accounts_bp = Blueprint('accounts', __name__)
|
|
@ -3,7 +3,7 @@ from flask import Blueprint, request, g
|
||||||
from flask_restful import Api, Resource, abort
|
from flask_restful import Api, Resource, abort
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from marshmallow import ValidationError
|
from marshmallow import ValidationError
|
||||||
from app.accounts import validate_token
|
from app.accounts.api import validate_token
|
||||||
|
|
||||||
|
|
||||||
api_bp = Blueprint('api', __name__)
|
api_bp = Blueprint('api', __name__)
|
||||||
|
|
|
@ -3,7 +3,7 @@ from flask import g
|
||||||
from marshmallow import Schema, fields
|
from marshmallow import Schema, fields
|
||||||
from webargs.flaskparser import use_args
|
from webargs.flaskparser import use_args
|
||||||
from flasgger import swag_from
|
from flasgger import swag_from
|
||||||
import app.accounts as accounts
|
import app.accounts.api as accounts
|
||||||
from app.api import ProtectedResource, requires_permission
|
from app.api import ProtectedResource, requires_permission
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from webargs import fields
|
||||||
from webargs.flaskparser import use_args
|
from webargs.flaskparser import use_args
|
||||||
from flasgger import swag_from
|
from flasgger import swag_from
|
||||||
from app.api import ProtectedResource
|
from app.api import ProtectedResource
|
||||||
import app.accounts as accounts
|
import app.accounts.api as accounts
|
||||||
|
|
||||||
|
|
||||||
class TokenResource(Resource):
|
class TokenResource(Resource):
|
||||||
|
|
|
@ -4,7 +4,7 @@ from flask_sqlalchemy import SQLAlchemy
|
||||||
from flask_bcrypt import Bcrypt
|
from flask_bcrypt import Bcrypt
|
||||||
from flasgger import Swagger
|
from flasgger import Swagger
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from .tasks import celery as celery_configurator
|
from .tasks import celery_configurator
|
||||||
|
|
||||||
app = FlaskAPI(__name__, instance_relative_config=True)
|
app = FlaskAPI(__name__, instance_relative_config=True)
|
||||||
app.config.from_object('config')
|
app.config.from_object('config')
|
||||||
|
@ -27,7 +27,7 @@ def setup_blueprints(app):
|
||||||
They are exposed as blueprints just for consistency, otherwise
|
They are exposed as blueprints just for consistency, otherwise
|
||||||
they are just simple python packages/modules
|
they are just simple python packages/modules
|
||||||
"""
|
"""
|
||||||
from .accounts import accounts_bp
|
from .accounts.blueprint import accounts_bp
|
||||||
from .devices import devices_bp
|
from .devices import devices_bp
|
||||||
from .dashboard import dashboard_bp
|
from .dashboard import dashboard_bp
|
||||||
from .api import api_bp
|
from .api import api_bp
|
||||||
|
|
|
@ -28,7 +28,7 @@ CSRF_SESSION_KEY = "secret"
|
||||||
SECRET_KEY = "?['Z(Z\x83Y \x06T\x12\x96<\xff\x12\xe0\x1b\xd1J\xe0\xd9ld"
|
SECRET_KEY = "?['Z(Z\x83Y \x06T\x12\x96<\xff\x12\xe0\x1b\xd1J\xe0\xd9ld"
|
||||||
|
|
||||||
# MQTT configuration
|
# MQTT configuration
|
||||||
MQTT_CLIENT_ID = 'final-iot-backend-server'
|
MQTT_CLIENT_ID = 'final-iot-backend-server-local2'
|
||||||
MQTT_BROKER_URL = 'broker.hivemq.com'
|
MQTT_BROKER_URL = 'broker.hivemq.com'
|
||||||
MQTT_BROKER_PORT = 1883
|
MQTT_BROKER_PORT = 1883
|
||||||
MQTT_USERNAME = 'user'
|
MQTT_USERNAME = 'user'
|
||||||
|
|
Loading…
Reference in New Issue