mirror of
https://github.com/minetest/contentdb.git
synced 2024-12-22 22:12:24 +01:00
Fix password issues caused by Flask-User migration
This commit is contained in:
parent
0bda16de6d
commit
e115b0678c
@ -65,7 +65,7 @@ def github_authorized(oauth_token):
|
|||||||
flash("Unable to find an account for that Github user", "error")
|
flash("Unable to find an account for that Github user", "error")
|
||||||
return redirect(url_for("users.claim"))
|
return redirect(url_for("users.claim"))
|
||||||
elif loginUser(userByGithub):
|
elif loginUser(userByGithub):
|
||||||
if current_user.password is None:
|
if not current_user.hasPassword():
|
||||||
return redirect(next_url or url_for("users.set_password", optional=True))
|
return redirect(next_url or url_for("users.set_password", optional=True))
|
||||||
else:
|
else:
|
||||||
return redirect(next_url or url_for("homepage.home"))
|
return redirect(next_url or url_for("homepage.home"))
|
||||||
|
@ -170,7 +170,7 @@ class SetPasswordForm(FlaskForm):
|
|||||||
@bp.route("/user/set-password/", methods=["GET", "POST"])
|
@bp.route("/user/set-password/", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def set_password():
|
def set_password():
|
||||||
if current_user.password is not None:
|
if current_user.hasPassword():
|
||||||
return redirect(url_for("user.change_password"))
|
return redirect(url_for("user.change_password"))
|
||||||
|
|
||||||
form = SetPasswordForm(request.form)
|
form = SetPasswordForm(request.form)
|
||||||
@ -185,10 +185,11 @@ def set_password():
|
|||||||
hashed_password = user_manager.hash_password(form.password.data)
|
hashed_password = user_manager.hash_password(form.password.data)
|
||||||
|
|
||||||
# Change password
|
# Change password
|
||||||
user_manager.update_password(current_user, hashed_password)
|
current_user.password = hashed_password
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
# Send 'password_changed' email
|
# Send 'password_changed' email
|
||||||
if user_manager.enable_email and user_manager.send_password_changed_email and current_user.email:
|
if user_manager.USER_ENABLE_EMAIL and current_user.email:
|
||||||
emails.send_password_changed_email(current_user)
|
emails.send_password_changed_email(current_user)
|
||||||
|
|
||||||
# Send password_changed signal
|
# Send password_changed signal
|
||||||
@ -211,7 +212,7 @@ def set_password():
|
|||||||
task = sendVerifyEmail.delay(newEmail, token)
|
task = sendVerifyEmail.delay(newEmail, token)
|
||||||
return redirect(url_for("tasks.check", id=task.id, r=url_for("users.profile", username=current_user.username)))
|
return redirect(url_for("tasks.check", id=task.id, r=url_for("users.profile", username=current_user.username)))
|
||||||
else:
|
else:
|
||||||
return redirect(url_for("users.profile", username=current_user.username))
|
return redirect(url_for("user.login"))
|
||||||
else:
|
else:
|
||||||
flash("Passwords do not match", "error")
|
flash("Passwords do not match", "error")
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ class User(db.Model, UserMixin):
|
|||||||
tokens = db.relationship("APIToken", backref="owner", lazy="dynamic")
|
tokens = db.relationship("APIToken", backref="owner", lazy="dynamic")
|
||||||
replies = db.relationship("ThreadReply", backref="author", lazy="dynamic")
|
replies = db.relationship("ThreadReply", backref="author", lazy="dynamic")
|
||||||
|
|
||||||
def __init__(self, username, active=False, email=None, password=None):
|
def __init__(self, username, active=False, email=None, password=""):
|
||||||
self.username = username
|
self.username = username
|
||||||
self.email_confirmed_at = datetime.datetime.now() - datetime.timedelta(days=6000)
|
self.email_confirmed_at = datetime.datetime.now() - datetime.timedelta(days=6000)
|
||||||
self.display_name = username
|
self.display_name = username
|
||||||
@ -155,6 +155,9 @@ class User(db.Model, UserMixin):
|
|||||||
self.password = password
|
self.password = password
|
||||||
self.rank = UserRank.NOT_JOINED
|
self.rank = UserRank.NOT_JOINED
|
||||||
|
|
||||||
|
def hasPassword(self):
|
||||||
|
return self.password != ""
|
||||||
|
|
||||||
def canAccessTodoList(self):
|
def canAccessTodoList(self):
|
||||||
return Permission.APPROVE_NEW.check(self) or \
|
return Permission.APPROVE_NEW.check(self) or \
|
||||||
Permission.APPROVE_RELEASE.check(self) or \
|
Permission.APPROVE_RELEASE.check(self) or \
|
||||||
@ -203,6 +206,13 @@ class User(db.Model, UserMixin):
|
|||||||
return Thread.query.filter_by(author=self) \
|
return Thread.query.filter_by(author=self) \
|
||||||
.filter(Thread.created_at > hour_ago).count() < 2
|
.filter(Thread.created_at > hour_ago).count() < 2
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
if not self.is_authenticated or not other.is_authenticated:
|
||||||
|
return False
|
||||||
|
|
||||||
|
assert self.id > 0
|
||||||
|
return self.id == other.id
|
||||||
|
|
||||||
class UserEmailVerification(db.Model):
|
class UserEmailVerification(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
|
user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
|
||||||
|
@ -15,7 +15,7 @@ Sign in
|
|||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
|
|
||||||
{# Username or Email field #}
|
{# Username or Email field #}
|
||||||
{% set field = form.username if user_manager.USER_ENABLE_REGISTER else form.email %}
|
{% set field = form.username if user_manager.USER_ENABLE_USERNAME else form.email %}
|
||||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||||
{# Label on left, "New here? Register." on right #}
|
{# Label on left, "New here? Register." on right #}
|
||||||
<label for="{{ field.id }}" class="control-label">{{ field.label.text }}</label>
|
<label for="{{ field.id }}" class="control-label">{{ field.label.text }}</label>
|
||||||
|
31
migrations/versions/a0f6c8743362_.py
Normal file
31
migrations/versions/a0f6c8743362_.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
"""empty message
|
||||||
|
|
||||||
|
Revision ID: a0f6c8743362
|
||||||
|
Revises: 64fee8e5ab34
|
||||||
|
Create Date: 2020-01-19 19:12:39.402679
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'a0f6c8743362'
|
||||||
|
down_revision = '64fee8e5ab34'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.alter_column('user', 'password',
|
||||||
|
existing_type=sa.VARCHAR(length=255),
|
||||||
|
nullable=False,
|
||||||
|
existing_server_default=sa.text("''::character varying"),
|
||||||
|
server_default='')
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.alter_column('user', 'password',
|
||||||
|
existing_type=sa.VARCHAR(length=255),
|
||||||
|
nullable=True,
|
||||||
|
existing_server_default=sa.text("''::character varying"))
|
@ -2,4 +2,5 @@
|
|||||||
|
|
||||||
# Run all pending migrations
|
# Run all pending migrations
|
||||||
|
|
||||||
|
./utils/reload.sh
|
||||||
docker exec contentdb_app_1 sh -c "FLASK_CONFIG=../config.cfg FLASK_APP=app/__init__.py flask db upgrade"
|
docker exec contentdb_app_1 sh -c "FLASK_CONFIG=../config.cfg FLASK_APP=app/__init__.py flask db upgrade"
|
||||||
|
Loading…
Reference in New Issue
Block a user