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 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 process_code(request): AuthService.validate_state(request) id_token = AuthService.get_id_token(request) tenant_id = id_token.get('tid') user_service.update_organization(tenant_id, True) message = 'Admin consented successfully!' user = AuthService.get_current_user(request) if user.is_authenticated: request.session['Message'] = message return HttpResponseRedirect('/Admin') else: return HttpResponseRedirect('/Admin/Consent?consented=true')