|
18 | 18 | from tracker.view.login import LOGIN_ERROR_MISSING_EMAIL_FROM_TOKEN |
19 | 19 | from tracker.view.login import LOGIN_ERROR_MISSING_GROUPS_FROM_TOKEN |
20 | 20 | from tracker.view.login import LOGIN_ERROR_MISSING_USER_SUB_FROM_TOKEN |
| 21 | +from tracker.view.login import LOGIN_ERROR_MISSING_USERINFO_FROM_TOKEN |
21 | 22 | from tracker.view.login import LOGIN_ERROR_MISSING_USERNAME_FROM_TOKEN |
22 | 23 | from tracker.view.login import LOGIN_ERROR_PERMISSION_DENIED |
23 | 24 | from tracker.view.login import \ |
|
34 | 35 |
|
35 | 36 | class MockedIdp(object): |
36 | 37 | def __init__(self, username=TESTINGNAME, email=DEFAULTEMAIL, sub=TESTINGSUB, groups=["Administrator"], |
37 | | - verified=True, throws=None): |
| 38 | + verified=True, throws=None, has_userinfo=True): |
38 | 39 | self.email = email |
39 | 40 | self.sub = sub |
40 | 41 | self.groups = groups |
41 | 42 | self.verified = verified |
42 | 43 | self.username = username |
43 | 44 | self.throws = throws |
| 45 | + self.has_userinfo = has_userinfo |
44 | 46 |
|
45 | 47 | def authorize_access_token(self): |
46 | 48 | if self.throws: |
47 | 49 | raise self.throws |
48 | | - return "Schinken" |
| 50 | + if self.has_userinfo: |
| 51 | + return {'userinfo': self.parse_id_token(None, None)} |
| 52 | + return {} |
49 | 53 |
|
50 | | - def parse_id_token(self, token): |
| 54 | + def parse_id_token(self, token, nonce, claims_options=None, leeway=120): |
51 | 55 | token = {} |
52 | 56 | if self.sub is not None: |
53 | 57 | token["sub"] = self.sub |
@@ -147,6 +151,15 @@ def test_permission_denied_lack_of_group(app, db): |
147 | 151 | assert not current_user.is_authenticated |
148 | 152 | assert not User.query.all() |
149 | 153 |
|
| 154 | +@patch('tracker.oauth.idp', MockedIdp(has_userinfo=False), create=True) |
| 155 | +def test_missing_userinfo_from_token(app, db): |
| 156 | + with app.test_request_context('/login'): |
| 157 | + result = sso_auth() |
| 158 | + assert BadRequest.code == result.status_code |
| 159 | + assert LOGIN_ERROR_MISSING_USERINFO_FROM_TOKEN in result.data.decode() |
| 160 | + |
| 161 | + assert not current_user.is_authenticated |
| 162 | + assert not User.query.all() |
150 | 163 |
|
151 | 164 | @patch('tracker.oauth.idp', MockedIdp(sub=None), create=True) |
152 | 165 | def test_missing_sub_from_token(app, db): |
|
0 commit comments