11from django .contrib .auth .decorators import login_required
22from django .core .exceptions import ValidationError
3+ from django .core .paginator import Paginator
4+ from django .contrib .auth .models import User as djangoUser
5+ from .models import UserAccessMapping
6+ from Access import views_helper
37from django .http import JsonResponse
48from django .shortcuts import render
59from rest_framework .authentication import TokenAuthentication , BasicAuthentication
2226from Access .views_helper import render_error_message
2327from BrowserStackAutomation .settings import PERMISSION_CONSTANTS
2428
25- INVALID_REQUEST_MESSAGE = "Error in request not found OR Invalid request type - "
29+ INVALID_REQUEST_MESSAGE = "Error in request not found OR Invalid request type"
2630
2731logger = logging .getLogger (__name__ )
2832
@@ -131,14 +135,6 @@ def createNewGroup(request):
131135 return render (request , "BSOps/createNewGroup.html" , {})
132136
133137
134- @api_view (["GET" ])
135- @login_required
136- @user_with_permission (["VIEW_USER_ACCESS_LIST" ])
137- @authentication_classes ((TokenAuthentication , BasicAuthentication ))
138- def allUserAccessList (request , load_ui = True ):
139- return False
140-
141-
142138@login_required
143139def allUsersList (request ):
144140 context = getallUserList (request )
@@ -260,9 +256,9 @@ def accept_bulk(request, selector):
260256 context ["returnIds" ] = returnIds
261257 return JsonResponse (context , status = 200 )
262258 except Exception as e :
263- logger .debug (INVALID_REQUEST_MESSAGE + str (str (e )))
259+ logger .debug (INVALID_REQUEST_MESSAGE + " - " + str (str (e )))
264260 json_response = {}
265- json_response [" error" ] = INVALID_REQUEST_MESSAGE + str (str (e ))
261+ json_response [' error' ] = INVALID_REQUEST_MESSAGE + " - " + str (str (e ))
266262 json_response ["success" ] = False
267263 json_response ["status_code" ] = 401
268264 return JsonResponse (json_response , status = json_response ["status_code" ])
@@ -277,3 +273,125 @@ def remove_group_member(request):
277273 except Exception as e :
278274 logger .exception (str (e ))
279275 return JsonResponse ({"error" : "Failed to remove the user" }, status = 400 )
276+
277+
278+ @api_view (['GET' ])
279+ @login_required
280+ @user_with_permission (["VIEW_USER_ACCESS_LIST" ])
281+ @authentication_classes ((TokenAuthentication , BasicAuthentication ))
282+ def all_user_access_list (request , load_ui = True ):
283+ user = None
284+ page = 1
285+ try :
286+ if request .GET .get ('username' ):
287+ username = request .GET .get ('username' )
288+ user = djangoUser .objects .get (username = username )
289+ except Exception as e :
290+ # show all
291+ logger .exception (e )
292+
293+ try :
294+ data_list = []
295+ last_page = 1
296+ show_tabs = False
297+ username = ""
298+ generic_accesses = UserAccessMapping .get_accesses_not_declined ()
299+ response_type = request .GET .get ('responseType' , "ui" )
300+ load_ui = request .GET .get ('load_ui' , "true" ).lower () == "true"
301+ record_date = request .GET .get ('recordDate' , None )
302+
303+ if user :
304+ generic_accesses = generic_accesses .filter (
305+ user_identity__user = user .user ).order_by ("-requested_on" )
306+ show_tabs = True
307+ username = user .username
308+ elif "usersearch" in request .GET :
309+ generic_accesses = generic_accesses .filter (
310+ user_identity__user__user__username__icontains = request .GET .get ('usersearch' )) \
311+ .order_by ("user_identity__user__user__username" )
312+ else :
313+ generic_accesses = generic_accesses .order_by ("user_identity__user__user__username" )
314+
315+ filters = views_helper .get_filters_for_access_list (request )
316+ generic_accesses = generic_accesses .filter (** filters )
317+
318+ page = int (request .GET .get ('page' , 1 ))
319+
320+ if load_ui and response_type != "csv" :
321+ paginator_obj = Paginator (generic_accesses , 10 )
322+ last_page = paginator_obj .num_pages
323+ page = min (page , last_page ) if page > last_page else page
324+ paginator = paginator_obj .page (page )
325+ else :
326+ paginator = generic_accesses
327+
328+ access_types = list (set (generic_accesses .values_list ("access__access_tag" , flat = True )))
329+
330+ data_list = views_helper .prepare_datalist (paginator = paginator , record_date = record_date )
331+
332+ context = {}
333+ logger .debug (data_list )
334+
335+ data_dict = {
336+ 'dataList' : data_list ,
337+ 'last_page' : last_page ,
338+ 'current_page' : page ,
339+ 'access_types' : sorted (access_types , key = str .casefold ),
340+ 'show_tabs' : show_tabs ,
341+ 'username' : username
342+ }
343+
344+ context .update (data_dict )
345+
346+ if response_type == "json" :
347+ return JsonResponse (context , status = 200 )
348+ elif response_type == "csv" :
349+ return views_helper .gen_all_user_access_list_csv (data_list = data_list )
350+ if load_ui :
351+ return render (request , 'BSOps/allUserAccessList.html' , context )
352+ else :
353+ return JsonResponse (context )
354+
355+ except Exception as e :
356+ logger .debug ("Error in request not found OR Invalid request type" )
357+ logger .exception (e )
358+ json_response = {}
359+ json_response ['error' ] = {'error_msg' : str (e ), 'msg' : INVALID_REQUEST_MESSAGE }
360+ return render (request , 'BSOps/accessStatus.html' , json_response )
361+
362+
363+ @login_required
364+ @user_with_permission (["VIEW_USER_ACCESS_LIST" ])
365+ def mark_revoked (request ):
366+ json_response = {}
367+ status = 200
368+ request_id = None
369+ try :
370+ request_id = request .GET .get ("requestId" )
371+ if request_id .startswith ("module-" ):
372+ username = request .GET .get ("username" )
373+ if not username :
374+ json_response ["error" ] = "Username is invalid!"
375+ status = 403
376+ return JsonResponse (json_response , status = status )
377+ access_tag = request_id .split ("-" , 1 )[1 ]
378+ user = User .get_user_from_username (username = username )
379+ if user :
380+ requests = user .get_accesses_by_access_tag_and_status (access_tag = access_tag , status = ["Approved" , "Offboarding" ])
381+ else :
382+ raise User .DoesNotExist (f"User with username '{ username } ' does not exist" )
383+ else :
384+ requests = UserAccessMapping .get_unrevoked_accesses_by_request_id (request_id = request_id )
385+ success_list = []
386+ for mapping_object in requests :
387+ logger .info ("Marking access revoke - %s by user %s "
388+ % (mapping_object .request_id , request .user .user ))
389+ mapping_object .revoke (revoker = request .user .user )
390+ success_list .append (mapping_object .request_id )
391+ json_response ["msg" ] = "Success"
392+ json_response ["request_ids" ] = success_list
393+ except Exception as e :
394+ logger .exception (str (e ))
395+ json_response ["error" ] = str (e )
396+ status = 403
397+ return JsonResponse (json_response , status = status )
0 commit comments