* Implement Titan Tokens clientside

* Titan Tokens can be modified in the admin panel
This commit is contained in:
Jeremy "EndenDragon" Zhang
2017-08-13 18:10:03 -07:00
committed by GitHub
parent d363b66799
commit 8bc95f7b0e
16 changed files with 618 additions and 10 deletions

View File

@ -1,6 +1,6 @@
from flask import Blueprint, url_for, redirect, session, render_template, abort, request, jsonify
from functools import wraps
from titanembeds.database import db, get_administrators_list, Cosmetics, Guilds, UnauthenticatedUsers, UnauthenticatedBans
from titanembeds.database import db, get_administrators_list, Cosmetics, Guilds, UnauthenticatedUsers, UnauthenticatedBans, TitanTokens, TokenTransactions, get_titan_token, set_titan_token
from titanembeds.oauth import generate_guild_icon_url
import datetime
@ -172,3 +172,52 @@ def update_administrate_guild(guild_id):
def guilds():
guilds = db.session.query(Guilds).all()
return render_template("admin_guilds.html.j2", servers=guilds, icon_generate=generate_guild_icon_url)
@admin.route("/tokens", methods=["GET"])
@is_admin
def manage_titan_tokens():
tokeners = db.session.query(TitanTokens).all()
donators = []
for usr in tokeners:
row = {
"user_id": usr.user_id,
"tokens": usr.tokens,
"transactions": []
}
transact = db.session.query(TokenTransactions).filter(TokenTransactions.user_id == usr.user_id).all()
for tr in transact:
row["transactions"].append({
"id": tr.id,
"user_id": tr.user_id,
"timestamp": tr.timestamp,
"action": tr.action,
"net_tokens": tr.net_tokens,
"start_tokens": tr.start_tokens,
"end_tokens": tr.end_tokens
})
donators.append(row)
return render_template("admin_token_transactions.html.j2", donators=donators)
@admin.route("/tokens", methods=["POST"])
@is_admin
def post_titan_tokens():
user_id = request.form.get("user_id", None)
amount = request.form.get("amount", None, type=int)
if not user_id or not amount:
abort(400)
if get_titan_token(user_id) != -1:
abort(409)
set_titan_token(user_id, amount, "NEW VIA ADMIN")
return ('', 204)
@admin.route("/tokens", methods=["PATCH"])
@is_admin
def patch_titan_tokens():
user_id = request.form.get("user_id", None)
amount = request.form.get("amount", None, type=int)
if not user_id or not amount:
abort(400)
if get_titan_token(user_id) == -1:
abort(409)
set_titan_token(user_id, amount, "MODIFY VIA ADMIN")
return ('', 204)

View File

@ -1,10 +1,12 @@
from flask import Blueprint, request, redirect, jsonify, abort, session, url_for, render_template
from flask import current_app as app
from config import config
from titanembeds.decorators import discord_users_only
from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans, Cosmetics, UserCSS
from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans, Cosmetics, UserCSS, set_titan_token, get_titan_token
from titanembeds.oauth import authorize_url, token_url, make_authenticated_session, get_current_authenticated_user, get_user_managed_servers, check_user_can_administrate_guild, check_user_permission, generate_avatar_url, generate_guild_icon_url, generate_bot_invite_url
import time
import datetime
import paypalrestsdk
user = Blueprint("user", __name__)
@ -70,7 +72,10 @@ def dashboard():
css_list = None
if cosmetics and cosmetics.css:
css_list = db.session.query(UserCSS).filter(UserCSS.user_id == session['user_id']).all()
return render_template("dashboard.html.j2", servers=guilds, icon_generate=generate_guild_icon_url, cosmetics=cosmetics, css_list=css_list)
tokens = get_titan_token(session["user_id"])
if tokens == -1:
tokens = 0
return render_template("dashboard.html.j2", servers=guilds, icon_generate=generate_guild_icon_url, cosmetics=cosmetics, css_list=css_list, tokens=tokens)
@user.route("/custom_css/new", methods=["GET"])
@discord_users_only()
@ -322,3 +327,69 @@ def revoke_unauthenticated_user():
abort(409)
db_user.revokeUser()
return ('', 204)
@user.route('/donate', methods=["GET"])
@discord_users_only()
def donate_get():
return render_template('donate.html.j2')
def get_paypal_api():
return paypalrestsdk.Api({
'mode': 'sandbox' if app.config["DEBUG"] else 'live',
'client_id': config["paypal-client-id"],
'client_secret': config["paypal-client-secret"]})
@user.route('/donate', methods=['POST'])
@discord_users_only()
def donate_post():
donation_amount = request.form.get('amount')
if not donation_amount:
abort(402)
donation_amount = "{0:.2f}".format(float(donation_amount))
payer = {"payment_method": "paypal"}
items = [{"name": "TitanEmbeds Donation",
"price": donation_amount,
"currency": "USD",
"quantity": "1"}]
amount = {"total": donation_amount,
"currency": "USD"}
description = "Donate and support TitanEmbeds development."
redirect_urls = {"return_url": url_for('user.donate_confirm', success="true", _external=True),
"cancel_url": url_for('index', _external=True)}
payment = paypalrestsdk.Payment({"intent": "sale",
"payer": payer,
"redirect_urls": redirect_urls,
"transactions": [{"item_list": {"items":
items},
"amount": amount,
"description":
description}]}, api=get_paypal_api())
if payment.create():
for link in payment.links:
if link['method'] == "REDIRECT":
return redirect(link["href"])
return redirect(url_for('index'))
@user.route("/donate/confirm")
@discord_users_only()
def donate_confirm():
if not request.args.get('success'):
return redirect(url_for('index'))
payment = paypalrestsdk.Payment.find(request.args.get('paymentId'), api=get_paypal_api())
if payment.execute({"payer_id": request.args.get('PayerID')}):
trans_id = str(payment.transactions[0]["related_resources"][0]["sale"]["id"])
amount = float(payment.transactions[0]["amount"]["total"])
tokens = int(amount * 100)
action = "PAYPAL {}".format(trans_id)
set_titan_token(session["user_id"], tokens, action)
return redirect(url_for('user.donate_thanks', transaction=trans_id))
else:
return redirect(url_for('index'))
@user.route("/donate/thanks")
@discord_users_only()
def donate_thanks():
tokens = get_titan_token(session["user_id"])
transaction = request.args.get("transaction")
return render_template("donate_thanks.html.j2", tokens=tokens, transaction=transaction)