69 lines
3.1 KiB
Python
69 lines
3.1 KiB
Python
from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash
|
|
from app.models.user import User
|
|
from app.models.invite_key import InviteKey
|
|
from app.util import auth, transactions
|
|
from app.services import invitekeys, economy
|
|
from app.extensions import db, limiter, csrf
|
|
from datetime import datetime, timedelta
|
|
|
|
inviteKeyRoute = Blueprint("invitekey", __name__, url_prefix="/")
|
|
|
|
@inviteKeyRoute.route("/invite-keys", methods=["GET"])
|
|
@auth.authenticated_required
|
|
def inviteKeysPage():
|
|
AuthenticatedUser : User = auth.GetCurrentUser()
|
|
pageNumber = request.args.get("page", 1, int)
|
|
if pageNumber < 1:
|
|
pageNumber = 1
|
|
createdKeys = InviteKey.query.filter_by(created_by=AuthenticatedUser.id).order_by(InviteKey.created_at.desc()).paginate( page = pageNumber, per_page = 10, error_out=False )
|
|
|
|
return render_template("invitekeys/index.html", createdKeys=createdKeys)
|
|
|
|
@inviteKeyRoute.route("/invite-keys/create", methods=["POST"])
|
|
@auth.authenticated_required
|
|
@csrf.exempt
|
|
def createInviteKey():
|
|
AuthenticatedUser : User = auth.GetCurrentUser()
|
|
if AuthenticatedUser is None:
|
|
return jsonify({"success": False, "message": "Unauthorized"}),401
|
|
|
|
robuxBalance, _ = economy.GetUserBalance(AuthenticatedUser)
|
|
if robuxBalance < 20:
|
|
flash("You do not have enough robux to create an invite key.", "error")
|
|
return redirect("/invite-keys")
|
|
|
|
activeKeys = InviteKey.query.filter_by(created_by=AuthenticatedUser.id, used_by=None).count()
|
|
if activeKeys >= 3 and AuthenticatedUser.id != 1:
|
|
flash("You have reached the maximum amount of active invite keys, please wait until one of your invite keys are used.", "error")
|
|
return redirect("/invite-keys")
|
|
|
|
keysCreatedPast24Hours = InviteKey.query.filter(InviteKey.created_at > datetime.utcnow() - timedelta(hours=24)).filter_by(created_by=AuthenticatedUser.id).count()
|
|
if keysCreatedPast24Hours >= 3 and AuthenticatedUser.id != 1:
|
|
flash("You have reached the maximum amount of invite keys you can create in 24 hours.", "error")
|
|
return redirect("/invite-keys")
|
|
|
|
if AuthenticatedUser.created > datetime.utcnow() - timedelta(days=3):
|
|
flash("Your account must be more than 3 days old to create a invite key.", "error")
|
|
return redirect("/invite-keys")
|
|
|
|
try:
|
|
economy.DecrementTargetBalance(AuthenticatedUser, 20, 0)
|
|
except economy.InsufficientFundsException:
|
|
flash("You do not have enough robux to create an invite key.", "error")
|
|
return redirect("/invite-keys")
|
|
except economy.EconomyLockAcquireException:
|
|
flash("There was an error creating your invite key, please try again later.", "error")
|
|
return redirect("/invite-keys")
|
|
|
|
newInviteKey : InviteKey = invitekeys.CreateInviteKey(AuthenticatedUser)
|
|
transactions.CreateTransaction(
|
|
Reciever = User.query.filter_by(id=1).first(),
|
|
Sender = AuthenticatedUser,
|
|
CurrencyAmount = 20,
|
|
CurrencyType = 0,
|
|
CustomText = "Created Invite Key"
|
|
)
|
|
|
|
flash("Invite key created successfully.", "success")
|
|
return redirect("/invite-keys")
|