mirror of
https://github.com/zoffline/zwift-offline.git
synced 2025-12-05 20:40:03 -08:00
Use token to remember login
This commit is contained in:
@@ -22,16 +22,14 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12 top-buffer">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="rememberlogin" name="rememberlogin">
|
||||
<label class="form-check-label text-shadow" for="rememberlogin">
|
||||
Remember login
|
||||
</label>
|
||||
<input class="form-check-input" type="checkbox" id="remember" name="remember">
|
||||
<label class="form-check-label text-shadow" for="remember">Remember me</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 top-buffer">
|
||||
<input type="submit" value="Login" class="btn btn-sm btn-light" onclick="rememberLogin()">
|
||||
<input type="submit" value="Login" class="btn btn-sm btn-light">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -49,52 +47,3 @@
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block scripts %}
|
||||
<script>
|
||||
function getCookie(cname) {
|
||||
var name = cname + "=";
|
||||
var decodedCookie = decodeURIComponent(document.cookie);
|
||||
var ca = decodedCookie.split(';');
|
||||
for(var i = 0; i < ca.length; i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function setCookie(cname, cvalue, exdays) {
|
||||
var d = new Date();
|
||||
d.setTime(d.getTime() + (exdays*24*60*60*1000));
|
||||
var expires = "expires=" + d.toUTCString();
|
||||
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
|
||||
}
|
||||
|
||||
var checkbox = document.getElementById('rememberlogin');
|
||||
var username = document.getElementById('username');
|
||||
var password = document.getElementById('password');
|
||||
function rememberLogin() {
|
||||
if(checkbox.checked && username.value !== '' && password.value !== '') {
|
||||
setCookie('username', username.value, 365);
|
||||
setCookie('password', password.value, 365);
|
||||
}
|
||||
else if(!checkbox.checked) {
|
||||
setCookie('username', '', 0);
|
||||
setCookie('password', '', 0);
|
||||
}
|
||||
}
|
||||
|
||||
var usernameVal = getCookie('username');
|
||||
var passwordVal = getCookie('password');
|
||||
if(usernameVal !== undefined && usernameVal !== null && usernameVal !== '' &&
|
||||
passwordVal !== undefined && passwordVal !== null && passwordVal !== '') {
|
||||
checkbox.checked = true;
|
||||
username.value = usernameVal;
|
||||
password.value = passwordVal;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -23,7 +23,7 @@ from logging.handlers import RotatingFileHandler
|
||||
|
||||
import jwt
|
||||
from flask import Flask, request, jsonify, redirect, render_template, url_for, flash, session, abort, make_response, send_file, send_from_directory
|
||||
from flask_login import UserMixin, AnonymousUserMixin, LoginManager, login_user, current_user, login_required
|
||||
from flask_login import UserMixin, AnonymousUserMixin, LoginManager, login_user, current_user, login_required, logout_user
|
||||
from gevent.pywsgi import WSGIServer
|
||||
from google.protobuf.descriptor import FieldDescriptor
|
||||
from protobuf_to_dict import protobuf_to_dict, TYPE_CALLABLE_MAP
|
||||
@@ -359,6 +359,7 @@ def login():
|
||||
if request.method == "POST":
|
||||
username = request.form['username']
|
||||
password = request.form['password']
|
||||
remember = bool(request.form.get('remember'))
|
||||
|
||||
if not (username and password):
|
||||
flash("Username and password cannot be empty.")
|
||||
@@ -367,14 +368,17 @@ def login():
|
||||
user = User.query.filter_by(username=username).first()
|
||||
|
||||
if user and check_password_hash(user.pass_hash, password):
|
||||
login_user(user, remember=True)
|
||||
login_user(user, remember=remember)
|
||||
return redirect(url_for("user_home", username=username, enable_ghosts=bool(user.enable_ghosts), online=get_online()))
|
||||
else:
|
||||
flash("Invalid username or password.")
|
||||
|
||||
if current_user.is_authenticated:
|
||||
return redirect(url_for("user_home", username=current_user.username, enable_ghosts=bool(current_user.enable_ghosts), online=get_online()))
|
||||
|
||||
user = User.verify_token(request.args.get('token'))
|
||||
if user:
|
||||
login_user(user, remember=True)
|
||||
login_user(user, remember=False)
|
||||
return redirect(url_for("reset", username=user.username))
|
||||
|
||||
return render_template("login_form.html")
|
||||
@@ -575,7 +579,9 @@ def download():
|
||||
|
||||
|
||||
@app.route("/logout/<username>")
|
||||
@login_required
|
||||
def logout(username):
|
||||
logout_user()
|
||||
flash("Successfully logged out.")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
@@ -1556,7 +1562,7 @@ def launch_zwift():
|
||||
# Zwift client has switched to calling https://launcher.zwift.com/launcher/ride
|
||||
if request.path != "/ride" and not os.path.exists(AUTOLAUNCH_FILE):
|
||||
if MULTIPLAYER:
|
||||
return render_template("login_form.html")
|
||||
return redirect(url_for('login'))
|
||||
else:
|
||||
return render_template("user_home.html", username="", enable_ghosts=os.path.exists(ENABLEGHOSTS_FILE), online=get_online(),
|
||||
is_admin=False, restarting=restarting, restarting_in_minutes=restarting_in_minutes)
|
||||
|
||||
Reference in New Issue
Block a user