Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 174 additions & 0 deletions src/CheckoutSdk/Authentication/AuthenticationClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
using Checkout.Authentication.Standalone.GETSessionsId.Responses.GetSessionDetailsResponseOk;
using Checkout.Authentication.Standalone.POSTSessions.Requests.RequestASessionRequest;
using Checkout.Authentication.Standalone.POSTSessions.Responses;
using Checkout.Authentication.Standalone.POSTSessions.Responses.RequestASessionResponseAccepted;
using Checkout.Authentication.Standalone.POSTSessions.Responses.RequestASessionResponseCreated;
using Checkout.Authentication.Standalone.POSTSessionsIdComplete.Responses.CompleteASessionResponseNoContent;
using Checkout.Authentication.Standalone.PUTSessionsIdCollectData.Requests;
using Checkout.Authentication.Standalone.PUTSessionsIdCollectData.Responses.UpdateASessionResponseOk;
using Checkout.Authentication.Standalone.PUTSessionsIdIssuerFingerprint.Requests.
UpdateSessionThreeDSMethodCompletionIndicatorRequest;
using Checkout.Authentication.Standalone.PUTSessionsIdIssuerFingerprint.Responses.
UpdateSessionThreedsMethodCompletionIndicatorResponseOk;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Checkout.Authentication
{
public class AuthenticationClient : AbstractClient, IAuthenticationClient
{
private const string SessionsPath = "sessions";
private const string CollectDataPath = "collect-data";
private const string CompletePath = "complete";
private const string IssuerFingerprintPath = "issuer-fingerprint";
private const string SessionIdPath = "sessionId";

private static readonly IDictionary<int, Type> RequestASessionResponseMappings = new Dictionary<int, Type>();

static AuthenticationClient()
{
RequestASessionResponseMappings[201] = typeof(RequestASessionResponseCreated);
RequestASessionResponseMappings[202] = typeof(RequestASessionResponseAccepted);
}

public AuthenticationClient(IApiClient apiClient, CheckoutConfiguration configuration)
: base(apiClient, configuration, SdkAuthorizationType.OAuth)
{
}

public async Task<RequestASessionResponse> RequestASession(RequestASessionRequest requestASessionRequest,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("requestASessionRequest", requestASessionRequest);
var resource = await ApiClient.Post<HttpMetadata>(SessionsPath, SdkAuthorization(),
RequestASessionResponseMappings,
requestASessionRequest, cancellationToken);

switch (resource)
{
case RequestASessionResponseCreated requestASessionResponseCreated:
return new RequestASessionResponse(requestASessionResponseCreated);

case RequestASessionResponseAccepted requestASessionResponseAccepted:
return new RequestASessionResponse(requestASessionResponseAccepted);

default:
throw new InvalidOperationException("Unexpected mapping type " + resource.GetType());
}
}

public async Task<GetSessionDetailsResponseOk> GetSessionDetails(string sessionId,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionId", sessionId);
return await GetSessionDetails(sessionId, SdkAuthorization(), cancellationToken);
}

public async Task<GetSessionDetailsResponseOk> GetSessionDetails(string sessionSecret, string sessionId,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionSecret", sessionSecret, "sessionId", sessionId);
return await GetSessionDetails(sessionId, SessionSecretAuthorization(sessionSecret), cancellationToken);
}

public async Task<UpdateASessionResponseOk> UpdateASession(string sessionId,
AbstractUpdateASessionRequest updateASessionRequest,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionId", sessionId, "updateASessionRequest", updateASessionRequest);
return await UpdateASession(sessionId, updateASessionRequest, SdkAuthorization(), cancellationToken);
}

public async Task<UpdateASessionResponseOk> UpdateASession(string sessionSecret, string sessionId,
AbstractUpdateASessionRequest updateASessionRequest, CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionSecret", sessionSecret, "sessionId", sessionId,
"updateASessionRequest",
updateASessionRequest);
return await UpdateASession(sessionId, updateASessionRequest, SessionSecretAuthorization(sessionSecret),
cancellationToken);
}

public async Task<CompleteASessionResponseNoContent> CompleteASession(string sessionId,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionId", sessionId);
return await CompleteASession(sessionId, SdkAuthorization(), cancellationToken);
}

public async Task<CompleteASessionResponseNoContent> CompleteASession(string sessionSecret, string sessionId,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionSecret", sessionSecret, "sessionId", sessionId);
return await CompleteASession(sessionId, SessionSecretAuthorization(sessionSecret), cancellationToken);
}

public Task<UpdateSessionThreedsMethodCompletionIndicatorResponseOk>
UpdateSessionThreedsMethodCompletionIndicator(string sessionId,
UpdateSessionThreedsMethodCompletionIndicatorRequest
updateSessionThreedsMethodCompletionIndicatorRequest,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionId", sessionId, "updateSessionThreedsMethodCompletionIndicatorRequest",
updateSessionThreedsMethodCompletionIndicatorRequest);
return UpdateSessionThreedsMethodCompletionIndicator(sessionId,
updateSessionThreedsMethodCompletionIndicatorRequest, SdkAuthorization(),
cancellationToken);
}

public Task<UpdateSessionThreedsMethodCompletionIndicatorResponseOk>
UpdateSessionThreedsMethodCompletionIndicator(string sessionSecret,
string sessionId,
UpdateSessionThreedsMethodCompletionIndicatorRequest
updateSessionThreedsMethodCompletionIndicatorRequest,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams("sessionSecret", sessionSecret, "sessionId",
sessionId, "updateSessionThreedsMethodCompletionIndicatorRequest",
updateSessionThreedsMethodCompletionIndicatorRequest);
return UpdateSessionThreedsMethodCompletionIndicator(sessionId,
updateSessionThreedsMethodCompletionIndicatorRequest,
SessionSecretAuthorization(sessionSecret), cancellationToken);
}

private async Task<GetSessionDetailsResponseOk> GetSessionDetails(string sessionId, SdkAuthorization sdkAuthorization,
CancellationToken cancellationToken = default)
{
CheckoutUtils.ValidateParams(SessionIdPath, sessionId, "sdkAuthorization", sdkAuthorization);
return await ApiClient.Get<GetSessionDetailsResponseOk>(BuildPath(SessionsPath, sessionId), sdkAuthorization,
cancellationToken);
}

private async Task<UpdateASessionResponseOk> UpdateASession(string sessionId, AbstractUpdateASessionRequest updateASessionRequest,
SdkAuthorization sdkAuthorization,
CancellationToken cancellationToken = default)
{
return await ApiClient.Put<UpdateASessionResponseOk>(BuildPath(SessionsPath, sessionId, CollectDataPath),
sdkAuthorization, updateASessionRequest, cancellationToken);
}

private async Task<CompleteASessionResponseNoContent> CompleteASession(string sessionId, SdkAuthorization sdkAuthorization,
CancellationToken cancellationToken = default)
{
return await ApiClient.Post<CompleteASessionResponseNoContent>(BuildPath(SessionsPath, sessionId, CompletePath),
sdkAuthorization, null,
cancellationToken, null);
}

private async Task<UpdateSessionThreedsMethodCompletionIndicatorResponseOk> UpdateSessionThreedsMethodCompletionIndicator(
string sessionId, UpdateSessionThreedsMethodCompletionIndicatorRequest updateSessionThreedsMethodCompletionIndicatorRequest,
SdkAuthorization sdkAuthorization, CancellationToken cancellationToken = default)
{
return await ApiClient.Put<UpdateSessionThreedsMethodCompletionIndicatorResponseOk>(
BuildPath(SessionsPath, sessionId, IssuerFingerprintPath), sdkAuthorization,
updateSessionThreedsMethodCompletionIndicatorRequest, cancellationToken);
}

private static SdkAuthorization SessionSecretAuthorization(string sessionSecret)
{
return new SessionSecretSdkCredentials(sessionSecret).GetSdkAuthorization(SdkAuthorizationType.Custom);
}
}
}
52 changes: 52 additions & 0 deletions src/CheckoutSdk/Authentication/IAuthenticationClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using Checkout.Authentication.Standalone.GETSessionsId.Responses.GetSessionDetailsResponseOk;
using Checkout.Authentication.Standalone.POSTSessions.Requests.RequestASessionRequest;
using Checkout.Authentication.Standalone.POSTSessions.Responses;
using Checkout.Authentication.Standalone.POSTSessionsIdComplete.Responses.CompleteASessionResponseNoContent;
using Checkout.Authentication.Standalone.PUTSessionsIdCollectData.Requests;
using Checkout.Authentication.Standalone.PUTSessionsIdCollectData.Responses.UpdateASessionResponseOk;
using Checkout.Authentication.Standalone.PUTSessionsIdIssuerFingerprint.Requests.
UpdateSessionThreeDSMethodCompletionIndicatorRequest;
using Checkout.Authentication.Standalone.PUTSessionsIdIssuerFingerprint.Responses.
UpdateSessionThreedsMethodCompletionIndicatorResponseOk;
using System.Threading;
using System.Threading.Tasks;

namespace Checkout.Authentication
{
public interface IAuthenticationClient
{
Task<RequestASessionResponse> RequestASession(RequestASessionRequest requestASessionRequest,
CancellationToken cancellationToken = default);

Task<GetSessionDetailsResponseOk> GetSessionDetails(string sessionId,
CancellationToken cancellationToken = default);

Task<GetSessionDetailsResponseOk> GetSessionDetails(string sessionSecret, string sessionId,
CancellationToken cancellationToken = default);

Task<UpdateASessionResponseOk> UpdateASession(string sessionId,
AbstractUpdateASessionRequest updateASessionRequest,
CancellationToken cancellationToken = default);

Task<UpdateASessionResponseOk> UpdateASession(string sessionSecret, string sessionId,
AbstractUpdateASessionRequest updateASessionRequest,
CancellationToken cancellationToken = default);

Task<CompleteASessionResponseNoContent> CompleteASession(string sessionId,
CancellationToken cancellationToken = default);

Task<CompleteASessionResponseNoContent> CompleteASession(string sessionSecret, string sessionId,
CancellationToken cancellationToken = default);

Task<UpdateSessionThreedsMethodCompletionIndicatorResponseOk> UpdateSessionThreedsMethodCompletionIndicator(
string sessionId,
UpdateSessionThreedsMethodCompletionIndicatorRequest updateSessionThreedsMethodCompletionIndicatorRequest,
CancellationToken cancellationToken = default);

Task<UpdateSessionThreedsMethodCompletionIndicatorResponseOk> UpdateSessionThreedsMethodCompletionIndicator(
string sessionSecret,
string sessionId,
UpdateSessionThreedsMethodCompletionIndicatorRequest updateSessionThreedsMethodCompletionIndicatorRequest,
CancellationToken cancellationToken = default);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Checkout.Sessions
namespace Checkout.Authentication
{
public class SessionSecretSdkCredentials : SdkCredentials
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System.Runtime.Serialization;

namespace Checkout.Authentication.Standalone.Common.AccountInfo
{
public enum AccountAgeType
{
[EnumMember(Value = "no_account")]
NoAccount,

[EnumMember(Value = "created_during_transaction")]
CreatedDuringTransaction,

[EnumMember(Value = "less_than_thirty_days")]
LessThanThirtyDays,

[EnumMember(Value = "thirty_to_sixty_days")]
ThirtyToSixtyDays,

[EnumMember(Value = "more_than_sixty_days")]
MoreThanSixtyDays,
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System.Runtime.Serialization;

namespace Checkout.Authentication.Standalone.Common.AccountInfo
{
public enum AccountChangeIndicatorType
{
[EnumMember(Value = "this_transaction")]
ThisTransaction,

[EnumMember(Value = "less_than_thirty_days")]
LessThanThirtyDays,

[EnumMember(Value = "thirty_to_sixty_days")]
ThirtyToSixtyDays,

[EnumMember(Value = "more_than_sixty_days")]
MoreThanSixtyDays,
}
}
Loading
Loading