/// <summary> /// Methode qui permet de rafraichir le Token depuis l'access Token /// </summary> /// <param name="refresh_token"></param> /// <returns></returns> public async Task<bool> RefreshToken(string refresh_token) { string postData = string.Format("client_id={0}&client_secret={1}&refresh_token={2}&grant_type=refresh_token", ClientID, ClientSecret, refresh_token); StringContent content = new StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded"); Stream result = await Post("https://accounts.google.com/o/oauth2/token", content, false); if (result != null) { DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Token)); AccessToken = (Token)deserializer.ReadObject(result); AccessToken.RefreshToken = refresh_token; FileManager.WriteFileAsync(FILE_NAME, CryptographicManager.Encrypt(AccessToken.RefreshToken, KEY)); return true; } return false; }
/// <summary> /// Methode qui supprime le token /// </summary> public async void CleanToken() { bool tok=false; try { string encryptedText = await FileManager.ReadFile(FILE_NAME); string decryptedText = CryptographicManager.Decrypt(encryptedText, KEY); if (!String.IsNullOrEmpty(encryptedText)) tok = true; } catch (Exception) { } if (tok) { FileManager.RemoveFileAsync(FILE_NAME); AccessToken = null; } }
/// <summary> /// Methode qui permet de récupérer un nouveau TOKEN /// </summary> /// <returns></returns> public async Task<bool> LoadToken() { //Step 1. Create a Request and Callback Uri for the Authentication operation Uri requestUri = new Uri(string.Format("{0}?scope={1}&redirect_uri={2}&response_type={3}&client_id={4}",googleUri, Scope, redirect_uri, response_type, ClientID), UriKind.RelativeOrAbsolute); Uri callbackUri = new Uri(redirect_uri, UriKind.RelativeOrAbsolute); //Step 2. Initialize a Authentication operation using WebAuthenticationBroker WebAuthenticationResult webResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None,requestUri, callbackUri); switch (webResult.ResponseStatus) { case WebAuthenticationStatus.ErrorHttp: GoogleErrorOccured(webResult.ResponseData); break; case WebAuthenticationStatus.Success: string code = webResult.ResponseData.Split(new string[] { "code=" }, StringSplitOptions.RemoveEmptyEntries)[1]; string postData = string.Format("client_id={0}&client_secret={1}&code={2}&redirect_uri={3}&grant_type=authorization_code", ClientID, ClientSecret, code, redirect_uri); StringContent content = new StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded"); Stream result = await Post("https://accounts.google.com/o/oauth2/token", content, false); if (result != null) { DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Token)); byte[] arrayMessage = new byte[result.Length]; result.Read(arrayMessage, 0, arrayMessage.Length); var message = Encoding.UTF8.GetString(arrayMessage, 0, arrayMessage.Length); System.Diagnostics.Debug.WriteLine(message); result.Position = 0; AccessToken = (Token)deserializer.ReadObject(result); FileManager.WriteFileAsync(FILE_NAME, CryptographicManager.Encrypt(AccessToken.RefreshToken, KEY)); return true; } break; case WebAuthenticationStatus.UserCancel: //The User selected to cancel the Authentication process break; default: break; } return false; }