示例#1
0
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
示例#2
0
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
示例#3
0
 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)
示例#4
0
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)