diff --git a/app.py b/app.py index cb64634..2a4dd85 100644 --- a/app.py +++ b/app.py @@ -185,6 +185,23 @@ def delete_account(): return redirect(url_for("user_accounts")) +@app.route("/validateAccount", methods=["POST"]) +def validate_account(): + base_url = app.config["BASE_URL"] + validate_url = f"{base_url}/validateAccount" + + # Forward the request to the backend API + credentials = base64.b64decode(session["auth_credentials"]).decode() + username, password = credentials.split(":", 1) + response = requests.post( + validate_url, + auth=requests.auth.HTTPBasicAuth(username, password), + json=request.get_json() + ) + + return jsonify(response.json()), response.status_code + + @app.route("/get_stream_names", methods=["GET"]) def stream_names(): if not session.get("logged_in"): diff --git a/templates/base.html b/templates/base.html index e6de348..261de8f 100644 --- a/templates/base.html +++ b/templates/base.html @@ -49,7 +49,7 @@

Version: {{ version }}

- + {% block scripts %}{% endblock %} diff --git a/templates/user_accounts.html b/templates/user_accounts.html index da617b0..6e9fe76 100644 --- a/templates/user_accounts.html +++ b/templates/user_accounts.html @@ -48,6 +48,10 @@ {{ account.expiaryDate_rendered }} {{ account.password }} +
@@ -89,5 +93,51 @@ ] }); }); + + $('.btn-validate').on('click', function() { + var button = $(this); + var spinner = button.find('.spinner-border'); + var buttonText = button.find('.button-text'); + var username = button.data('username'); + var password = button.data('password'); + var stream = button.data('stream'); + + spinner.show(); + buttonText.hide(); + button.prop('disabled', true); + + $.ajax({ + url: '/validateAccount', + type: 'POST', + contentType: 'application/json', + data: JSON.stringify({ + username: username, + password: password, + stream: stream + }), + success: function(response) { + spinner.hide(); + buttonText.show(); + button.prop('disabled', false); + button.removeClass('btn-info').addClass('btn-success'); + buttonText.text('Valid'); + setTimeout(function() { + button.removeClass('btn-success').addClass('btn-info'); + buttonText.text('Validate'); + }, 3000); + }, + error: function(xhr, status, error) { + spinner.hide(); + buttonText.show(); + button.prop('disabled', false); + button.removeClass('btn-info').addClass('btn-danger'); + buttonText.text('Invalid'); + setTimeout(function() { + button.removeClass('btn-danger').addClass('btn-info'); + buttonText.text('Validate'); + }, 3000); + } + }); + }); {% endblock %}