def load_backend(strategy, name, redirect_uri): backends = social_pyramid.utils.get_helper('AUTHENTICATION_BACKENDS') Backend = get_backend(backends, name) if issubclass(Backend, GenericAuth): return Backend(strategy=strategy, redirect_uri=redirect_uri, name=name) else: return Backend(strategy=strategy, redirect_uri=redirect_uri)
def get_queryset(self): provider = self.request.query_params.get('provider', None) user_social_auth = self.request.user.social_auth.filter(provider=provider).first() if user_social_auth: # `.first()` doesn't fail, it just returns None backend = get_backend(settings.AUTHENTICATION_BACKENDS, provider) friends = backend.get_friends(user_social_auth) return friends else: raise AuthenticationFailed("User is not authenticated with {}".format(provider))
def get_backend_instance(self, name=None, strategy=None): try: backend = get_backend( backends=settings.AUTHENTICATION_BACKENDS, name=name ) except MissingBackend: raise Http404 return backend(strategy=strategy)
def auth(request, provider): redirect_uri = reverse("social:complete", args=(provider, )) request.social_strategy = DjangoStrategy(DjangoStorage, request) try: backend_cls = get_backend(BACKENDS, provider) backend_obj = backend_cls(request.social_strategy, redirect_uri) except MissingBackend: raise Http404('Backend not found') return do_auth(backend_obj, redirect_name=REDIRECT_FIELD_NAME)
def disconnect(request, provider, association_id=None): request.social_strategy = DjangoStrategy(DjangoStorage, request) try: backend_cls = get_backend(BACKENDS, provider) backend_obj = backend_cls(request.social_strategy, "") except MissingBackend: raise Http404('Backend not found') return do_disconnect(backend_obj, request.user, association_id, redirect_name=REDIRECT_FIELD_NAME)
def OAuthRedirectAuthorizationBackend(backend, code): """ Authorization Information for the backends to the redirect feature :param backend: :param code: :return: data in json including: - code - redirect_uri - provider ( backend ) """ if code is None: try: backend_class = get_backend(settings.AUTHENTICATION_BACKENDS, backend) authorization_url = backend_class.AUTHORIZATION_URL url_parameters = { "redirect_uri": ("http://{}{}").format( Site.objects.get_current().domain, reverse.reverse( "rest-social-email-auth:user-social-login", args=(backend,) ), ), "response_type": backend_class.RESPONSE_TYPE, "scope": [ scope for scope in backend_class.DEFAULT_SCOPE if scope != "openid" ][0], "client_id": config( "SOCIAL_AUTH_" + backend.upper().replace("-", "_") + "_KEY" ), } final_url = authorization_url + "?" + urllib.parse.urlencode(url_parameters) except: raise CustomException( code=status.HTTP_501_NOT_IMPLEMENTED, detail=__("Missing Backend") ) return redirect(final_url) data = { "code": code, "redirect_uri": ("http://{}{}").format( Site.objects.get_current().domain, reverse.reverse( "rest-social-email-auth:user-social-login", args=(backend,) ), ), "provider": backend, } return data
def auth(request, social_name): logger.debug("accounts.auth:start.social_name=%s", social_name) strategy = load_strategy(request) Backend = get_backend(AUTHENTICATION_BACKENDS, social_name) redirect_uri = reverse('accounts:complete', args=[social_name]) logger.debug("redirect_uri=%s", redirect_uri) backend = Backend(strategy, redirect_uri) redirect_name = 'next' # Save any defined next value into session data = backend.strategy.request_data(merge=False) # Save extra data into session. for field_name in backend.setting('FIELDS_STORED_IN_SESSION', []): if field_name in data: backend.strategy.session_set(field_name, data[field_name]) if redirect_name in data: # Check and sanitize a user-defined GET/POST next field value redirect_uri = data[redirect_name] if backend.setting('SANITIZE_REDIRECTS', True): allowed_hosts = backend.setting('ALLOWED_REDIRECT_HOSTS', []) + \ [backend.strategy.request_host()] redirect_uri = sanitize_redirect(allowed_hosts, redirect_uri) backend.strategy.session_set( redirect_name, redirect_uri or backend.setting('LOGIN_REDIRECT_URL')) logger.debug("backend.start") return backend.start()
def load_backend(strategy, name, redirect_uri): _s = get_helper('AUTHENTICATION_BACKENDS') backends = _s if isinstance(_s, (tuple, list, set)) else aslist(_s) Backend = get_backend(backends, name) return Backend(strategy=strategy, redirect_uri=redirect_uri)
def post_social_media(user_social_auth, social_obj): backend = get_backend(settings.AUTHENTICATION_BACKENDS, user_social_auth.provider) backend.post(user_social_auth, social_obj)
def load_backend(strategy, name, redirect_uri): Backend = get_backend(BACKENDS, name) return Backend(strategy, redirect_uri)
def load_backend(strategy, name, redirect_uri): Backend = get_backend( current.plugin_social_auth.plugin.SOCIAL_AUTH_AUTHENTICATION_BACKENDS, name) return Backend(strategy, redirect_uri)
def load_backend(strategy, name, redirect_uri): Backend = get_backend(current.plugin_social_auth.plugin.SOCIAL_AUTH_AUTHENTICATION_BACKENDS, name) return Backend(strategy, redirect_uri)
def load_backend(strategy, name, redirect_uri): Backend = get_backend(settings.AUTHENTICATION_BACKENDS, name) return Backend(strategy, redirect_uri)
def _load_backend(self, strategy, redirect_uri): backends = self._get_helper('AUTHENTICATION_BACKENDS') backend = get_backend(backends, BACKENDS_NAME[self.config['provider']]) return backend(strategy, redirect_uri)
def get_redirect_url(self, *args, **kwargs): strategy = load_strategy(self.request) Backend = get_backend(AUTHENTICATION_BACKENDS, kwargs.get("social_name")) redirect_uri = reverse('accounts:complete', args=[kwargs.get("social_name")]) backend = Backend(strategy, redirect_uri) try: backend.process_error(backend.data) except (AuthFailed, AuthCanceled): logger.warning("認証失敗") return reverse('accounts:index') logger.debug("backend.data=%s", backend.data) state = backend.validate_state() data, params = None, None if backend.ACCESS_TOKEN_METHOD == 'GET': params = backend.auth_complete_params(state) else: data = backend.auth_complete_params(state) response = backend.request_access_token( backend.access_token_url(), data=data, params=params, headers=backend.auth_headers(), auth=backend.auth_complete_credentials(), method=backend.ACCESS_TOKEN_METHOD) try: backend.process_error(response) except (AuthFailed, AuthCanceled): logger.warning("認証失敗") return reverse('accounts:index') logger.debug("response=%s", response) user_data_response = backend.user_data(response["access_token"]) user_details = backend.get_user_details(user_data_response) logger.debug("user_details=%s", user_details) self.request.session['social_name'] = kwargs.get("social_name") # self.request.session['username'] = user_details["username"] # self.request.session['email'] = user_details["email"] # self.request.session['fullname'] = user_details["fullname"] # self.request.session['first_name'] = user_details["first_name"] # self.request.session['last_name'] = user_details["last_name"] # OPEN_IDのIDをログインユーザを特定する一意キーとする。 pkey = backend.get_user_id(user_details, user_data_response) if not pkey: logger.warning("認証失敗") return reverse('accounts:index') self.request.session['pkey'] = pkey # 一意キーをハッシュ化したものをユーザダイジェストとする。 # 一意キーはメールアドレスだったりするので秘匿対象 # ハッシュを破られないように注意 user_digest = hmac.new(pkey.encode("UTF-8"), SECRET_KEY.encode("UTF-8"), hashlib.sha512).hexdigest() self.request.session['user_digest'] = user_digest client_ip, is_routable = get_client_ip(self.request) logger.info("ログイン情報:social_name=%s / user_digest=%s / client_ip=%s", self.request.session['social_name'], self.request.session['user_digest'], client_ip) return_url = self.request.session.get('last_request_url') last_request_url = return_url if return_url else "/" return last_request_url
def get_backend_class(backend_name): return get_backend(settings.AUTHENTICATION_BACKENDS, backend_name)
def load_backend(strategy, name, redirect_uri): backends = get_helper('AUTHENTICATION_BACKENDS') Backend = get_backend(backends, name) return Backend(strategy=strategy, redirect_uri=redirect_uri)
def load_backend(request_handler, strategy, name, redirect_uri): backends = get_helper(request_handler, 'AUTHENTICATION_BACKENDS') Backend = get_backend(backends, name) return Backend(strategy, redirect_uri)