Skip to content

Commit

Permalink
Cleanup of Credential Android code and added exception result if the …
Browse files Browse the repository at this point in the history
…clientCreateCredentialResult is null
  • Loading branch information
dinisvieira committed Apr 3, 2024
1 parent e30e68b commit 9ae67b3
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
18 changes: 10 additions & 8 deletions src/App/Platforms/Android/Autofill/CredentialHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Android.Content;
using Android.OS;
using AndroidX.Credentials;
using AndroidX.Credentials.Exceptions;
using AndroidX.Credentials.Provider;
using AndroidX.Credentials.WebAuthn;
using Bit.Core.Abstractions;
Expand All @@ -19,7 +20,6 @@ public static class CredentialHelpers
BeginGetPublicKeyCredentialOption option, Context context, bool hasVaultBeenUnlockedInThisTransaction)
{
var passkeyEntries = new List<CredentialEntry>();

var requestOptions = new PublicKeyCredentialRequestOptions(option.RequestJson);

var authenticator = Bit.Core.Utilities.ServiceContainer.Resolve<IFido2AuthenticatorService>();
Expand Down Expand Up @@ -69,14 +69,13 @@ public static async Task CreateCipherPasskeyAsync(ProviderCreateCredentialReques
{
Id = credentialCreationOptions.User.GetId(),
Name = credentialCreationOptions.User.Name,
DisplayName = credentialCreationOptions.User.DisplayName,
//Icon = //TODO: Is Icon needed?
DisplayName = credentialCreationOptions.User.DisplayName
};

var pubKeyCredParams = new List<Core.Utilities.Fido2.PublicKeyCredentialParameters>();
foreach (var pubKeyCredParam in credentialCreationOptions.PubKeyCredParams)
{
pubKeyCredParams.Add(new Core.Utilities.Fido2.PublicKeyCredentialParameters() { Alg = Convert.ToInt32(pubKeyCredParam.Alg), Type = pubKeyCredParam.Type }); //TODO: Can we assume Alg is never outside int range?
pubKeyCredParams.Add(new Core.Utilities.Fido2.PublicKeyCredentialParameters() { Alg = Convert.ToInt32(pubKeyCredParam.Alg), Type = pubKeyCredParam.Type });
}

var excludeCredentials = new List<Core.Utilities.Fido2.PublicKeyCredentialDescriptor>();
Expand All @@ -92,7 +91,6 @@ public static async Task CreateCipherPasskeyAsync(ProviderCreateCredentialReques
RequireResidentKey = credentialCreationOptions.AuthenticatorSelection.RequireResidentKey
};

//TODO: Change to something else or handle overflow exception?
var timeout = Convert.ToInt32(credentialCreationOptions.Timeout);

var credentialCreateParams = new Bit.Core.Utilities.Fido2.Fido2ClientCreateCredentialParams()
Expand All @@ -106,15 +104,19 @@ public static async Task CreateCipherPasskeyAsync(ProviderCreateCredentialReques
Attestation = credentialCreationOptions.Attestation,
AuthenticatorSelection = authenticatorSelection,
ExcludeCredentials = excludeCredentials.ToArray(),
//Extensions = //TODO: Do we need to handle Extensions?
SameOriginWithAncestors = true //TODO: Where to get value? Or logic to set?
//Extensions = // Can be improved later to add support for 'credProps'
SameOriginWithAncestors = true
};

var fido2MediatorService = ServiceContainer.Resolve<IFido2MediatorService>();
var clientCreateCredentialResult = await fido2MediatorService.CreateCredentialAsync(credentialCreateParams);
if (clientCreateCredentialResult == null)
{
//TODO: Cancel process?
var resultErrorIntent = new Intent();
PendingIntentHandler.SetCreateCredentialException(resultErrorIntent, new CreateCredentialUnknownException());
activity.SetResult(Result.Ok, resultErrorIntent);
activity.Finish();
return;
}

var transportsArray = new JSONArray();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public class CredentialProviderService : AndroidX.Credentials.Provider.Credentia
}
else
{
callback.OnError("Error creating credential"); //TODO: Improve message
callback.OnError("Error creating credential");
}
}

Expand Down Expand Up @@ -70,7 +70,7 @@ public class CredentialProviderService : AndroidX.Credentials.Provider.Credentia
catch (GetCredentialException e)
{
_logger.Value.Exception(e);
callback.OnError(e.ErrorMessage ?? "Error getting credentials"); //TODO: Improve message
callback.OnError(e.ErrorMessage ?? "Error getting credentials");
}
catch (Exception e)
{
Expand All @@ -86,7 +86,7 @@ public class CredentialProviderService : AndroidX.Credentials.Provider.Credentia

if (request is BeginCreatePasswordCredentialRequest beginCreatePasswordCredentialRequest)
{
//TODO: Is the Create Password needed?
//This flow can be used if Password flow needs to be implemented
throw new NotImplementedException();
//return HandleCreatePasswordQuery(beginCreatePasswordCredentialRequest);
}
Expand Down

0 comments on commit 9ae67b3

Please sign in to comment.