fix for OneDrive file storage unnecessarily prompting for login, closes https://github.com/PhilippC/keepass2android/issues/1038
This commit is contained in:
@@ -322,20 +322,37 @@ namespace keepass2android.Io
|
|||||||
|
|
||||||
private async Task<IGraphServiceClient> TryGetMsGraphClient(String path, bool tryConnect)
|
private async Task<IGraphServiceClient> TryGetMsGraphClient(String path, bool tryConnect)
|
||||||
{
|
{
|
||||||
|
|
||||||
String userId = OneDrive2ItemLocation<OneDrive2PrefixContainerType>.FromString(path).User.Id;
|
String userId = OneDrive2ItemLocation<OneDrive2PrefixContainerType>.FromString(path).User.Id;
|
||||||
|
|
||||||
|
logDebug("TryGetMsGraphClient for " + userId);
|
||||||
if (mClientByUser.ContainsKey(userId))
|
if (mClientByUser.ContainsKey(userId))
|
||||||
{
|
{
|
||||||
|
logDebug("TryGetMsGraphClient found user " + userId);
|
||||||
GraphServiceClientWithState clientWithState = mClientByUser[userId];
|
GraphServiceClientWithState clientWithState = mClientByUser[userId];
|
||||||
if (!(clientWithState.RequiresUserInteraction || (clientWithState.TokenExpiryDate < DateTime.Now) || (clientWithState.Client == null)))
|
if (!(clientWithState.RequiresUserInteraction || (clientWithState.TokenExpiryDate < DateTime.Now) ||
|
||||||
|
(clientWithState.Client == null)))
|
||||||
|
{
|
||||||
|
logDebug("TryGetMsGraphClient returning client");
|
||||||
return clientWithState.Client;
|
return clientWithState.Client;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logDebug("not returning client because " + clientWithState.RequiresUserInteraction + " " +
|
||||||
|
(clientWithState.TokenExpiryDate < DateTime.Now) + " " + (clientWithState.Client == null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (tryConnect)
|
if (tryConnect)
|
||||||
{
|
{
|
||||||
|
logDebug("trying to connect...");
|
||||||
if (await TryLoginSilent(path) != null)
|
if (await TryLoginSilent(path) != null)
|
||||||
{
|
{
|
||||||
|
logDebug("trying to connect ok");
|
||||||
return mClientByUser[userId].Client;
|
return mClientByUser[userId].Client;
|
||||||
}
|
}
|
||||||
|
logDebug("trying to connect failed");
|
||||||
}
|
}
|
||||||
|
logDebug("TryGetMsGraphClient for " + userId + " returns null");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,7 +384,7 @@ namespace keepass2android.Io
|
|||||||
if (authenticationResult.Account == null)
|
if (authenticationResult.Account == null)
|
||||||
throw new Exception("authenticationResult.Account == null!");
|
throw new Exception("authenticationResult.Account == null!");
|
||||||
mClientByUser[authenticationResult.Account.HomeAccountId.Identifier] = clientWithState;
|
mClientByUser[authenticationResult.Account.HomeAccountId.Identifier] = clientWithState;
|
||||||
|
logDebug("buildClient ok.");
|
||||||
return clientWithState.Client;
|
return clientWithState.Client;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,7 +392,9 @@ namespace keepass2android.Io
|
|||||||
|
|
||||||
private void logDebug(string str)
|
private void logDebug(string str)
|
||||||
{
|
{
|
||||||
Log.Debug("KP2A", str);
|
#if DEBUG
|
||||||
|
Log.Debug("KP2A", "OneDrive2: " + str);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -858,14 +877,17 @@ namespace keepass2android.Io
|
|||||||
|
|
||||||
public async void OnStart(IFileStorageSetupActivity activity)
|
public async void OnStart(IFileStorageSetupActivity activity)
|
||||||
{
|
{
|
||||||
|
logDebug("OneDrive2.OnStart");
|
||||||
if (activity.ProcessName.Equals(FileStorageSetupDefs.ProcessNameFileUsageSetup))
|
if (activity.ProcessName.Equals(FileStorageSetupDefs.ProcessNameFileUsageSetup))
|
||||||
activity.State.PutString(FileStorageSetupDefs.ExtraPath, activity.Ioc.Path);
|
activity.State.PutString(FileStorageSetupDefs.ExtraPath, activity.Ioc.Path);
|
||||||
string rootPathForUser = await TryLoginSilent(activity.Ioc.Path);
|
string rootPathForUser = await TryLoginSilent(activity.Ioc.Path);
|
||||||
if (rootPathForUser != null)
|
if (rootPathForUser != null)
|
||||||
{
|
{
|
||||||
|
logDebug("rootPathForUser not null");
|
||||||
FinishActivityWithSuccess(activity, rootPathForUser);
|
FinishActivityWithSuccess(activity, rootPathForUser);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
logDebug("rootPathForUser null");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -893,13 +915,14 @@ namespace keepass2android.Io
|
|||||||
|
|
||||||
private async Task<string> TryLoginSilent(string iocPath)
|
private async Task<string> TryLoginSilent(string iocPath)
|
||||||
{
|
{
|
||||||
|
logDebug("Login Silent for " + iocPath);
|
||||||
IAccount account = null;
|
IAccount account = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
if (IsConnected(iocPath))
|
if (IsConnected(iocPath))
|
||||||
{
|
{
|
||||||
|
logDebug("Login Silent ok, connected");
|
||||||
return iocPath;
|
return iocPath;
|
||||||
}
|
}
|
||||||
String userId = OneDrive2ItemLocation<OneDrive2PrefixContainerType>.FromString(iocPath).User?.Id;
|
String userId = OneDrive2ItemLocation<OneDrive2PrefixContainerType>.FromString(iocPath).User?.Id;
|
||||||
@@ -928,7 +951,9 @@ namespace keepass2android.Io
|
|||||||
/*User me = await graphClient.Me.Request().WithForceRefresh(true).GetAsync();
|
/*User me = await graphClient.Me.Request().WithForceRefresh(true).GetAsync();
|
||||||
logDebug("received name " + me.DisplayName);*/
|
logDebug("received name " + me.DisplayName);*/
|
||||||
|
|
||||||
return BuildRootPathForUser(authResult);
|
var rootFolder = BuildRootPathForUser(authResult);
|
||||||
|
logDebug("Found RootPath for user");
|
||||||
|
return rootFolder;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (MsalUiRequiredException ex)
|
catch (MsalUiRequiredException ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user