def pay_to_user(): """The user account transfer Args: is_developer:Is it a developer """ is_developer = g.form.is_developer.data if is_developer is True: send_user_wallet = g.user.username pay_password = g.user.password_hash else: send_user_wallet = g.form.send_user.data pay_password = g.form.pay_password.data recv_wallet_username = g.form.recv_user.data amount = g.form.amount.data try: server = get_jsonrpc_server() result = server.pay(send_user_wallet, pay_password, recv_wallet_username, amount) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20206) return return_result()
def balance(): """Check balances""" is_developer = g.form.is_developer.data if is_developer: username_wallet = g.user.username pay_password = g.user.password_hash else: username_wallet = g.form.username.data pay_password = g.form.pay_password.data try: server = get_jsonrpc_server() result = server.getbalance(username_wallet, pay_password) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20203) result = result.get('result') confirmed = result.get('confirmed', '0') unconfirmed = result.get('unconfirmed', '0') unmatured = result.get('unmatured', '0') total = result.get('total', '0') return return_result(result=dict(total=total, confirmed=confirmed, unconfirmed=unconfirmed, unmatured=unmatured))
def create_wallet(): """Generate wallets for app users.""" appkey = g.appkey username = g.form.username.data pay_password = g.form.pay_password.data try: server = get_jsonrpc_server() result = server.create(username, pay_password) if result.get('errcode') != 0: return result app_user = StatisticsAppUser(appkey=appkey, app_username=username) db.session.add(app_user) db.session.commit() except IntegrityError as ie: app.logger.error(formatter_error(ie)) except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20204) return return_result()
def publish(): """Release resources Args: status: 1:add, 2:update, 3:delete(enabled=False) """ data = copy.deepcopy(g.form.data) data['appkey'] = g.appkey username_wallet = get_wallet_name(data['author']) pay_password = data.pop('pay_password') data['currency'] = app.config['PUBLISH_CURRENCY'] data['bid'] = app.config['PUBLISH_BID'] data['claim_name'] = generate_appkey() metadata = dict(title=data['title'], author=data['author'], tag=data['tags'], description=data['des'], language=data['language'] or 'en', license=data['license'], licenseUrl=data['license_url'], nsfw=False, preview=data['preview'], thumbnail=data['thumbnail']) try: server = get_jsonrpc_server() result = server.publish(username_wallet, pay_password, data['claim_name'], metadata, data['content_type'], data['udfs_hash'], data['currency'], data['price'], data['bid'], None, None, True) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20201) result = result.get('result') data['fee'] = float(result.get('fee', 0)) data['claim_id'] = result.get('claim_id') data['txid'] = result.get('txid') data['nout'] = int(result.get('nout', 0)) if len(data['txid']) != 64: return return_result(20201, result=result) data['status'] = 1 data['tags'] = save_tag(data['tags']) content = Content(**data) db.session.add(content) data.pop('tags') history = ContentHistory(**data) db.session.add(history) db.session.commit() return return_result(result=dict(id=content.id, claim_id=content.claim_id))
def delete(): """Update published resources Args: status: 1:add, 2:update, 3:delete(DB: enabled=False; CHAIN:metadata['nsfw']=True) """ content = Content.query.filter_by(id=g.form.id.data, appkey=g.appkey, enabled=True).first() if not content: return return_result(20007) metadata = dict(title=content.title, author=content.author, tag=[tag.name for tag in content.tags], description=content.des, language=content.language or 'en', license=content.license, licenseUrl=content.license_url, nsfw=True, preview=content.preview, thumbnail=content.preview) try: server = get_jsonrpc_server() result = server.update_claim( get_wallet_name(content.author), g.form.pay_password.data, content.claim_name, content.claim_id, content.txid, content.nout, metadata, content.content_type, content.udfs_hash, content.currency, content.price, content.bid, None, None) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20208) result = result.get('result') content.txid = result.get('txid') content.nout = int(result.get('nout', 0)) content.fee = float(result.get('fee', 0)) content.status = 3 content.enabled = False data = contenthistory_schema.dump(content).data data['appkey'] = g.appkey history = ContentHistory(**data) db.session.add(history) db.session.commit() return return_result(result=dict(num=1))
def consume(): appkey = g.appkey customer = g.form.customer.data wallet_username = get_wallet_name(customer) claim_id = g.form.claim_id.data # Normal resource consumption customer_pay_password = g.form.customer_pay_password.data # Ad click author_pay_password = g.form.author_pay_password.data content = g.form.content price = content.price if content.author != customer and content.price != 0: # Non-free resources cs = Consume.query.filter_by(claim_id=claim_id, customer=customer, appkey=appkey).first() if not cs: try: server = get_jsonrpc_server() if price >= 0: # Normal result = server.consume(wallet_username, customer_pay_password, claim_id) else: # Ad send_wallet_username = get_wallet_name(content.author) abs_price = abs(float(price)) # decimal to float result = server.pay(send_wallet_username, author_pay_password, wallet_username, abs_price) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20202) # app.logger.debug(result) result = result.get('result') txid = result.get('txid') if len(txid) != 64: return return_result(20202, result=result) c = Consume(txid=txid, claim_id=claim_id, customer=customer, appkey=appkey, price=price) db.session.add(c) db.session.commit() return return_result(result=dict(udfs_hash=content.udfs_hash))
def change_password(): user = g.user old_password_hash = user.password_hash password = g.form.password.data if not user.check_password(password): return return_result(20004) new = g.form.new_password.data new_password_hash = generate_password_hash(new) try: server = get_jsonrpc_server() result = server.password(user.username, old_password_hash, new_password_hash) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20207) user.password = new_password_hash # update password, auto commit db.session.commit() return return_result()
def reg(): """User register""" form = g.form # The user login password is also the wallet's payment password. password = form.password.data pay_password = generate_password_hash(password) form.password.data = pay_password try: server = get_jsonrpc_server() result = server.create(form.username.data, pay_password) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20205) role = Role.query.filter_by(name='normal').first() user = User(**form.data) user.role_id = role.id db.session.add(user) db.session.commit() token = user.generate_auth_token(expiration=app.config['EXPIRATION']) return return_result(result=dict(id=user.id, token=token))
def update(): """Update published resources Args: status: 1:add, 2:update, 3:delete(enabled=False) """ data = copy.deepcopy(g.form.data) _id = data.pop('id') pay_password = data.pop('pay_password') content = Content.query.filter_by(id=_id, appkey=g.appkey, enabled=True).first() if not content: return return_result(20007) content.currency = app.config['PUBLISH_CURRENCY'] content.bid = app.config['PUBLISH_BID'] for k, v in data.items(): if k in ['id', 'pay_password']: continue if v: if k == 'tags': v = save_tag(v) setattr(content, k, v) metadata = dict(title=content.title, author=content.author, tag=[tag.name for tag in content.tags], description=content.des, language=content.language or 'en', license=content.license, licenseUrl=content.license_url, nsfw=False, preview=content.preview, thumbnail=content.thumbnail) try: server = get_jsonrpc_server() result = server.update_claim( get_wallet_name(content.author), pay_password, content.claim_name, content.claim_id, content.txid, content.nout, metadata, content.content_type, content.udfs_hash, content.currency, content.price, content.bid, None, None) if result.get('errcode') != 0: return result except: app.logger.error(formatter_error(traceback.format_exc())) return return_result(20208) result = result.get('result') content.txid = result.get('txid') content.nout = int(result.get('nout', 0)) content.fee = float(result.get('fee', 0)) content.status = 2 if len(content.txid) != 64: return return_result(20208, result=result) data = contenthistory_schema.dump(content).data data['appkey'] = g.appkey history = ContentHistory(**data) db.session.add(history) db.session.commit() return return_result(result=dict(id=content.id, claim_id=content.claim_id))