Exemple #1
0
from flask import Blueprint

from models.contract import GetAllContracts
from utils.db_utils import requires_db
from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, error_response, log_kv, LOG_DEBUG, LOG_ERROR
from models.claim import Location
from models.contract import GetAllContractsByProximity, GetAllTradableContracts, GetProximityContracts, \
    TradableTokenResponse, GET_CONTRACT_DOC_EXPLORE
from routes import load_with_schema


explore_bp = Blueprint('explore', __name__)
explore_docs = BlueprintDocumentation(explore_bp, 'Explore')
url_prefix = '/explore'


@explore_bp.route(url_prefix + '/contracts', defaults={'keyword': None, 'include_nearby': 1}, methods=['GET'])
@explore_bp.route(url_prefix + '/contracts/keyword=<string:keyword>', defaults={'include_nearby': 1},
                  methods=['GET'])
@explore_bp.route(url_prefix + '/contracts/include_nearby=<int:include_nearby>', defaults={'keyword': None},
                  methods=['GET'])
@explore_bp.route(url_prefix + '/contracts/keyword=<string:keyword>&include_nearby=<int:include_nearby>',
                  methods=['GET'])
@requires_db
@explore_docs.document(url_prefix + '/contracts', 'GET',
                       """
                       Get's all contracts for the explore page.
                       """, output_schema=GET_CONTRACT_DOC_EXPLORE)
@explore_docs.document(url_prefix + '/contracts/keyword=<string:keyword>', 'GET',
                       """
Exemple #2
0
from flask import Blueprint, g
from flask_restful import Resource, Api

from ether.geth_keeper import GethException
from models.collector import CreateCollectorRequest, GetCollectorByUsername, GetCollectorByCID, GetCollection, \
    CollectorInfoRequest
from models.collector import create_collector
from routes import load_with_schema, requires_geth
from utils.db_utils import requires_db
from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, error_response, log_kv, LOG_INFO, LOG_ERROR, LOG_WARNING
from utils.verify_utils import generate_jwt, verify_collector_jwt

collector_bp = Blueprint('collector', __name__)
collector_docs = BlueprintDocumentation(collector_bp, 'Collector')
url_prefix = '/collector'


@collector_bp.route(url_prefix + '/username=<string:username>',
                    methods=['GET'])
@requires_db
@collector_docs.document(
    url_prefix + '/username=<string:username>',
    'GET',
    """
                         Method to retrieve collector information by username
                         """,
    url_params={'username': '******'})
def get_collector_by_username(username):
    collector = GetCollectorByUsername().execute_n_fetchone(
        {'username': username}, close_connection=True)
Exemple #3
0
from flask import Blueprint, g

from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, log_kv, LOG_INFO
from utils.verify_utils import verify_issuer_jwt, verify_collector_jwt

ping = Blueprint('ping', __name__)
ping_docs = BlueprintDocumentation(ping, 'Ping')
url_prefix = '/ping'


@ping.route(url_prefix, methods=['GET'])
@ping_docs.document(url_prefix, 'GET',
                    """
                    Method to test connectivity to server.
                    """)
def pings():
    log_kv(LOG_INFO, {'message': 'ping called pong respond'})
    return success_response("pong")


@ping.route(url_prefix+'_issuer_a', methods=['GET'])
@verify_issuer_jwt
@ping_docs.document(url_prefix+'_issuer_a', 'GET',
                    """
                    Ping that requires collector verification.
                    """, req_i_jwt=True)
def issuer_a_ping():
    log_kv(LOG_INFO, {'message': 'authorized issuer ping called', 'issuer_id': g.issuer_info['i_id']})
    return success_response("pong for i_id:{}".format(g.issuer_info['i_id']))
Exemple #4
0
from flask import Blueprint, g

from ether.geth_keeper import GethException
from models.claim import ClaimRequest, GetTokenInfo, GetAvailableToken, SetToken, ClaimQRCodeRequest,\
    GetSingleAvailToken
from models.contract import TokenStatus
from models.constraints import validate_uni_code_constraints, validate_time_constraints, validate_location_constraints
from routes import load_with_schema, requires_geth
from utils.db_utils import requires_db
from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, error_response, log_kv, LOG_INFO, LOG_ERROR
from utils.verify_utils import verify_collector_jwt

claim_bp = Blueprint('claim', __name__)
claim_docs = BlueprintDocumentation(claim_bp, 'Claim')
url_prefix = '/claim'


@claim_bp.route(url_prefix + '/qr_code', methods=['POST'])
@requires_db
@requires_geth
@load_with_schema(ClaimQRCodeRequest)
@verify_collector_jwt
@claim_docs.document(url_prefix + '/qr_code',
                     'POST',
                     """
                     Method to claim a token of of an issued contract from a qr_code.
                     """,
                     input_schema=ClaimQRCodeRequest,
                     req_c_jwt=True,
Exemple #5
0
from flask import Blueprint, g, render_template
from utils.doc_utils import BlueprintDocumentation
from utils.verify_utils import verify_issuer_jwt
from utils.utils import error_response, success_response
from utils.db_utils import requires_db
from models.constraints import get_all_constraints

analytics_bp = Blueprint('analytics', __name__)
analytics_docs = BlueprintDocumentation(analytics_bp, 'Analytics')
url_prefix = '/analytics'


@analytics_bp.route(url_prefix + "/tok_sum", methods=['GET'])
@verify_issuer_jwt
@requires_db
def summary():
    data = g.sesh.execute(
        """
    select contracts.*, (select count(*) from tokens where tokens.con_id = contracts.con_id and  status = 'S') as 
    num_claimed from contracts where contracts.i_id = :desired_id;""", {
            'desired_id': g.issuer_info['i_id']
        }).fetchall()

    bar_values = []
    bar_labels = []
    for r in data:
        bar_values.append(100 * r['num_claimed'] / r['num_created'])
        bar_labels.append(r['name'])

    return render_template('bar_chart.html',
                           title='Tokens Claimed',
Exemple #6
0
from flask import Blueprint
from flask import render_template

from utils.doc_utils import BlueprintDocumentation

frontend_bp = Blueprint('frontend', __name__)
frontend_docs = BlueprintDocumentation(frontend_bp, 'Frontend')
dir = "www/"


@frontend_bp.route("/index")
@frontend_bp.route("/")
def index():
    return render_template(dir + "index.html")


@frontend_bp.route("/home")
def home():
    return render_template(dir + "home.html")


@frontend_bp.route("/creation")
def creation():
    return render_template(dir + "creation.html")


@frontend_bp.route("/explore")
def explore():
    return render_template(dir + "explore.html")

Exemple #7
0
from flask import Blueprint

from models.collector import LoginCollectorRequest, GetCollectorLoginDetails
from models.issuer import LoginIssuerRequest, GetIssuerLoginDetails
from routes import load_with_schema
from utils.db_utils import requires_db
from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, error_response, log_kv, LOG_WARNING, LOG_DEBUG, LOG_INFO
from utils.verify_utils import generate_jwt

login_bp = Blueprint('login', __name__)
login_docs = BlueprintDocumentation(login_bp, 'Login')
url_prefix = '/login'


@login_bp.route(url_prefix + '/collector', methods=['POST'])
@load_with_schema(LoginCollectorRequest)
@requires_db
@login_docs.document(url_prefix + '/collector',
                     'POST',
                     """
                     This method verifies collector creds and generates a JWT if successful verification takes place.
                     """,
                     input_schema=LoginCollectorRequest,
                     error_codes={'420': 'Failed authorization.'})
def get_collector_jwt(data):
    # Gather up login details.
    login_deets = GetCollectorLoginDetails().execute_n_fetchone(
        binds=data, close_connection=True)
    if login_deets is None:
        log_kv(
Exemple #8
0
from ether.geth_keeper import GethException
from models.constraints import get_all_constraints
from models.contract import ContractRequest, GetContractByConID, GetContractByName, \
    GetContractsByIssuerID, process_constraints, insert_bulk_tokens, GetContractResponse, UpdateQRCODE, GetAllQRCodes, \
    DoesContractHaveQRCode, GetMetaDataByConID
from models.issuer import GetIssuerInfo
from routes import requires_geth
from utils.db_utils import requires_db
from utils.doc_utils import BlueprintDocumentation
from utils.image_utils import save_file, serve_file, save_qrcode, Folders, save_json_data, get_qr_code_root_dir,\
    get_qr_code_zip_dir
from utils.utils import success_response, error_response, log_kv, LOG_WARNING, LOG_INFO, LOG_ERROR, LOG_DEBUG
from utils.verify_utils import verify_issuer_jwt, generate_jwt

contract_bp = Blueprint('contract', __name__)
contract_docs = BlueprintDocumentation(contract_bp, 'Contract')
url_prefix = '/contract'

MAX_TOKEN_LIMIT = 1000


class Contract(Resource):
    @verify_issuer_jwt
    @requires_db
    @requires_geth
    @contract_docs.document(
        url_prefix + " ",
        'POST',
        """
                            Method to start a request to issue a new token on the eth network. This will also create all 
                            new tokens associated with the method. This method requires a multipart form. The three 
Exemple #9
0
from flask import Blueprint, g
from flask_restful import Resource, Api

from ether.geth_keeper import GethException
from models.issuer import CreateIssuerRequest, GetIssuerByIID, GetIssuerByUsername, create_issuer
from routes import load_with_schema, requires_geth
from utils.db_utils import requires_db
from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, error_response, log_kv, LOG_INFO, LOG_ERROR, LOG_WARNING
from utils.verify_utils import verify_issuer_jwt, generate_jwt

issuer_bp = Blueprint('issuer', __name__)
issuer_docs = BlueprintDocumentation(issuer_bp, 'Issuer')
url_prefix = '/issuer'


@issuer_bp.route(url_prefix + '/username=<string:username>', methods=['GET'])
@requires_db
@issuer_docs.document(url_prefix + '/username=<string:username>', 'GET', """
                      Gets issuer information by username
                      """)
def get_issuer_by_username(username):
    """
    This method retrieves issuer data for the given username.
    :param username: username of issuer to retrieve.
    :return:
    """
    issuer = GetIssuerByUsername().execute_n_fetchone({'username': username},
                                                      close_connection=True)
    if issuer:
        log_kv(LOG_INFO, {
Exemple #10
0
from flask_restful import Resource, Api

from models.collector import GetCollectorByCID
from utils.doc_utils import BlueprintDocumentation
from utils.verify_utils import verify_collector_jwt
from utils.db_utils import requires_db
from utils.utils import success_response, error_response, log_kv, LOG_ERROR
from routes import load_with_schema, requires_geth

from models.contract import GetContractByConID, UpdateTokenStatus, TokenStatus
from models.issuer import GetIssuerByIID

from models.transfer import ExternalTransfer

transfer_bp = Blueprint('transfer', __name__)
transfer_docs = BlueprintDocumentation(transfer_bp, 'Transfer')
url_prefix = '/transfer'


class Transfer(Resource):
    @requires_db
    @requires_geth
    @transfer_bp.route(url_prefix)
    @transfer_docs.document(
        url_prefix,
        'POST',
        """
                            This method performs a transfer to an external account outside of the token environment.
                            """,
        req_c_jwt=True,
        error_codes={423: "Couldn't perform external token transfer."})
Exemple #11
0
from flask_restful import Resource, Api

from utils.doc_utils import BlueprintDocumentation
from utils.utils import success_response, error_response, log_kv, LOG_INFO, LOG_ERROR
from utils.db_utils import requires_db
from utils.verify_utils import verify_collector_jwt
from ether.geth_keeper import GethException
from routes import load_with_schema, requires_geth
from models.trade import TradeRequest, DeleteTradeRequest, TradeResponseRequest, GetTradeByTRID, UpdateTradeStatus, \
    TradeStatus, GetTradeItems, InvalidateTradeRequests, GetActiveTradeRequests, GetUntradables, \
    create_trade_request, check_trade_item_ownership, check_active_trade_item, is_valid_trade_items, \
    validate_offer_and_trade, GetTokenInfo, TradeResponse, GetTraderInfo
from models.collector import GetCollectorByCID

trade_bp = Blueprint('trade', __name__)
trade_docs = BlueprintDocumentation(trade_bp, 'Trade')
url_prefix = '/trade'


class Trade(Resource):

    @load_with_schema(TradeRequest, dump=True)
    @requires_db
    @requires_geth
    @verify_collector_jwt
    @trade_docs.document(url_prefix, 'POST',
                         """
                         Method to issue trade request.
                         """, input_schema=TradeRequest, req_c_jwt=True,
                         error_codes={'42': "Untradable tokens in the trade offer.",
                                      '67': "Collector doesn't have ownership of tokens in the trade.",