#!/usr/bin/python # -*- coding: utf-8 -*- import json, os from bitcoinrpc.authproxy import AuthServiceProxy from lbryschema.decode import smart_decode from flask import Flask, url_for app = Flask(__name__) def get_lbrycrdd_connection_details(wallet_conf): settings = {"username": "lbry", "password": "lbry", "rpc_port": 9245} if wallet_conf and os.path.exists(wallet_conf): with open(wallet_conf, "r") as conf: conf_lines = conf.readlines() for l in conf_lines: if l.startswith("rpcuser="): settings["username"] = l[8:].rstrip('\n') if l.startswith("rpcpassword="): settings["password"] = l[12:].rstrip('\n') if l.startswith("rpcport="): settings["rpc_port"] = int(l[8:].rstrip('\n')) rpc_user = settings["username"] rpc_pass = settings["password"] rpc_port = settings["rpc_port"] rpc_url = "127.0.0.1" return "http://%s:%s@%s:%i" % (rpc_user, rpc_pass, rpc_url, rpc_port) @app.errorhandler(500) def internal_error(error): return 'error when decoding claims' @app.route('/claim_decode//') def api_decode(txid, nout): connection_string = get_lbrycrdd_connection_details(os.path.expanduser("~")+"/.lbrycrd/lbrycrd.conf") rpc = AuthServiceProxy(connection_string) result = rpc.getclaimsfortx(txid) claim = None for claim_out in result: if claim_out['nOut'] == int(nout): claim = claim_out break if claim: converted = ''.join([chr(ord(i)) for i in claim['value']]) decoded = smart_decode(converted) claim['value'] = decoded.claim_dict return json.dumps(claim) @app.route('/claim_decodeinv/') def api_decodebyclaim(claimid): connection_string = get_lbrycrdd_connection_details(os.path.expanduser("~")+"/.lbrycrd/lbrycrd.conf") rpc = AuthServiceProxy(connection_string) claim = rpc.getvalueforname(claimid) if claim: converted = ''.join([chr(ord(i)) for i in claim['value']]) decoded = smart_decode(converted) claim['value'] = decoded.claim_dict return json.dumps(claim) if __name__ == '__main__': app.run(host='127.0.0.1')