Skip to content

Commit 380d51c

Browse files
fixing some import statements
1 parent 18e3f34 commit 380d51c

File tree

3 files changed

+65
-2
lines changed

3 files changed

+65
-2
lines changed

apps/fhir/bluebutton/permissions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.contrib.auth import get_user_model
55
from rest_framework import permissions, exceptions
66
from rest_framework.exceptions import AuthenticationFailed
7-
from .constants import ALLOWED_RESOURCE_TYPES
7+
from apps.fhir.bluebutton.constants import ALLOWED_RESOURCE_TYPES
88
from apps.versions import Versions, VersionNotMatched
99

1010
import apps.logging.request_logger as bb2logging
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from apps.fhir.bluebutton.views.generic import FhirDataView
2+
from apps.fhir.bluebutton.permissions import (SearchCrosswalkPermission,
3+
ResourcePermission,
4+
ApplicationActivePermission)
5+
from apps.authorization.permissions import DataAccessGrantPermission
6+
from apps.capabilities.permissions import TokenHasProtectedCapability
7+
8+
from rest_framework import permissions
9+
10+
11+
class HasDigitalInsuranceCardScope(permissions.BasePermission):
12+
def has_permission(self, request, view):
13+
required_scopes = getattr(view, 'required_scopes', None)
14+
if required_scopes is None:
15+
return True
16+
17+
if hasattr(request, 'auth') and request.auth is not None:
18+
token_scopes = request.auth.scope
19+
return any(scope in token_scopes for scope in required_scopes)
20+
return False
21+
22+
23+
class DigitalInsuranceCardReadView(FhirDataView):
24+
'''Digital Insurance Card view for handling BFD Endpoint'''
25+
26+
permission_classes = [
27+
permissions.IsAuthenticated,
28+
ApplicationActivePermission,
29+
ResourcePermission,
30+
SearchCrosswalkPermission,
31+
DataAccessGrantPermission,
32+
TokenHasProtectedCapability,
33+
HasDigitalInsuranceCardScope,
34+
]
35+
36+
def __init__(self, version=1):
37+
super().__init__(version)
38+
self.resource_type = 'Bundle'
39+
40+
def has_permission(self, request, view):
41+
required_scopes = getattr(view, 'required_scopes', None)
42+
if required_scopes is None:
43+
return False
44+
return request.user.is_authenticated and hasattr(request.user, 'crosswalk')
45+
46+
def build_parameters(self, request):
47+
patient_id = request.query_params.get('patient', None)
48+
if not patient_id:
49+
patient_id = request.user.crosswalk.fhir_id
50+
return {
51+
"_format": "json"
52+
}
53+
54+
def build_url(self, resource_router, resource_type, resource_id, **kwargs):
55+
if resource_router.fhir_url.endswith('v1/fhir/'):
56+
# only if called by tests
57+
return "{}{}/{}/".format(resource_router.fhir_url, resource_type, resource_id)
58+
else:
59+
if self.version == 3 and resource_router.fhir_url_v3:
60+
fhir_url = resource_router.fhir_url_v3
61+
else:
62+
fhir_url = resource_router.fhir_url
63+
return f"{fhir_url}/v{self.version}/fhir/{resource_type}/{resource_id}/"

apps/fhir/bluebutton/views/read.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from apps.authorization.permissions import DataAccessGrantPermission
44
from apps.capabilities.permissions import TokenHasProtectedCapability
5-
from ..permissions import (ReadCrosswalkPermission, ResourcePermission, ApplicationActivePermission)
5+
from apps.fhir.bluebutton.permissions import (ReadCrosswalkPermission, ResourcePermission, ApplicationActivePermission)
66
from apps.fhir.bluebutton.views.generic import FhirDataView
77

88

0 commit comments

Comments
 (0)