From 4ef73a4ec0db75a812d9a96772ab9e16fc627db1 Mon Sep 17 00:00:00 2001 From: sumedha-bhatt Date: Thu, 16 Mar 2023 13:45:35 +0530 Subject: [PATCH 1/2] fix: group flow for access requests --- .../base_email_access/access.py | 3 + Access/accessrequest_helper.py | 65 ++++++++++++------- Access/group_helper.py | 43 +++++++----- Access/models.py | 16 ++++- Access/views.py | 2 + BrowserStackAutomation/settings.py | 2 +- BrowserStackAutomation/urls.py | 8 +-- templates/BSOps/pendingRequests.html | 9 --- 8 files changed, 91 insertions(+), 57 deletions(-) diff --git a/Access/access_modules/base_email_access/access.py b/Access/access_modules/base_email_access/access.py index 9cd2441e..2ed4cb98 100644 --- a/Access/access_modules/base_email_access/access.py +++ b/Access/access_modules/base_email_access/access.py @@ -174,6 +174,9 @@ def revoke(self, user, label): def get_extra_fields(self): return [] + def can_auto_approve(self): + return False + # return valid access label array which will be added in db or raise exception def validate_request(self, access_labels_data, request_user, is_group=False): valid_access_label_array = [] diff --git a/Access/accessrequest_helper.py b/Access/accessrequest_helper.py index 5f9aa09a..260e287e 100644 --- a/Access/accessrequest_helper.py +++ b/Access/accessrequest_helper.py @@ -16,6 +16,7 @@ User, GroupV2, AccessV2, + MembershipV2, ApprovalType, ) from Access.background_task_manager import background_task, accept_request @@ -283,9 +284,11 @@ def get_pending_accesses_from_modules(access_user): process_group_requests(pending_accesses["group_requests"], group_requests) logger.info( - "Time to fetch pending requests of access module: %s - %s " - % access_module_tag, - str(time.time() - access_module_start_time), + "Time to fetch pending requests of access module: %s - %s " % + ( + access_module_tag, + str(time.time() - access_module_start_time) + ), ) return individual_requests, list(group_requests.values()) @@ -382,7 +385,7 @@ def create_request(auth_user, access_request_form): for index1, access_type in enumerate(access_request["accessRequests"]): access_labels = validate_access_labels( access_labels_json=access_request["accessLabel"][index1], - access_type=access_type, + access_tag=access_type, ) access_reason = access_request["accessReason"][index1] @@ -399,17 +402,16 @@ def create_request(auth_user, access_request_form): } access_module = helper.get_available_access_modules()[access_type] - module_access_labels = access_module.validate_request( - access_labels, auth_user, is_group=False - ) - extra_field_labels = get_extra_field_labels(access_module) - if extra_fields and extra_field_labels: for field in extra_field_labels: - module_access_labels[0][field] = extra_fields[0] + access_labels[0][field] = extra_fields[0] extra_fields = extra_fields[1:] + module_access_labels = access_module.validate_request( + access_labels, auth_user, is_group=False + ) + for index2, access_label in enumerate(module_access_labels): request_id = request_id + "_" + str(index2) access_create_error = _create_access( @@ -511,7 +513,10 @@ def get_extra_field_labels(access_module): def get_extra_fields(access_request): if "extraFields" in access_request: return access_request["extraFields"] - return [] + elif "extraFields[]" in access_request: + return [access_request["extraFields[]"]] + else: + return [] def _validate_access_request(access_request_form, user): @@ -674,37 +679,49 @@ def run_accept_request_task( def decline_individual_access(request, access_type, request_id, reason): json_response = {} - access_mapping = UserAccessMapping.get_access_request(request_id) + access_mapping = {} + decline_new_group = False + if access_type == "declineNewGroup": + access_mapping = GroupV2.get_pending_group(request_id) + decline_new_group = True + else: + access_mapping = UserAccessMapping.get_access_request(request_id) + if not is_request_valid(request_id, access_mapping): json_response["error"] = USER_REQUEST_IN_PROCESS_ERR_MSG.format( request_id=request_id, ) return json_response - json_response = validate_approver_permissions(access_mapping, access_type, request) - if "error" in json_response: - return json_response + if not decline_new_group: + json_response = validate_approver_permissions(access_mapping, access_type, request) + if "error" in json_response: + return json_response with transaction.atomic(): access_mapping.decline_access(reason) if hasattr(access_mapping, "approver_1"): - access_mapping.decline_reason = reason if access_mapping.approver_1 is not None: access_mapping.approver_2 = request.user.user else: access_mapping.approver_1 = request.user.user else: - access_mapping.reason = reason - access_mapping.approver = request.user.username + access_mapping.approver = request.user.user access_mapping.save() - access_module = helper.get_available_access_module_from_tag(access_type) - access_labels = [access_mapping.access.access_label] - description = access_module.combine_labels_desc(access_labels) - notifications.send_mail_for_request_decline( - request, description, request_id, reason, access_type - ) + if not decline_new_group: + access_module = helper.get_available_access_module_from_tag(access_type) + access_labels = [access_mapping.access.access_label] + description = access_module.combine_labels_desc(access_labels) + notifications.send_mail_for_request_decline( + request, description, request_id, reason, access_type + ) + else: + MembershipV2.update_membership(access_mapping, reason) + notifications.send_mail_for_request_decline( + request, "Group Creation", request_id, reason, access_type + ) logger.debug( USER_REQUEST_DECLINE_MSG.format( diff --git a/Access/group_helper.py b/Access/group_helper.py index 9a2acff0..aba2e30e 100644 --- a/Access/group_helper.py +++ b/Access/group_helper.py @@ -42,7 +42,7 @@ LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR = { "error_msg": "Invalid Group Name", - "msg": "A group with {group_name} doesn't exist.", + "msg": "A group with name {group_name} doesn't exist.", } NON_OWNER_PERMISSION_DENIED_ERROR = { @@ -129,6 +129,7 @@ def create_group(request): requester=request.user.user, description=reason, needsAccessApprove=needs_access_approve, + date_time=base_datetime_prefix, ) new_group.add_member( @@ -183,7 +184,9 @@ def get_group_access_list(auth_user, group_name): context = { "error": { "error_msg": LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR["error_msg"], - "msg": LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR["msg"], + "msg": LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR["msg"].format( + group_name=group_name + ), } } return context @@ -236,7 +239,9 @@ def update_owners(request, group_name): context = { "error": { "error_msg": LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR["error_msg"], - "msg": LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR["msg"], + "msg": LIST_GROUP_ACCESSES_GROUP_DONT_EXIST_ERROR["msg"].format( + group_name=group_name + ), } } return context @@ -441,8 +446,8 @@ def add_user_to_group(request): reason=data["memberReason"][0], date_time=base_datetime_prefix, ) + membership_id = membership.membership_id if not group.needsAccessApprove: - membership_id = membership.membership_id context = {} context["accessStatus"] = { "msg": REQUEST_PROCESSING.format(requestId=membership_id), @@ -609,6 +614,7 @@ def get_group_access(form_data, auth_user): ) if validation_error: context["status"] = validation_error + return context access_module_list = data["accessList"] for module_value in access_module_list: @@ -656,14 +662,15 @@ def save_group_access_request(form_data, auth_user): extra_fields = accessrequest_helper.get_extra_fields(access_request) extra_field_labels = accessrequest_helper.get_extra_field_labels(access_module) - module_access_labels = access_module.validate_request( - access_labels, auth_user, is_group=False - ) if extra_fields and extra_field_labels: for field in extra_field_labels: - module_access_labels[0][field] = extra_fields[0] + access_labels[0][field] = extra_fields[0] extra_fields = extra_fields[1:] + module_access_labels = access_module.validate_request( + access_labels, auth_user, is_group=False + ) + request_id = ( auth_user.username + "-" @@ -697,15 +704,15 @@ def save_group_access_request(form_data, auth_user): "msg": "Access already exists" + json.dumps(access_label), } ) - email_destination = access_module.get_approvers() - member_list = group.get_all_approved_members() - notifications.send_group_access_add_email( - destination=email_destination, - group_name=group_name, - requester=auth_user.user.email, - request_id=request_id, - member_list=member_list, - ) + # email_destination = access_module.get_approvers() + # member_list = group.get_all_approved_members() + # notifications.send_group_access_add_email( + # destination=email_destination, + # group_name=group_name, + # requester=auth_user.user.email, + # request_id=request_id, + # member_list=member_list, + # ) return context @@ -731,7 +738,7 @@ def validate_group_access_create_request(group, auth_user): logger.exception("This Group is not yet approved") return {"title": "Permisison Denied", "msg": "This Group is not yet approved"} - if not (group.is_owner(auth_user.user) or auth_user.is_superuser): + if not auth_user.user.is_allowed_admin_actions_on_group(group): logger.exception("Permission denied, you're not owner of this group") return {"title": "Permision Denied", "msg": "You're not owner of this group"} return None diff --git a/Access/models.py b/Access/models.py index eebe359d..19fd7f86 100644 --- a/Access/models.py +++ b/Access/models.py @@ -400,6 +400,10 @@ def revoke_membership(self): self.status = "Revoked" self.save() + def update_membership(group, reason): + membership = MembershipV2.objects.filter(group=group) + membership.update(status="Declined", decline_reason=reason) + @staticmethod def get_membership(membership_id): try: @@ -500,6 +504,14 @@ def add_members(self, users=None, requested_by=None, reason="", date_time=""): def getPendingMemberships(): return MembershipV2.objects.filter(status="Pending", group__status="Approved") + def is_already_processed(self): + return self.status in ['Declined','Approved','Processing','Revoked'] + + def decline_access(self, decline_reason=None): + self.status = "Declined" + self.decline_reason = decline_reason + self.save() + @staticmethod def getPendingCreation(): new_group_pending = GroupV2.objects.filter(status="Pending") @@ -597,7 +609,9 @@ def unapprove_memberships(self): def is_owner(self, user): return ( - self.membership_group.filter(is_owner=True).filter(user=user).first() + self.membership_group.filter(is_owner=True) + .filter(user=user) + .first() is not None ) diff --git a/Access/views.py b/Access/views.py index aeac3b1c..7fcf067b 100644 --- a/Access/views.py +++ b/Access/views.py @@ -232,6 +232,8 @@ def group_access(request): return render(request, "BSOps/accessStatus.html", context) context = group_helper.get_group_access(request.GET, request.user) + if "status" in context: + return render(request, 'BSOps/accessStatus.html',context) return render(request, "BSOps/groupAccessRequestForm.html", context) diff --git a/BrowserStackAutomation/settings.py b/BrowserStackAutomation/settings.py index 159120da..77e092f9 100644 --- a/BrowserStackAutomation/settings.py +++ b/BrowserStackAutomation/settings.py @@ -240,7 +240,7 @@ 'disable_existing_loggers': False, 'formatters': { 'verbose': { - 'format': "[cid: %(cid)s]:{\"meta\":{\"timestamp\":\"%(asctime)s.%(msecs)03dZ\",\"component\":\"django\",\"application\":\"enigma\",\"team\":\"core\"},\"log\":{\"kind\":\"ENIGMA_APP\",\"dynamic_data\":\"[%(name)s:%(funcName)s:%(lineno)s] --- %(message)s\",\"level\":\"%(levelname)s\"}}", + 'format': "{\"meta\":{\"timestamp\":\"%(asctime)s.%(msecs)03dZ\",\"component\":\"django\",\"application\":\"enigma\",\"team\":\"core\"},\"log\":{\"kind\":\"ENIGMA_APP\",\"dynamic_data\":\"[%(name)s:%(funcName)s:%(lineno)s] --- %(message)s\",\"level\":\"%(levelname)s\"}}", 'datefmt': "%Y-%m-%dT%H:%M:%S" } }, diff --git a/BrowserStackAutomation/urls.py b/BrowserStackAutomation/urls.py index 6c46a77a..298f0d94 100644 --- a/BrowserStackAutomation/urls.py +++ b/BrowserStackAutomation/urls.py @@ -63,7 +63,7 @@ re_path(r"^access/requestAccess$", request_access, name="requestAccess"), re_path(r"^group/requestAccess$", group_access, name="groupRequestAccess"), re_path( - r"^group/access/list/(?P[\w -]+)$", + r"^group/access/list/(?P[\w -]+)$", group_access_list, name="groupAccessList", ), @@ -71,19 +71,19 @@ r"^group/new/accept/(?P.*)$", approve_new_group, name="approveNewGroup" ), re_path( - r"^group/adduser/(?P[\w -]+)$", + r"^group/adduser/(?P[\w -]+)$", add_user_to_group, name="addUserToGroup", ), re_path( - r"^group/updateOwners/(?P[\w -]+)$", + r"^group/updateOwners/(?P[\w -]+)$", update_group_owners, name="updateGroupOwners", ), re_path(r"^access/pendingRequests$", pending_requests, name="pendingRequests"), re_path(r"^accept_bulk/(?P[\w-]+)", accept_bulk, name="accept_bulk"), re_path( - r"^decline/(?P[\w-]+)/(?P.*)$", + r"^decline/(?P[\w-]+)/(?P.*)$", decline_access, name="decline", ), diff --git a/templates/BSOps/pendingRequests.html b/templates/BSOps/pendingRequests.html index 116d67c5..69e9e936 100644 --- a/templates/BSOps/pendingRequests.html +++ b/templates/BSOps/pendingRequests.html @@ -321,15 +321,6 @@ $(".bulkAcceptAll-checkbox").change(function () { let bulkCheckValue = $(this).prop('checked'); - // for ssh - // sshCheckedAllOption = $("#dropdownMenuButton").text() - - // if (sshCheckedAllOption === "Production") { - // checkSSHCardWithTitle("prod", bulkCheckValue) - // } - // else if (sshCheckedAllOption === "Staging") { - // checkSSHCardWithTitle("staging", bulkCheckValue) - // } let selector = $(this).val() $(`.${selector}`).each(function (idx, elem) { From 447e2eb3bc0a040821e261546656feb524aad6e1 Mon Sep 17 00:00:00 2001 From: sumedha-bhatt Date: Fri, 17 Mar 2023 09:38:29 +0530 Subject: [PATCH 2/2] fix: fixes group flow --- Access/accessrequest_helper.py | 17 +-- Access/background_task_manager.py | 4 +- Access/group_helper.py | 5 +- Access/models.py | 5 +- Access/notifications.py | 24 +---- Access/views.py | 11 +- .../users_list_tab.html | 4 +- templates/BSOps/pendingRequests.html | 100 +----------------- 8 files changed, 34 insertions(+), 136 deletions(-) diff --git a/Access/accessrequest_helper.py b/Access/accessrequest_helper.py index 260e287e..4a33a079 100644 --- a/Access/accessrequest_helper.py +++ b/Access/accessrequest_helper.py @@ -225,7 +225,7 @@ def get_decline_access_request(request, access_type, request_id): UserAccessMapping.get_pending_access_mapping(request_id=value) ) request_ids.extend(current_ids) - access_type = access_type.rsplit("-", 1)[0] + access_type = "moduleAccess" elif access_type == "clubGroupAccess": for value in [request_id]: # ready for bulk decline return_ids.append(value) @@ -239,6 +239,7 @@ def get_decline_access_request(request, access_type, request_id): access_type = "groupAccess" else: request_ids = [request_id] + for current_request_id in request_ids: if access_type == "groupAccess": response = decline_group_access(request, current_request_id, reason) @@ -300,7 +301,7 @@ def process_individual_requests( if len(individual_pending_requests): clubbed_requests = {} for accessrequest in individual_pending_requests: - club_id = accessrequest["requestId"].rsplit("_", 1)[0] + club_id = accessrequest["requestId"].rsplit("_")[0] if club_id not in clubbed_requests: clubbed_requests[club_id] = { "club_id": club_id, @@ -329,7 +330,7 @@ def process_group_requests(group_pending_requests, group_requests): club_id = ( accessrequest["groupName"] + "-" - + accessrequest["requestId"].rsplit("-", 1)[-1].rsplit("_", 1)[0] + + accessrequest["requestId"].rsplit("-", 1)[-1].rsplit("_")[0] ) needs_access_approve = GroupV2.objects.get( name=accessrequest["groupName"], status="Approved" @@ -556,7 +557,6 @@ def validate_access_labels(access_labels_json, access_tag): def _get_approver_permissions(access_tag, access_label=None): json_response = {} - access_module = helper.get_available_access_module_from_tag(access_tag) approver_permissions = [] approver_permissions = access_module.fetch_approver_permissions(access_label) @@ -588,9 +588,9 @@ def accept_user_access_requests(auth_user, request_id): ) return json_response - requester = access_mapping.user_identity.user.email - if auth_user.username == requester: - json_response["error"] = USER_REQUEST_PERMISSION_DENIED_ERR_MSG + requester = access_mapping.user_identity.user + if auth_user.user == requester: + json_response["error"] = SELF_APPROVAL_ERROR_MSG return json_response access_label = access_mapping.access.access_label @@ -686,6 +686,7 @@ def decline_individual_access(request, access_type, request_id, reason): decline_new_group = True else: access_mapping = UserAccessMapping.get_access_request(request_id) + access_type = access_mapping.access.access_tag if not is_request_valid(request_id, access_mapping): json_response["error"] = USER_REQUEST_IN_PROCESS_ERR_MSG.format( @@ -838,7 +839,7 @@ def decline_group_access(request, request_id, reason): access_type = group_mapping.access.access_tag json_response = validate_approver_permissions( - group_mapping, access_type, request, request_id + group_mapping, access_type, request ) if "error" in json_response: return json_response diff --git a/Access/background_task_manager.py b/Access/background_task_manager.py index c0444cfe..7abc807d 100644 --- a/Access/background_task_manager.py +++ b/Access/background_task_manager.py @@ -60,7 +60,7 @@ def run_access_grant(request_id): user_access_mapping = UserAccessMapping.get_access_request(request_id=request_id) access_tag = user_access_mapping.access.access_tag user = user_access_mapping.user_identity.user - approver = user_access_mapping.approver_1.user.username + approver = user_access_mapping.approver_1.user message = "" if not user_access_mapping.user_identity.user.is_active(): user_access_mapping.decline_access(decline_reason="User is not active") @@ -68,7 +68,7 @@ def run_access_grant(request_id): { "requestId": request_id, "status": "Declined", - "by": approver, + "by": approver.username, "response": message, } ) diff --git a/Access/group_helper.py b/Access/group_helper.py index aba2e30e..8f07a706 100644 --- a/Access/group_helper.py +++ b/Access/group_helper.py @@ -490,10 +490,11 @@ def add_user_to_group(request): } else: + membership = MembershipV2.get_membership(membership_id=membership_id) notifications.send_mulitple_membership_accepted_notification( users_added, data["groupName"][0], - data["memberReason"][0], + membership, ) if len(selected_users) - len(users_added) == 0: context = {} @@ -672,7 +673,7 @@ def save_group_access_request(form_data, auth_user): ) request_id = ( - auth_user.username + group.name + "-" + access_tag + "-" diff --git a/Access/models.py b/Access/models.py index a7531471..2078d0f1 100644 --- a/Access/models.py +++ b/Access/models.py @@ -877,7 +877,7 @@ def decline_access(self, decline_reason=None): def approve_access(self): self.status = "Approved" self.save() - + @staticmethod def get_by_id(request_id): return UserAccessMapping.objects.get(request_id=request_id) @@ -1076,6 +1076,9 @@ def update_access_status(self, current_status): def is_self_approval(self, approver): return self.requested_by == approver + def is_already_processed(self): + return self.status in ['Declined','Approved','Processing','Revoked'] + class AccessV2(models.Model): access_tag = models.CharField(max_length=255) diff --git a/Access/notifications.py b/Access/notifications.py index cff23231..1d869233 100644 --- a/Access/notifications.py +++ b/Access/notifications.py @@ -70,31 +70,17 @@ def send_membership_accepted_notification(user, group, membership): destination.append(user.email) general.emailSES(destination, subject, body) -def send_mulitple_membership_accepted_notification(user_names, group, membership): - subject = MEMBERSHIP_ACCEPTED_SUBJECT.format(user_names, group.name) +def send_mulitple_membership_accepted_notification(user_names, group_name, membership): + subject = MEMBERSHIP_ACCEPTED_SUBJECT.format(user_names, group_name) body = helpers.generateStringFromTemplate( filename="membershipAcceptedEmailBody.html", user_name= ",".join(user_names), - group_name=group.name, - approver=membership.approver.name, - ) - destination = [] - destination.append(membership.requested_by.email) - destination = destination + user_names - general.emailSES(destination, subject, body) - - -def send_mulitple_membership_accepted_notification(user_names, group, membership): - subject = MEMBERSHIP_ACCEPTED_SUBJECT.format(user_names, group.name) - body = helpers.generateStringFromTemplate( - filename="membershipAcceptedEmailBody.html", - user_name=",".join(user_names), - group_name=group.name, + group_name=group_name, approver=membership.approver.name, ) destination = [] destination.append(membership.requested_by.email) - destination = destination + user_names + destination.append(user_names) general.emailSES(destination, subject, body) @@ -176,7 +162,7 @@ def send_mail_for_request_decline( def send_mail_for_request_granted_failure(user, approver, access_type, request_id): destination = [user.email] - destination.extend(approver.email) + destination.append(approver.email) subject = USER_ACCESS_REQUEST_GRANT_FAILURE_SUBJECT.format( str(user.email), access_type.upper(), request_id ) diff --git a/Access/views.py b/Access/views.py index 57a70e3d..b540e888 100644 --- a/Access/views.py +++ b/Access/views.py @@ -351,10 +351,9 @@ def accept_bulk(request, selector): input_vals = request.GET.getlist("requestId") user = request.user.user is_access_approver = user.has_permission("ACCESS_APPROVE") - request_ids, return_ids = _get_request_ids_for_bulk_processing( + request_ids, return_ids, selector = _get_request_ids_for_bulk_processing( input_vals, selector ) - for value in request_ids: request_id = value if selector == "groupNew" and is_access_approver: @@ -367,7 +366,7 @@ def accept_bulk(request, selector): ) elif selector == "groupAccess": json_response = accept_group_access(request.user, request_id) - elif selector.endswith("-club"): + elif selector == "moduleAccess": json_response = accept_user_access_requests(request.user, request_id) else: raise ValidationError("Invalid request") @@ -403,6 +402,7 @@ def _get_request_ids_for_bulk_processing(posted_request_ids, selector): UserAccessMapping.get_pending_access_mapping(request_id=value) ) access_request_ids.extend(current_ids) + selector = "moduleAccess" elif selector == "clubGroupAccess": for value in input_vals: return_ids.append(value) @@ -416,7 +416,7 @@ def _get_request_ids_for_bulk_processing(posted_request_ids, selector): selector = "groupAccess" else: access_request_ids = input_vals - return access_request_ids, return_ids + return access_request_ids, return_ids, selector @login_required @@ -626,7 +626,7 @@ def individual_resolve(request): request_ids = request.GET.getlist('requestId') if not request_ids: raise Exception("Request id not found in the request") - + for request_id in request_ids: user_access_mapping = UserAccessMapping.get_by_id(request_id) if user_access_mapping.status.lower() in ["grantfailed", "approved"]: @@ -639,4 +639,3 @@ def individual_resolve(request): logger.exception(str(e)) json_response['error'] = {'error_msg': "Bad request", 'msg': "Error in request not found OR Invalid request type"} return render(request,'BSOps/accessStatus.html',json_response) - diff --git a/templates/BSOps/group_access_list_tabs/users_list_tab.html b/templates/BSOps/group_access_list_tabs/users_list_tab.html index cfd8ba45..4a39652f 100644 --- a/templates/BSOps/group_access_list_tabs/users_list_tab.html +++ b/templates/BSOps/group_access_list_tabs/users_list_tab.html @@ -74,7 +74,7 @@ }); function userRemoveConfirm(membership_id){ - $("#remove-details").html("

Confirm User removal "+ membership_id +"

") + $("#remove-details").html("

Confirm removal of user "+ membership_id +"

") button_elem = document.getElementsByName("final-remove-button")[0] button_elem.id = membership_id } @@ -91,7 +91,7 @@ diff --git a/templates/BSOps/pendingRequests.html b/templates/BSOps/pendingRequests.html index 69e9e936..d00e45b7 100644 --- a/templates/BSOps/pendingRequests.html +++ b/templates/BSOps/pendingRequests.html @@ -366,98 +366,6 @@

- {% if repoRequest|length %} -
- -
-
- {% if repoRequest %} - - {% endif %} - - - {% for request in repoRequest %} -
-
-
-
-
- -
-
-
-
-

{{request.requestId}}

-

Requested By: {{request.requester}}

-

Requested On: {{ request.requested_on }} UTC

-
-
-
-

Github Repo Details

-

Git user name: {{request.requestInfo.gitusername}}

-

Repo Name: {{request.requestInfo.githubRepoName}}

-

Repo Description: {{request.requestInfo.githubRepoDesc}}

-

Repo type: {{request.requestInfo.githubRepoType}}

-

Master Branch Protection: - {{request.requestInfo.masterBranchProtection}}

-

README enabled: {{request.requestInfo.readmeEnabled}}

-

Deny Default Access: {{request.requestInfo.denyDefaultAccess}}

-
-
-
-
-
- - -
-
-
-
-
-
- {% endfor %} - {% if not repoRequest %} - - {% endif %} -
-
-
- {% endif %} - {% if newGroupPending|length %}
@@ -709,8 +617,8 @@

{{group.group_club_id}}

Approving EKS access also creates aws account for the user if it does not exists.
{% endif %} -

{{ eachAccessDetails.accessType }} - {{ - eachAccessDetails.accessCategory }}

+

{{ eachAccessDetails.accessType }} - + {{ eachAccessDetails.accessCategory }}

{% if eachAccessDetails.accessMeta %}

@@ -846,10 +754,10 @@
Accesses
{% if eachRequest.accessData|length > 1 %} {% endif %}