def oauth2callback(self, view_func):
        """
        Decorator for OAuth2 callback. Calls `GoogleLogin.login` then
        passes results to `view_func`.
        """

        @wraps(view_func)
        def decorated(*args, **kwargs):
            params = {}

            # Check sig
            if 'state' in request.args:
                params.update(**self.parse_state(request.args.get('state')))
                if params.pop('sig', None) != make_secure_token(**params):
                    return self.login_manager.unauthorized()

            code = request.args.get('code')

            # Web server flow
            if code:
                token = self.exchange_code(
                    code,
                    url_for(
                        request.endpoint,
                        _external=True,
                        _scheme=self.redirect_scheme,
                    ),
                )
                userinfo = self.get_userinfo(token['access_token'])
                params.update(token=token, userinfo=userinfo)

            # Browser flow
            else:
                if params:
                    params.update(dict(request.args.items()))
                else:
                    return '''
                    <script>
                      window.onload = function() {
                        location.href = '?' + window.location.hash.substr(1);
                      };
                    </script>
                    '''

            return view_func(**params)

        return decorated
def oauth2callback ( self , view_func ) : @ wraps ( view_func ) def decorated ( * args , ** kwargs ) : params = { } if 'state' in request . args : params . update ( ** self . parse_state ( request . args . get ( 'state' ) ) ) if params . pop ( 'sig' , None ) != make_secure_token ( ** params ) : return self . login_manager . unauthorized ( ) code = request . args . get ( 'code' ) if code : token = self . exchange_code ( code , url_for ( request . endpoint , _external = True , _scheme = self . redirect_scheme , ) , ) userinfo = self . get_userinfo ( token [ 'access_token' ] ) params . update ( token = token , userinfo = userinfo ) else : if params : params . update ( dict ( request . args . items ( ) ) ) else : return '''
                    <script>
                      window.onload = function() {
                        location.href = '?' + window.location.hash.substr(1);
                      };
                    </script>
                    ''' return view_func ( ** params ) return decorated
Decorator for OAuth2 callback. Calls `GoogleLogin.login` then
        passes results to `view_func`.