private async void RefreshTokenButton_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(RefreshTokenTextBox.Text)) { MessageBox.Show("You need to enter a refresh token first in the refresh token field in order to be able to retrieve a new access token based on a refresh token.", "OneDrive API", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } // Get a new access token based on the refresh token entered in the textbox OneDriveApi = await OneDriveApi.GetOneDriveApiFromRefreshToken(ClientId, ClientSecret, RefreshTokenTextBox.Text); if (OneDriveApi.AccessToken != null) { // Display the information of the new access token in the textboxes AccessTokenTextBox.Text = OneDriveApi.AccessToken.AccessToken; RefreshTokenTextBox.Text = OneDriveApi.AccessToken.RefreshToken; AccessTokenValidTextBox.Text = OneDriveApi.AccessTokenValidUntil.HasValue ? OneDriveApi.AccessTokenValidUntil.Value.ToString("dd-MM-yyyy HH:mm:ss") : "Not valid"; } }
/// <summary> /// Returns an active OneDriveApi instance. If a RefreshToken is available, it will set up an instance based on that, otherwise it will show the login dialog /// </summary> /// <param name="databaseConfig">Configuration of the KeePass database</param> /// <param name="oneDriveClientId">ClientID to get access to OneDrive</param> /// <param name="oneDriveClientSecret">ClientSecret to get access to OneDrive</param> /// <returns>Active OneDrive instance or NULL if unable to get an authenticated instance</returns> public static async Task <OneDriveApi> GetOneDriveApi(Configuration databaseConfig, string oneDriveClientId, string oneDriveClientSecret) { if (string.IsNullOrEmpty(databaseConfig.RefreshToken)) { var oneDriveAuthenticateForm = new OneDriveAuthenticateForm(oneDriveClientId, oneDriveClientSecret); var result = oneDriveAuthenticateForm.ShowDialog(); if (result != DialogResult.OK) { return(null); } // Check if we already know where to store the Refresh Token for this database if (!databaseConfig.RefreshTokenStorage.HasValue) { // We don't know yet where the Refresh Token for this database should be stored, ask the user to choose var oneDriveRefreshTokenStorageForm = new OneDriveRefreshTokenStorageDialog(databaseConfig); oneDriveRefreshTokenStorageForm.ShowDialog(); } // Save the configuration so we keep the Refresh Token var oneDriveApi = oneDriveAuthenticateForm.OneDriveApi; databaseConfig.RefreshToken = oneDriveApi.AccessToken.RefreshToken; Configuration.Save(); return(oneDriveApi); } try { return(await OneDriveApi.GetOneDriveApiFromRefreshToken(oneDriveClientId, oneDriveClientSecret, databaseConfig.RefreshToken)); } catch (WebException) { // Occurs if no connection can be made with the OneDrive service. It will be handled properly in the calling code. return(null); } }