Skip to content

Commit ef79daa

Browse files
committed
feat: mark revoke access for group
1 parent 0184a9f commit ef79daa

File tree

4 files changed

+83
-9
lines changed

4 files changed

+83
-9
lines changed

Access/group_helper.py

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from Access.models import User, GroupV2, MembershipV2, AccessV2
1+
from Access.models import GroupAccessMapping, User, GroupV2, MembershipV2, AccessV2
22
from Access import helpers, views_helper, notifications, accessrequest_helper
33
from django.db import transaction
44
import datetime
@@ -201,6 +201,7 @@ def get_group_access_list(request, group_name):
201201
context["genericAccesses"] = [
202202
get_generic_access(group_mapping) for group_mapping in group_mappings
203203
]
204+
print(group_mappings)
204205
if context["genericAccesses"] == [{}]:
205206
context["genericAccesses"] = []
206207

@@ -769,7 +770,7 @@ def remove_member(request):
769770
]
770771

771772
other_memberships_groups = (
772-
user.get_all_memberships()
773+
user.get_all_approved_memberships()
773774
.exclude(group=membership.group)
774775
.values_list("group", flat=True)
775776
)
@@ -800,3 +801,57 @@ def remove_member(request):
800801
membership.revoke_membership()
801802

802803
return {"message": "Successfully removed user from group"}
804+
805+
806+
def mark_revoked(request):
807+
try:
808+
request_id = request.POST.get("request_id")
809+
if not request_id:
810+
logger.debug("Cannot find request_id in the http request.")
811+
raise Exception("Request id not found in the request.")
812+
813+
mapping = GroupAccessMapping.get_by_id(request_id)
814+
if not mapping:
815+
logger.debug("Group Access Mapping not found in the database")
816+
raise Exception("Group Access Mapping not found in the database")
817+
except Exception as e:
818+
logger.exception(str(e))
819+
return {"error": ERROR_MESSAGE}
820+
821+
group = mapping.group
822+
auth_user = request.user
823+
if auth_user.user.has_permission("ALLOW_USER_OFFBOARD") and group.member_is_owner(auth_user.user):
824+
raise Exception("User Unauthorized to perfrom the action")
825+
826+
should_continue = False
827+
for membership in group.get_all_approved_members():
828+
other_memberships_groups = (
829+
membership.user.get_all_approved_memberships()
830+
.exclude(group=membership.group)
831+
.values_list("group", flat=True)
832+
)
833+
834+
for group in other_memberships_groups:
835+
if group.access_exist(mapping.access):
836+
should_continue = True
837+
break
838+
839+
if(should_continue):
840+
should_continue = False
841+
continue
842+
843+
user_access_identity = membership.user.get_active_identity(mapping.access.access_tag)
844+
user_access_mapping = user_access_identity.get_granted_access_mapping(mapping.access)
845+
846+
847+
background_task(
848+
"run_access_revoke",
849+
json.dumps(
850+
{
851+
"request_id": user_access_mapping.request_id,
852+
"revoker_email": auth_user.user.email
853+
}
854+
),
855+
)
856+
857+
return {"message": "Successfully initiated the revoke"}

Access/models.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ def getOwnedGroups(self):
179179
def isAdminOrOps(self):
180180
return self.is_ops or self.user.is_superuser
181181

182-
def get_all_memberships(self):
183-
return self.membership_user.all()
182+
def get_all_approved_memberships(self):
183+
return self.membership_user.filter(status="Approved")
184184

185185
def is_allowed_admin_actions_on_group(self, group):
186186
return (
@@ -490,7 +490,7 @@ def member_is_owner(self, user):
490490
return self.membership_group.get(user=user).is_owner
491491

492492
def get_active_accesses(self):
493-
return self.groupaccessmapping_set.filter(
493+
return self.group_access_mapping.filter(
494494
status__in=["Approved", "Pending", "Declined", "SecondaryPending"]
495495
)
496496

@@ -539,7 +539,7 @@ def get_all_approved_members(self):
539539
self.membership_group.filter(status="Approved")
540540

541541
def get_approved_accesses(self):
542-
return self.groupaccessmapping_set.filter(status="Approved")
542+
return self.group_access_mapping.filter(status="Approved")
543543

544544
def __str__(self):
545545
return self.name
@@ -813,6 +813,12 @@ def getAccessRequestDetails(self, access_module):
813813

814814
return access_request_data
815815

816+
def get_by_id(request_id):
817+
try:
818+
return GroupAccessMapping.objects.get(request_id=request_id)
819+
except GroupAccessMapping.DoesNotExist:
820+
return None
821+
816822

817823

818824

Access/views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,16 @@ def mark_revoked(request):
395395
json_response["error"] = str(e)
396396
status = 403
397397
return JsonResponse(json_response, status=status)
398+
399+
400+
def revoke_group_access(request):
401+
try:
402+
response = group_helper.revoke_access(request)
403+
if("error" in response):
404+
return JsonResponse(response, status=400)
405+
406+
return JsonResponse(response)
407+
except Exception as e:
408+
logger.exception(str(e))
409+
logger.debug("Something went wrong while revoking group access")
410+
return JsonResponse({"message": "Failed to revoke group Access"}, status=400)

BrowserStackAutomation/urls.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
update_group_owners,
3939
remove_group_member,
4040
)
41-
from Access.helpers import getAvailableAccessModules
41+
# from Access.helpers import getAvailableAccessModules
4242

4343
urlpatterns = [
4444
re_path(r"^admin/", admin.site.urls),
@@ -83,5 +83,5 @@
8383
),
8484
]
8585

86-
for each_module in getAvailableAccessModules():
87-
urlpatterns.extend(each_module.urlpatterns)
86+
# for each_module in getAvailableAccessModules():
87+
# urlpatterns.extend(each_module.urlpatterns)

0 commit comments

Comments
 (0)