def send_confirmation_mail(self, request, emailconfirmation, signup): current_site = get_current_site(request) activate_url = self.get_email_confirmation_url( request, emailconfirmation) badgr_app = get_session_badgr_app(request) if not badgr_app: badgr_app = BadgrApp.objects.get_current(request, raise_exception=False) ctx = { "user": emailconfirmation.email_address.user, "email": emailconfirmation.email_address, "activate_url": activate_url, "current_site": current_site, "key": emailconfirmation.key, "badgr_app": badgr_app } if signup == 'canvas': email_template = 'account/email/email_confirmation_canvas' elif signup: email_template = 'account/email/email_confirmation_signup' else: email_template = 'account/email/email_confirmation' get_adapter().send_mail(email_template, emailconfirmation.email_address.email, ctx)
def pre_social_login(self, request, sociallogin): """ Retrieve and verify (again) auth token that was provided with initial connect request. Store as request.user, as required for socialauth connect logic. """ self._update_session(request, sociallogin) try: authcode = get_session_authcode(request) if authcode is not None: accesstoken = accesstoken_for_authcode(authcode) if not accesstoken: raise ImmediateHttpResponse(HttpResponseForbidden()) request.user = accesstoken.user if sociallogin.is_existing and accesstoken.user != sociallogin.user: badgr_app = get_session_badgr_app(self.request) redirect_url = "{url}?authError={message}".format( url=badgr_app.ui_connect_success_redirect, message=urllib.quote( "Could not add social login. This account is already associated with a user." )) raise ImmediateHttpResponse( HttpResponseRedirect(redirect_to=redirect_url)) except AuthenticationFailed as e: raise ImmediateHttpResponse(HttpResponseForbidden(e.detail))
def get_redirect_url(self): badgr_app = get_session_badgr_app(self.request) if badgr_app is not None: return set_url_query_params( badgr_app.ui_login_redirect, authError= 'An account already exists with provided email address')
def login(self, request, user): """ Preserve badgr_app session data across Django login() boundary """ badgr_app = get_session_badgr_app(request) ret = super(BadgrAccountAdapter, self).login(request, user) set_session_badgr_app(request, badgr_app) return ret
def get_redirect_url(self): badgr_app = get_session_badgr_app(self.request) verification_email = get_session_verification_email(self.request) if verification_email is not None: verification_email = urllib.quote(verification_email.encode('utf-8')) else: verification_email = '' if badgr_app is not None: return urlparse.urljoin(badgr_app.ui_signup_success_redirect.rstrip('/') + '/', verification_email)
def get_redirect_url(self): badgr_app = get_session_badgr_app(self.request) verification_email = get_session_verification_email(self.request) if verification_email is not None: verification_email = urllib.parse.quote(verification_email.encode('utf-8')) else: verification_email = '' if badgr_app is not None: return urllib.parse.urljoin(badgr_app.ui_signup_success_redirect.rstrip('/') + '/', verification_email)
def login(self, request, user): """ Preserve badgr_app session data across Django login() boundary """ badgr_app = get_session_badgr_app(request) if badgr_app is None: url = request.build_absolute_uri() print(('Badgr app is none in login {}'.format(url))) ret = super(BadgrAccountAdapter, self).login(request, user) set_session_badgr_app(request, badgr_app) return ret
def authentication_error(self, request, provider_id, error=None, exception=None, extra_context=None): badgr_app = get_session_badgr_app(self.request) redirect_url = "{url}?authError={message}".format( url=badgr_app.ui_login_redirect, message=urllib.quote("Authentication error")) raise ImmediateHttpResponse( HttpResponseRedirect(redirect_to=redirect_url))
def get_login_redirect_url(self, request): """ If successfully logged in, redirect to the front-end, including an authToken query parameter. """ if request.user.is_authenticated(): badgr_app = get_session_badgr_app(request) if badgr_app is not None: return set_url_query_params(badgr_app.ui_login_redirect, authToken=request.user.auth_token) else: return '/'
def authentication_error(self, request, provider_id, error=None, exception=None, extra_context={}): badgr_app = get_session_badgr_app(self.request) extra_context["authError"] = error if "code" not in extra_context: extra_context["code"] = AuthErrorCode.UNKNOWN_CODE args = urllib.parse.urlencode(extra_context) redirect_url = f"{badgr_app.ui_login_redirect}?{args}" raise ImmediateHttpResponse( HttpResponseRedirect(redirect_to=redirect_url))
def pre_social_login(self, request, sociallogin): """ Retrieve and verify (again) auth token that was provided with initial connect request. Store as request.user, as required for socialauth connect logic. """ self._update_session(request, sociallogin) try: authcode = get_session_authcode(request) if authcode is not None: accesstoken = accesstoken_for_authcode(authcode) if not accesstoken: raise ImmediateHttpResponse(HttpResponseForbidden()) request.user = accesstoken.user if sociallogin.is_existing and accesstoken.user != sociallogin.user: badgr_app = get_session_badgr_app(self.request) redirect_url = "{url}?authError={message}".format( url=badgr_app.ui_connect_success_redirect, message=urllib.quote("Could not add social login. This account is already associated with a user.")) raise ImmediateHttpResponse(HttpResponseRedirect(redirect_to=redirect_url)) except AuthenticationFailed as e: raise ImmediateHttpResponse(HttpResponseForbidden(e.detail))
def get_login_redirect_url(self, request): """ If successfully logged in, redirect to the front-end, including an authToken query parameter. """ if request.user.is_authenticated(): badgr_app = get_session_badgr_app(request) if badgr_app is not None: accesstoken = BadgrAccessToken.objects.generate_new_token_for_user( request.user, application=badgr_app.oauth_application if badgr_app.oauth_application_id else None, scope='rw:backpack rw:profile rw:issuer') if badgr_app.use_auth_code_exchange: authcode = authcode_for_accesstoken(accesstoken) params = dict(authCode=authcode) else: params = dict(authToken=accesstoken.token) return set_url_query_params(badgr_app.ui_login_redirect, **params) else: return '/'
def get_login_redirect_url(self, request): """ If successfully logged in, redirect to the front-end, including an authToken query parameter. """ if request.user.is_authenticated: badgr_app = get_session_badgr_app(request) if badgr_app is not None: accesstoken = BadgrAccessToken.objects.generate_new_token_for_user( request.user, application=badgr_app.oauth_application if badgr_app.oauth_application_id else None, scope='rw:backpack rw:profile rw:issuer') if badgr_app.use_auth_code_exchange: authcode = authcode_for_accesstoken(accesstoken) params = dict(authCode=authcode) else: params = dict(authToken=accesstoken.token) return set_url_query_params(badgr_app.ui_login_redirect, **params) else: return '/'
def get_redirect_url(self): badgr_app = get_session_badgr_app(self.request) if badgr_app is not None: return set_url_query_params(badgr_app.ui_login_redirect, authError='An account already exists with provided email address')
def get_redirect_url(self): badgr_app = get_session_badgr_app(self.request) if badgr_app is not None: return set_url_query_params(badgr_app.ui_connect_success_redirect)
def authentication_error(self, request, provider_id, error=None, exception=None, extra_context=None): badgr_app = get_session_badgr_app(self.request) redirect_url = "{url}?authError={message}".format( url=badgr_app.ui_login_redirect, message=urllib.quote("Authentication error")) raise ImmediateHttpResponse(HttpResponseRedirect(redirect_to=redirect_url))