|
4 | 4 | from django.conf import settings |
5 | 5 | from cryptography.hazmat.primitives.asymmetric import rsa |
6 | 6 | from cryptography.hazmat.primitives import serialization |
| 7 | +import tempfile |
| 8 | +import os |
7 | 9 |
|
8 | 10 | from ...auth import NHSLoginOIDCBackend |
9 | 11 | from ...tests.factories.user_factory import UserFactory |
| 12 | +from lung_cancer_screening.settings import pem_key_env |
10 | 13 |
|
11 | 14 | User = get_user_model() |
12 | 15 |
|
13 | 16 | @override_settings( |
14 | 17 | OIDC_RP_CLIENT_PRIVATE_KEY=None, # Will be set per test |
| 18 | + OIDC_RP_CLIENT_PRIVATE_KEY_FILE=None, |
15 | 19 | OIDC_OP_TOKEN_ENDPOINT='https://auth.example.com/token', |
16 | 20 | OIDC_RP_CLIENT_ID='test-client-id', |
17 | 21 | OIDC_RP_REDIRECT_URI='https://app.example.com/callback', |
@@ -224,3 +228,21 @@ def test_get_token_nhs_login_error_response_no_json(self, mock_post): |
224 | 228 | self.backend.get_token(token_payload) |
225 | 229 |
|
226 | 230 | self.assertIn('Token request failed: 500', str(context.exception)) |
| 231 | + |
| 232 | + def test_pem_key_file_env(self): |
| 233 | + os.environ['OIDC_RP_CLIENT_PRIVATE_KEY'] = '' |
| 234 | + temp_pem_key = self.test_private_key_pem |
| 235 | + # Create a temporary PEM key file |
| 236 | + with tempfile.NamedTemporaryFile(delete=False, suffix=".pem", mode='w') as temp_file: |
| 237 | + temp_file.write(temp_pem_key) |
| 238 | + temp_file_path = temp_file.name |
| 239 | + |
| 240 | + try: |
| 241 | + os.environ['OIDC_RP_CLIENT_PRIVATE_KEY_FILE'] = temp_file_path |
| 242 | + result = pem_key_env("OIDC_RP_CLIENT_PRIVATE_KEY", "OIDC_RP_CLIENT_PRIVATE_KEY_FILE") |
| 243 | + self.assertEqual(result, temp_pem_key) |
| 244 | + |
| 245 | + finally: |
| 246 | + os.environ.pop('OIDC_RP_CLIENT_PRIVATE_KEY_FILE', None) |
| 247 | + os.environ['OIDC_RP_CLIENT_PRIVATE_KEY'] = 'MYSUPERSECRETPRIVATEKEY' |
| 248 | + os.remove(temp_file_path) |
0 commit comments