diff --git a/auth_jwt/tests/test_auth_jwt.py b/auth_jwt/tests/test_auth_jwt.py index f54527b646..5295f4aeb1 100644 --- a/auth_jwt/tests/test_auth_jwt.py +++ b/auth_jwt/tests/test_auth_jwt.py @@ -72,6 +72,7 @@ def _create_validator( issuer="http://the.issuer", secret_key="thesecret", partner_id_required=False, + static_user_id=1, ): return self.env["auth.jwt.validator"].create( dict( @@ -82,6 +83,7 @@ def _create_validator( audience=audience, issuer=issuer, user_id_strategy="static", + static_user_id=static_user_id, partner_id_strategy="email", partner_id_required=partner_id_required, ) @@ -258,13 +260,6 @@ def test_invalid_validation_auto_chain(self): "Validators mustn't make a closed chain: " "validator -> validator.", ) - def test_user_id_strategy(self): - validator = self._create_validator("validator5") - authorization = "Bearer " + self._create_token() - with self._mock_request(authorization=authorization) as request: - self.env["ir.http"]._auth_method_jwt_validator5() - self.assertEqual(request.env.uid, validator.static_user_id.id) - def test_partner_id_strategy_email_found(self): partner = self.env["res.partner"].search([("email", "!=", False)])[0] self._create_validator("validator6") @@ -396,14 +391,6 @@ def test_name_check(self): with self.assertRaises(ValidationError): self._create_validator(name="not an identifier") - def test_public_or_jwt_no_token(self): - with self._mock_request(authorization=None) as request: - self.env["ir.http"]._auth_method_public_or_jwt() - request.update_env.assert_called_once_with( - user=self.env.ref("base.public_user").id - ) - assert not hasattr(request, "jwt_payload") - def test_public_or_jwt_valid_token(self): self._create_validator("validator") authorization = "Bearer " + self._create_token() diff --git a/auth_jwt_demo/controllers/main.py b/auth_jwt_demo/controllers/main.py index b742ff310f..50bd028623 100644 --- a/auth_jwt_demo/controllers/main.py +++ b/auth_jwt_demo/controllers/main.py @@ -20,7 +20,7 @@ def whoami(self): data = {} if request.jwt_partner_id: partner = request.env["res.partner"].browse(request.jwt_partner_id) - data.update(name=partner.name, email=partner.email) + data.update(name=partner.name, email=partner.email, uid=request.env.uid) return Response(json.dumps(data), content_type="application/json", status=200) @route( @@ -62,8 +62,8 @@ def whoami_public_or_keycloak(self): data = {} if hasattr(request, "jwt_partner_id") and request.jwt_partner_id: partner = request.env["res.partner"].browse(request.jwt_partner_id) - data.update(name=partner.name, email=partner.email) + data.update(name=partner.name, email=partner.email, uid=request.env.uid) else: # public - data.update(name="Anonymous") + data.update(name="Anonymous", uid=request.env.uid) return Response(json.dumps(data), content_type="application/json", status=200) diff --git a/auth_jwt_demo/demo/auth_jwt_validator.xml b/auth_jwt_demo/demo/auth_jwt_validator.xml index e02c086cec..052fa3b188 100644 --- a/auth_jwt_demo/demo/auth_jwt_validator.xml +++ b/auth_jwt_demo/demo/auth_jwt_validator.xml @@ -7,7 +7,7 @@ HS256 thesecret static - 1 + email diff --git a/auth_jwt_demo/tests/test_auth_jwt_demo.py b/auth_jwt_demo/tests/test_auth_jwt_demo.py index 6474d01304..1d913add2f 100644 --- a/auth_jwt_demo/tests/test_auth_jwt_demo.py +++ b/auth_jwt_demo/tests/test_auth_jwt_demo.py @@ -38,6 +38,7 @@ def test_whoami(self): whoami = resp.json() self.assertEqual(whoami.get("name"), partner.name) self.assertEqual(whoami.get("email"), partner.email) + self.assertEqual(whoami.get("uid"), self.env.ref("base.user_demo").id) # Try again in a user session, it will be rejected because auth_jwt # is not designed to work in user session. self.authenticate("demo", "demo") @@ -49,3 +50,9 @@ def test_forbidden(self): token = self._get_token(aud="invalid") resp = self.url_open("/auth_jwt_demo/whoami", headers={"Authorization": token}) self.assertEqual(resp.status_code, 401) + + def test_public(self): + """A end-to-end test for anonymous/public access.""" + resp = self.url_open("/auth_jwt_demo/keycloak/whoami-public-or-jwt") + self.assertEqual(resp.status_code, 200) + self.assertEqual(resp.json()["uid"], self.ref("base.public_user"))