def add_remove_ad_group(request, username=None, add_group=True): """ Add/Remove the groups from specified username :param request: :param username: :param add_group: :return: """ #get the list of group from html groups = request.POST.getlist('groups') try: ad.add_remove_ad_groups(db_service.get_local_ad(), username, groups, add_group) except Exception as e: return list_active_directory_group(request, username, error_message=e.message) user = db_service.get_user(username) fullname = user.full_name.split() subject = "SOL: add/remove in AD Group" add_remove = "assigned " if add_group else "unassigned " group_info = tabulate(["Group Name : ", groups]) message = "Hi " + fullname[0] + ", \n\tYour account's AD configuration has been modified, you are " + add_remove + \ " to below groups.\n" + group_info + "\nPlease contact Administrator in case of any issue.\n\n" sol_email.send_mail(receiver=user.email_id, subject=subject, message=message) return list_active_directory_group( request, username, message="Groups processed successfully.")
def delete_user(request, username=None): """ Delete user from AD as well as from SOL db :param request :param username wants ro delete :return render to list_users page with message or error_message """ # pass username with local ad details to delete user from AD try: ad.delete_user(db_service.get_local_ad(), username) except Exception as e: list_sol_users(request, error_message=e.message) #delete the user from SOL database user = db_service.delete_user(username) fullname = user.full_name.split() subject = 'Thank you for using ServiceOnline' message = "Hi " + fullname[0] + ",\n\tRecently your account has been deleted from ServiceOnline, now you " \ "will not be able to access ServiceOnline. Thank you for using our services. " \ "In case if you again want access of ServiceOnline, please get in touch with " \ "Administrator." sol_email.send_mail(receiver=user.email_id, subject=subject, message=message) return list_sol_users(request, message="User deleted successfully.")
def change_user_status(request, username=None): """ Change AD user's status i.e activate or deactivate Change the active flag form SOL db :param request :param username wants to create it in AD :return render to list_users page with message or error_message """ # pass username and local ad details to change the AD user's status try: ad.change_status(db_service.get_local_ad(), username) except Exception as e: list_sol_users(request, error_message="Unable to (de)active user due to : " + e.message) # change that user status from SOL database db_service.change_user_status(username) user = db_service.get_user(username) fullname = user.full_name.split() subject = 'SOL: Activation/Deactivation from SOL' user_status = "Successfully Activated" if user.active else "Successfully Deactivated" message = "Hi " + fullname[0] + ",\n\tYour account has been " + user_status + \ ", Please contact Administrator in case of any issue." sol_email.send_mail(receiver=user.email_id, subject=subject, message=message) return list_sol_users(request, message="User (de)activated successfully.")
def active_directory_configuration(request): # in case if it's GET request redirect to active directory template with AD details if any. message = None if request.method == constants.GET: # if ad details are already stored in db then it should able to see, so we render this details to AD_template local_active_directory = db_service.get_local_ad() auth_active_directory = db_service.get_auth_ad() else: #store local AD details in SOL DB local_active_directory = { constants.LOCAL_AD_HOST: request.POST[constants.LOCAL_AD_HOST], constants.LOCAL_AD_PORT: request.POST[constants.LOCAL_AD_PORT], constants.LOCAL_AD_DN: request.POST[constants.LOCAL_AD_DN], constants.LOCAL_AD_DOMAIN: request.POST[constants.LOCAL_AD_DOMAIN], constants.LOCAL_AD_USERNAME: request.POST[constants.LOCAL_AD_USERNAME], constants.LOCAL_AD_PASSWORD: request.POST[constants.LOCAL_AD_PASSWORD] } db_service.store_local_ad(local_active_directory) # store auth AD details in SOL DB auth_active_directory = { constants.AUTH_AD_HOST: request.POST[constants.AUTH_AD_HOST], constants.AUTH_AD_PORT: request.POST[constants.AUTH_AD_PORT], constants.AUTH_AD_DN: request.POST[constants.AUTH_AD_DN], constants.AUTH_AD_DOMAIN: request.POST[constants.AUTH_AD_DOMAIN], constants.AUTH_AD_USERNAME: request.POST[constants.AUTH_AD_USERNAME], constants.AUTH_AD_PASSWORD: request.POST[constants.AUTH_AD_PASSWORD], } db_service.store_auth_ad(auth_active_directory) # store_ad_in_session(request, local_active_directory) message = "AD Details Saved Successfully" return render( request, constants.ACTIVE_DIRECTORY_TEMPLATE, { 'auth_ad': auth_active_directory, 'local_ad': local_active_directory, constants.MESSAGE: message })
def list_active_directory_group(request, username=None, message=None, error_message=None): """ List all the groups from local AD, and if username is given it will list groups accordingly :param request: :param username: :param message: :param error_message: :return: """ # get the user details user_detail = db_service.get_user(username) #get AD details active_directory = db_service.get_local_ad() # pass AD details to load all groups from AD try: all_groups = ad.load_all_groups(active_directory) except Exception as e: return render(request, constants.ACTIVE_DIRECTORY_GROUP_TEMPLATE, { constants.ERROR_MESSAGE: e.message, 'user_detail': user_detail }) # pass user details and AD details to load groups from AD which user is added try: user_groups = ad.load_all_groups(active_directory, username) except Exception as e: return render(request, constants.ACTIVE_DIRECTORY_GROUP_TEMPLATE, { constants.ERROR_MESSAGE: e.message, 'user_detail': user_detail }) return render( request, constants.ACTIVE_DIRECTORY_GROUP_TEMPLATE, { 'user_detail': user_detail, 'all_groups': all_groups, 'user_groups': user_groups, constants.MESSAGE: message, constants.ERROR_MESSAGE: error_message })
def create_user(request): """ create user method is used to create a user in AD and in sol db. GET request will load the template and POST request will create a user. :param request: :return: """ # in case if it's GET request redirect to create user page. if request.method == constants.GET: return render(request, constants.CREATE_USER_TEMPLATE) try: # get user details from auth AD and pass username user_detail = ad.retrieve_user_details(db_service.get_auth_ad(), request.POST["id"]) user_detail[constants.USER_PASSWORD] = request.POST["new_password"] # pass the user's details taken from auth AD to create user in local AD ad.create_user(db_service.get_local_ad(), user_detail) except Exception as e: return list_sol_users(request, error_message=str(e)) # add that created user in SOL database db_service.create_user(user_detail) subject = " User(created): Welcome to ServiceOnline." users_information_table = tabulate( [["Name : ", user_detail[constants.USER_FULL_NAME]], ["EmailAddress : ", user_detail[constants.USER_EMAIL]], ["Username : "******"Password:"******"Hi " + fname + ", \n\tWelcome to ServiceOnline. \nRecently Administrator created your account on " \ "ServiceOnline. Please find the access details below, \n\n" + users_information_table + \ "\n\nIn case of any access related issue, please get in touch with Administrator." sol_email.send_mail(receiver=user_detail[constants.USER_EMAIL], subject=subject, message=message) return list_sol_users(request, message="User created successfully.")
def change_password(request): if request.method == constants.GET: return render(request, constants.CHANGE_PASSWORD_TEMPLATE) username = request.session[constants.USER][constants.USERNAME] old_password = request.POST['old_password'] new_password = request.POST['new_password'] if constants.IS_DJANGO_ADMIN in request.session: try: ad.sol_authentication(username, old_password) except Exception as e: return render(request, constants.CHANGE_PASSWORD_TEMPLATE, {constants.ERROR_MESSAGE: e.message}) db_service.change_password(username, new_password) else: try: ad.change_password(db_service.get_local_ad(), username, old_password, new_password) except Exception as e: return render(request, constants.CHANGE_PASSWORD_TEMPLATE, {constants.ERROR_MESSAGE: e.message}) return render(request, constants.CHANGE_PASSWORD_TEMPLATE, {constants.MESSAGE: "Password changed successfully."})