Example #1
0
class WebApp():
    app = Klein()

    def __init__(self):
        # get the config settings
        self.config = configparser.ConfigParser()
        curr_dir = os.path.dirname(__file__)
        config_file = os.path.join(curr_dir, "./config/config.ini")
        self.config.read(config_file)
        self.mode = self.config['status']['mode']

        #create instance
        self.wallet = Wallet()
        self.transaction = Transaction()

    @app.route("/", methods=['GET'])
    def hello(self, request):
        return "hello"

    # get balance from wallet
    @app.route("/api/wallet", methods=["GET"])
    @inlineCallbacks
    def get_balance(self, request):
        request_params = get_request_params(request)

        # check if compulsory key exist
        flag_exist, error_message_json = check_key_exist(
            request_params, "account", self.mode)
        if not flag_exist:
            request.setResponseCode(400)
            returnValue(error_message_json)

        # get account
        account = get_param_str(
            request_params, "account",
            "")  # 0x23945D32a86F89C456f77a5d0b91Ec238c00F1EA

        try:
            results = yield (self.wallet.get_balance(account))
        except:
            request.setResponseCode(500)
            returnValue(
                json.dumps(
                    {"error":
                     "Something went wrong. Please try again later."}))

        if results == "error_conn_infura":
            request.setResponseCode(400)
            returnValue(json.dumps({"error": "Cannot connect Infura"}))
        elif results == "error_in_account":
            request.setResponseCode(400)
            returnValue(
                json.dumps({"error": "Problem in accessing the account"}))
        else:
            request.setResponseCode(200)
            returnValue(json.dumps(results))

    # create wallet in bulk
    @app.route("/api/wallet", methods=["POST"])
    @inlineCallbacks
    def create_wallet(self, request):
        request_params = get_request_params(request)

        num_of_wallet = get_param_int(request_params, "num_of_wallet", 1)

        try:
            results = yield (self.wallet.create_wallet(num_of_wallet))
        except:
            request.setResponseCode(500)
            returnValue(
                json.dumps(
                    {"error":
                     "Something went wrong. Please try again later."}))

        request.setResponseCode(201)
        returnValue(json.dumps(results))

    # issue certiciate
    @app.route("/api/certificate", methods=["POST"])
    @inlineCallbacks
    def issue_certificate(self, request):
        request_params = get_request_params(request)

        # check if compulsory key exist
        flag_exist, error_message_json = check_key_exist(
            request_params, "to_addr", self.mode)
        if not flag_exist:
            request.setResponseCode(400)
            returnValue(error_message_json)
        flag_exist, error_message_json = check_key_exist(
            request_params, "message", self.mode)
        if not flag_exist:
            request.setResponseCode(400)
            returnValue(error_message_json)

        # get parameter value
        to_addr = get_param_str(
            request_params, "to_addr",
            None)  # 0x1FB6b70FF9671fc0447D3e55205c702983Ad4787
        message = get_param_str(request_params, "message", None)
        print(to_addr, message)

        try:
            results = yield (self.transaction.send_transaction(
                to_addr, message))
        except:
            request.setResponseCode(500)
            returnValue(
                json.dumps(
                    {"error":
                     "Something went wrong. Please try again later."}))

        if results == "error_conn_infura":
            request.setResponseCode(400)
            returnValue(json.dumps({"error": "Cannot connect Infura"}))
        elif results == "error_in_transaction":
            request.setResponseCode(400)
            returnValue(json.dumps({"error":
                                    "Problem in sending transaction"}))
        else:
            request.setResponseCode(200)
            returnValue(json.dumps(results))

    # check status
    @app.route("/api/transaction", methods=["GET"])
    @inlineCallbacks
    def check_status(self, request):
        request_params = get_request_params(request)

        # check if compulsory key exist
        flag_exist, error_message_json = check_key_exist(
            request_params, "tx_hash", self.mode)
        if not flag_exist:
            request.setResponseCode(400)
            returnValue(error_message_json)

        # get parameter value
        tx_hash = get_param_str(request_params, "tx_hash", None)

        try:
            results = yield (self.transaction.check_status(tx_hash))
        except:
            request.setResponseCode(500)
            returnValue(
                json.dumps(
                    {"error":
                     "Something went wrong. Please try again later."}))

        if results == "error_conn_infura":
            request.setResponseCode(400)
            returnValue(json.dumps({"error": "Cannot connect Infura"}))
        else:
            request.setResponseCode(200)
            returnValue(json.dumps(results))