예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
 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))
예제 #4
0
 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)
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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
예제 #8
0
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()
예제 #9
0
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)
예제 #10
0
파일: utils.py 프로젝트: yeti/YAK-server
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)
예제 #11
0
def load_backend(strategy, name, redirect_uri):
    Backend = get_backend(BACKENDS, name)
    return Backend(strategy, redirect_uri)
예제 #12
0
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)
예제 #13
0
def load_backend(strategy, name, redirect_uri):
    Backend = get_backend(BACKENDS, name)
    return Backend(strategy, redirect_uri)
예제 #14
0
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)
예제 #15
0
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)
예제 #16
0
def load_backend(strategy, name, redirect_uri):
    Backend = get_backend(settings.AUTHENTICATION_BACKENDS, name)
    return Backend(strategy, redirect_uri)
예제 #17
0
 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)
예제 #18
0
    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
예제 #19
0
def get_backend_class(backend_name):
    return get_backend(settings.AUTHENTICATION_BACKENDS, backend_name)
예제 #20
0
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)
예제 #21
0
 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)
예제 #22
0
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)