Ejemplo n.º 1
0
        public async Task DoGoogleLogin()
        {
            _client.AuthType = AuthType.Google;

            GoogleLogin.TokenResponseModel tokenResponse = null;
            if (_client.Settings.GoogleRefreshToken != string.Empty)
            {
                tokenResponse = await GoogleLogin.GetAccessToken(_client.Settings.GoogleRefreshToken);

                _client.AuthToken = tokenResponse?.id_token;
            }

            if (_client.AuthToken == null)
            {
                var deviceCode = await GoogleLogin.GetDeviceCode();

                GoogleDeviceCodeEvent?.Invoke(deviceCode.user_code, deviceCode.verification_url);
                tokenResponse = await GoogleLogin.GetAccessToken(deviceCode);

                _client.Settings.GoogleRefreshToken = tokenResponse?.refresh_token;
                _client.AuthToken = tokenResponse?.id_token;
            }

            await SetServer();
        }
        public async Task <string> GetAccessToken()
        {
            TokenResponseModel tokenResponse;

            if (!string.IsNullOrEmpty(_settings.GoogleRefreshToken))
            {
                tokenResponse = await GetAccessToken(_settings.GoogleRefreshToken);

                if (!string.IsNullOrEmpty(tokenResponse?.id_token))
                {
                    return(tokenResponse?.id_token);
                }
            }

            var deviceCode = await GetDeviceCode();

            if (deviceCode?.user_code == null || deviceCode?.verification_url == null)
            {
                throw new GoogleOfflineException();
            }

            GoogleDeviceCodeEvent?.Invoke(deviceCode.user_code, deviceCode.verification_url);
            tokenResponse = await GetAccessToken(deviceCode);

            _settings.GoogleRefreshToken = tokenResponse?.refresh_token;
            return(tokenResponse?.id_token);
        }