-
Notifications
You must be signed in to change notification settings - Fork 48
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1184 from uc-cdis/feat/only_login_onboarded_users
Feat: only allow login of onboarded users
- Loading branch information
Showing
4 changed files
with
60 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -500,6 +500,16 @@ DEFAULT_BACKOFF_SETTINGS_MAX_TRIES: 3 | |
# here. Something like: [email protected] | ||
SUPPORT_EMAIL_FOR_ERRORS: null | ||
|
||
# ////////////////////////////////////////////////////////////////////////////////////// | ||
# USER ACTIVATION | ||
# ////////////////////////////////////////////////////////////////////////////////////// | ||
# If you want new users (read: users that login for the first time) to automatically be | ||
# allowed through and added to the Fence DB, set this to true. Otherwise, set this to false. | ||
# Setting it to false will ensure the user will only be able to login after the user | ||
# is added to the Fence DB via a separate process. This two-step process allows for | ||
# a separate onboarding and user "approval" process, instead of the default automatic approval. | ||
ALLOW_NEW_USER_ON_LOGIN: true | ||
|
||
# ////////////////////////////////////////////////////////////////////////////////////// | ||
# SHIBBOLETH | ||
# - Support using `shibboleth` in LOGIN_OPTIONS | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,11 @@ | ||
import flask | ||
import pytest | ||
from fence.auth import login_user, logout | ||
from fence.models import User, IdentityProvider | ||
import time | ||
from datetime import datetime | ||
from fence.config import config | ||
from fence.errors import Unauthorized | ||
|
||
|
||
def test_login_user_already_in_db(db_session): | ||
|
@@ -33,6 +36,24 @@ def test_login_user_already_in_db(db_session): | |
assert flask.g.user == test_user | ||
|
||
|
||
def test_login_failure_for_user_already_in_db_but_inactive(db_session): | ||
""" | ||
Test that if a user is already in the database, but is set to user.active == False, | ||
and logs in, the login returns an Unauthorized error. | ||
""" | ||
email = "[email protected]" | ||
provider = "Test Provider" | ||
id_from_idp = "Provider_ID_0001" | ||
|
||
test_user = User(username=email, is_admin=False, active=False) | ||
db_session.add(test_user) | ||
db_session.commit() | ||
with pytest.raises( | ||
Unauthorized, match="User is known but not authorized/activated in the system" | ||
): | ||
login_user(email, provider, email=email, id_from_idp=id_from_idp) | ||
|
||
|
||
def test_login_user_with_idp_already_in_db(db_session): | ||
""" | ||
Test that if a user is already in the database, has identity_provider | ||
|
@@ -85,6 +106,22 @@ def test_login_new_user(db_session): | |
assert flask.g.user == test_user | ||
|
||
|
||
def test_login_new_user_not_allowed(db_session, monkeypatch): | ||
""" | ||
Test that when ALLOW_NEW_USER_ON_LOGIN config is False, | ||
and a user that is not in the database logs in, an | ||
Unauthorized error is returned. | ||
""" | ||
monkeypatch.setitem(config, "ALLOW_NEW_USER_ON_LOGIN", False) | ||
email = "[email protected]" | ||
provider = "Test Provider" | ||
id_from_idp = "Provider_ID_0001" | ||
with pytest.raises( | ||
Unauthorized, match="New user is not yet authorized/activated in the system" | ||
): | ||
login_user(email, provider, email=email, id_from_idp=id_from_idp) | ||
|
||
|
||
def test_last_auth_update_in_db(db_session): | ||
""" | ||
Test that the _last_auth field in the DB is updated when the user logs in. | ||
|