Skip to content

Commit b4cc574

Browse files
authored
Merge pull request #38 from ShipChain/feature/lambda-internal-request
Lambda Internal Request
2 parents 85ed27c + b50daf6 commit b4cc574

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "shipchain-common"
3-
version = "1.0.23"
3+
version = "1.0.24"
44
description = "A PyPI package containing shared code for ShipChain's Python/Django projects."
55

66
license = "Apache-2.0"

src/shipchain_common/authentication.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ class TransmissionRequest(InternalRequest):
6666
SERVICE_NAME = 'transmission'
6767

6868

69+
class LambdaRequest(InternalRequest):
70+
SERVICE_NAME = 'lambda'
71+
72+
6973
class PermissionedTokenUser(TokenUser):
7074
"""
7175
This Requires the JWT from Profiles to have been generated with the `permissions` scope

tests/test_auth.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
from rest_framework import exceptions
1515
from rest_framework_simplejwt.tokens import UntypedToken
1616

17-
from src.shipchain_common.authentication import EngineRequest, passive_credentials_auth, PermissionedTokenUser,\
18-
TransmissionRequest
17+
from src.shipchain_common.authentication import EngineRequest, passive_credentials_auth, PermissionedTokenUser, \
18+
TransmissionRequest, LambdaRequest
1919
from src.shipchain_common.test_utils import get_jwt
2020
from src.shipchain_common.utils import random_id
2121

@@ -43,6 +43,11 @@ def transmission_request():
4343
return TransmissionRequest()
4444

4545

46+
@pytest.fixture()
47+
def lambda_request():
48+
return LambdaRequest()
49+
50+
4651
def test_passive_jwt_auth(username):
4752
with pytest.raises(exceptions.AuthenticationFailed):
4853
passive_credentials_auth('')
@@ -118,6 +123,35 @@ def test_transmission_auth_requires_header(transmission_request):
118123
assert transmission_request.has_permission(request, {})
119124

120125

126+
def test_lambda_auth_requires_header(lambda_request):
127+
request = HttpRequest()
128+
129+
assert not lambda_request.has_permission(request, {})
130+
131+
request.META['X_NGINX_SOURCE'] = 'alb'
132+
assert not lambda_request.has_permission(request, {})
133+
134+
request.META['X_NGINX_SOURCE'] = 'internal'
135+
with pytest.raises(KeyError):
136+
lambda_request.has_permission(request, {})
137+
138+
request.META['X_SSL_CLIENT_VERIFY'] = 'NONE'
139+
assert not lambda_request.has_permission(request, {})
140+
141+
request.META['X_SSL_CLIENT_VERIFY'] = 'SUCCESS'
142+
with pytest.raises(KeyError):
143+
lambda_request.has_permission(request, {})
144+
145+
request.META['X_SSL_CLIENT_DN'] = '/CN=lambda.h4ck3d'
146+
assert not lambda_request.has_permission(request, {})
147+
148+
request.META['X_SSL_CLIENT_DN'] = '/CN=profiles.test-internal'
149+
assert not lambda_request.has_permission(request, {})
150+
151+
request.META['X_SSL_CLIENT_DN'] = '/CN=lambda.test-internal'
152+
assert lambda_request.has_permission(request, {})
153+
154+
121155
def test_token_user_jti_cache_key():
122156
"""By default, the jti is included in get_jwt and is used as cache key"""
123157
jwt = get_jwt()

0 commit comments

Comments
 (0)