Skip to content

Commit 1f13d36

Browse files
authored
Get ready for 3.4.4. Minor enhancement to CLI. (#365)
1 parent 53e31a9 commit 1f13d36

File tree

4 files changed

+35
-10
lines changed

4 files changed

+35
-10
lines changed

CHANGES.rst

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Release Target 2020
1717
Version 3.4.4
1818
--------------
1919

20-
Released July yy, 2020
20+
Released July 26, 2020
2121

2222
Bug/regression fixes.
2323

@@ -38,6 +38,8 @@ Fixed
3838
- (:issue:`347`) Fix peewee. Turns out - due to lack of unit tests - peewee hasn't worked since 'permissions' were added in 3.3.
3939
Furthermore, changes in 3.4 around get_id and alternative tokens also didn't work since peewee defines its own get_id.
4040

41+
- (:pr:`xx`) Backport the reset_access CLI command from 4.0 - this is really useful for administrators.
42+
4143
Compatibility Concerns
4244
++++++++++++++++++++++
4345

@@ -173,7 +175,8 @@ log out the current user, and log in the new user. This was problematic since
173175
this couldn't possibly work with CSRF.
174176
The old behavior has been restored, with the subtle change that older Flask-Security
175177
releases did not look at "next" in the form or request for the redirect,
176-
and now, all redirects from the login view will honor "next".
178+
and now, all redirects from the login view will honor "next" (N.B. see 3.4.4 - the
179+
handling of "next" has been removed due to redirect loops).
177180

178181
Version 3.3.1
179182
-------------

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
# built documents.
5959
#
6060
# The short X.Y version.
61-
version = "3.4.3"
61+
version = "3.4.4"
6262
# The full version, including alpha/beta/rc tags.
6363
release = version
6464

flask_security/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,4 @@
101101
verify_and_update_password,
102102
)
103103

104-
__version__ = "3.4.3"
104+
__version__ = "3.4.4"

flask_security/cli.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ def roles_create(**kwargs):
121121
@with_appcontext
122122
@commit
123123
def roles_add(user, role):
124-
"""Add user to role."""
124+
"""Add role to user."""
125125
user, role = _datastore._prepare_role_modify_args(user, role)
126126
if user is None:
127127
raise click.UsageError("Cannot find user.")
128128
if role is None:
129129
raise click.UsageError("Cannot find role.")
130130
if _datastore.add_role_to_user(user, role):
131131
click.secho(
132-
'Role "{0}" added to user "{1}" ' "successfully.".format(role, user),
132+
'Role "{0}" added to user "{1}" ' "successfully.".format(role.name, user),
133133
fg="green",
134134
)
135135
else:
@@ -142,15 +142,16 @@ def roles_add(user, role):
142142
@with_appcontext
143143
@commit
144144
def roles_remove(user, role):
145-
"""Remove user from role."""
145+
"""Remove role from user."""
146146
user, role = _datastore._prepare_role_modify_args(user, role)
147147
if user is None:
148148
raise click.UsageError("Cannot find user.")
149149
if role is None:
150150
raise click.UsageError("Cannot find role.")
151151
if _datastore.remove_role_from_user(user, role):
152152
click.secho(
153-
'Role "{0}" removed from user "{1}" ' "successfully.".format(role, user),
153+
'Role "{0}" removed from user "{1}" '
154+
"successfully.".format(role.name, user),
154155
fg="green",
155156
)
156157
else:
@@ -165,7 +166,7 @@ def users_activate(user):
165166
"""Activate a user."""
166167
user_obj = _datastore.get_user(user)
167168
if user_obj is None:
168-
raise click.UsageError("ERROR: User not found.")
169+
raise click.UsageError("User not found.")
169170
if _datastore.activate_user(user_obj):
170171
click.secho('User "{0}" has been activated.'.format(user), fg="green")
171172
else:
@@ -180,8 +181,29 @@ def users_deactivate(user):
180181
"""Deactivate a user."""
181182
user_obj = _datastore.get_user(user)
182183
if user_obj is None:
183-
raise click.UsageError("ERROR: User not found.")
184+
raise click.UsageError("User not found.")
184185
if _datastore.deactivate_user(user_obj):
185186
click.secho('User "{0}" has been deactivated.'.format(user), fg="green")
186187
else:
187188
click.secho('User "{0}" was already deactivated.'.format(user), fg="yellow")
189+
190+
191+
@users.command(
192+
"reset_access",
193+
help="Reset all authentication credentials for user."
194+
" This includes session, auth token, two-factor"
195+
" and unified sign in secrets. ",
196+
)
197+
@click.argument("user")
198+
@with_appcontext
199+
@commit
200+
def users_reset_access(user):
201+
""" Reset all authentication tokens etc."""
202+
user_obj = _datastore.get_user(user)
203+
if user_obj is None:
204+
raise click.UsageError("User not found.")
205+
_datastore.reset_user_access(user_obj)
206+
click.secho(
207+
'User "{user}" authentication credentials have been reset.'.format(user=user),
208+
fg="green",
209+
)

0 commit comments

Comments
 (0)