def process_code(request): AuthService.validate_state(request) code = request.POST.get('code') id_token = AuthService.get_id_token(request) o365_user_id = id_token.get('oid') tenant_id = id_token.get('tid') if link_service.is_linked(o365_user_id): request.session[ 'Error'] = 'Failed to link accounts. The Office 365 account %s is already linked to another local account.' % id_token.get( 'upn') return HttpResponseRedirect('/Link') redirect_uri = AuthService.get_redirect_uri(request, 'Link/ProcessCode') auth_result = token_service.get_token_with_code(code, redirect_uri, constant.Resources.MSGraph) token_service.cache_tokens(auth_result, o365_user_id) ms_graph_service = MSGraphService(auth_result.get('accessToken')) o365_user = ms_graph_service.get_o365_user(tenant_id) AuthService.set_o365_user(request, o365_user) user = AuthService.get_current_user(request) link_service.link(user.local_user, o365_user) request.session[ 'Message'] = 'Your local account has been successfully linked to your Office 365 account.' response = HttpResponseRedirect('/') response.set_cookie(constant.o365_username_cookie, o365_user.display_name) response.set_cookie(constant.o365_email_cookie, o365_user.email) return response
def o365_auth_callback(request): AuthService.validate_state(request) code = request.POST.get('code') id_token = AuthService.get_id_token(request) o365_user_id = id_token.get('oid') tenant_id = id_token.get('tid') redirect_uri = AuthService.get_redirect_uri(request, 'Auth/O365/Callback') auth_result = token_service.get_token_with_code(code, redirect_uri, constant.Resources.MSGraph) token_service.cache_tokens(auth_result, o365_user_id) ms_graph_service = MSGraphService(auth_result.get('accessToken')) o365_user = ms_graph_service.get_o365_user(tenant_id) AuthService.set_o365_user(request, o365_user) local_user = user_service.get_user_by_o365_email(o365_user.email) if local_user: auth_login(request, local_user) response = HttpResponseRedirect('/') response.set_cookie(constant.o365_username_cookie, o365_user.display_name) response.set_cookie(constant.o365_email_cookie, o365_user.email) return response
def __call__(self, request): user = AuthService.get_current_user(request) if user.are_linked: if not Profile.objects.filter(id=user.user_id, o365UserId=user.o365_user_id): auth_logout(request) AuthService.set_o365_user(request, user.o365_user) return self.get_response(request)
def login_post(request): email = '' password = '' errors = [] user_form = UserInfo(request.POST) if user_form.is_valid(): data = user_form.clean() email = data['Email'] password = data['Password'] rememberme = data['RememberMe'] settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = not rememberme user = auth_authenticate(username=email, password=password) if user is not None: auth_login(request, user) o365_user = user_service.get_o365_user(user) if o365_user: AuthService.set_o365_user(request, o365_user) return HttpResponseRedirect('/') errors.append('Invalid login attempt.') context = {'user_form': user_form, 'errors': errors} return render(request, 'account/login.html', context)