Skip to content

Commit 2b92055

Browse files
sylvinuslunika
authored andcommitted
✨(external_api) add Invitations to the external API
1 parent de4d995 commit 2b92055

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

src/backend/core/external_api/viewsets.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,18 @@
44

55
from lasuite.oidc_resource_server.authentication import ResourceServerAuthentication
66

7-
from ..api.permissions import AccessPermission, IsSelf, ItemAccessPermission
8-
from ..api.viewsets import ItemAccessViewSet, ItemViewSet, UserViewSet
7+
from ..api.permissions import (
8+
AccessPermission,
9+
CanCreateInvitationPermission,
10+
IsSelf,
11+
ItemAccessPermission,
12+
)
13+
from ..api.viewsets import (
14+
InvitationViewset,
15+
ItemAccessViewSet,
16+
ItemViewSet,
17+
UserViewSet,
18+
)
919
from .authentication import JWTAuthentication
1020
from .permissions import ResourceServerClientPermission
1121

@@ -34,6 +44,16 @@ class ResourceServerItemAccessViewSet(ItemAccessViewSet):
3444
permission_classes = [ResourceServerClientPermission & AccessPermission]
3545

3646

47+
class ResourceServerInvitationViewSet(InvitationViewset):
48+
"""Resource Server Viewset for the Drive app."""
49+
50+
authentication_classes = EXTERNAL_API_AUTH_CLASSES
51+
52+
permission_classes = [
53+
ResourceServerClientPermission & CanCreateInvitationPermission
54+
]
55+
56+
3757
class ResourceServerUserViewSet(UserViewSet):
3858
"""Resource Server UserViewset for the Drive app."""
3959

src/backend/core/tests/external_api/items/test_api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,9 @@ def test_api_items_accesses_retrieve_anonymous_public_standalone():
129129
item = factories.ItemFactory(link_reach="public")
130130

131131
response = APIClient().get(f"/external_api/v1.0/items/{item.id!s}/accesses/")
132+
assert response.status_code == 403
132133

134+
response = APIClient().get(f"/external_api/v1.0/items/{item.id!s}/invitations/")
133135
assert response.status_code == 403
134136

135137

@@ -157,7 +159,9 @@ def test_api_items_accesses_retrieve_connected_resource_server(
157159
item = factories.ItemFactory(link_reach="public")
158160

159161
response = client.get(f"/external_api/v1.0/items/{item.id!s}/accesses/")
162+
assert response.status_code == 200
160163

164+
response = client.get(f"/external_api/v1.0/items/{item.id!s}/invitations/")
161165
assert response.status_code == 200
162166

163167

src/backend/core/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
external_api_viewsets.ResourceServerItemAccessViewSet,
5555
basename="resource_server_item_accesses",
5656
)
57+
external_api_item_related_router.register(
58+
"invitations",
59+
external_api_viewsets.ResourceServerInvitationViewSet,
60+
basename="resource_server_invitations",
61+
)
5762

5863
urlpatterns = [
5964
path(

src/backend/drive/settings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,9 @@ class Base(Configuration):
402402
EMAIL_FROM = values.Value("[email protected]")
403403

404404
AUTH_USER_MODEL = "core.User"
405-
INVITATION_VALIDITY_DURATION = values.PositiveIntegerValue(604800) # 7 days, in seconds
405+
INVITATION_VALIDITY_DURATION = values.PositiveIntegerValue(
406+
604800
407+
) # 7 days, in seconds
406408

407409
# CORS
408410
CORS_ALLOW_CREDENTIALS = True

0 commit comments

Comments
 (0)