Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get Id token Intent #201

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
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
Git LFS file not shown
Git LFS file not shown
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,14 @@ FString USequenceWallet::GetWalletAddress() const
return Addr;
}

void USequenceWallet::GetIdToken(const FString& Nonce, const TSuccessCallback<FSeqIdTokenResponse_Data>&OnSuccess, const FFailureCallback& OnFailure) const
{
if (this->SequenceRPCManager)
{
this->SequenceRPCManager->GetIdToken(this->Credentials, Nonce, OnSuccess, OnFailure);
}
}

void USequenceWallet::ListSessions(const TSuccessCallback<TArray<FSeqListSessions_Session>>& OnSuccess, const FFailureCallback& OnFailure) const
{
if (this->SequenceRPCManager)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ static const FString InitiateAuthOP = "initiateAuth";
static const FString CloseSessionOP = "closeSession";
static const FString SendTransactionOP = "sendTransaction";
static const FString FeeOptionsOP = "feeOptions";
static const FString GetIdTokenOP = "getIdToken";
static const FString ListSessionsOP = "listSessions";
static const FString SignMessageOP = "signMessage";
static const FString FederateSessionOP = "federateAccount";
Expand Down Expand Up @@ -378,27 +379,70 @@ struct SEQUENCEPLUGIN_API FSendTransactionWithFeeOptionData : public FGenericDat
};

USTRUCT()
struct SEQUENCEPLUGIN_API FListSessionsData : public FGenericData
struct SEQUENCEPLUGIN_API FGetIdTokenData : public FGenericData
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FString wallet = "";
GENERATED_USTRUCT_BODY()

FGetIdTokenData()
{
UseCustomParser = true;
Operation = GetIdTokenOP;
};

FGetIdTokenData(const FString& SessionId, const FString& WalletAddress, const FString& Nonce)
{
UseCustomParser = true;
Operation = GetIdTokenOP;
this->SessionId = SessionId;
this->WalletAddress = WalletAddress;
this->Nonce = Nonce;
}
UPROPERTY()
FString SessionId;

UPROPERTY()
FString WalletAddress;

UPROPERTY()
FString Nonce;

virtual FString GetJson() const override
{
FString JsonString = "{\"sessionId\":\"" + SessionId + "\",\"walletAddress\":\"" + WalletAddress + "\"";

if (!Nonce.IsEmpty())
JsonString += ",\"nonce\":\"" + Nonce + "\"";
else
JsonString += "}";

return JsonString;
}
};

FListSessionsData()
{
Operation = ListSessionsOP;
}

FListSessionsData(const FString& WalletIn)
{
Operation = ListSessionsOP;
wallet = WalletIn;
}

virtual FString GetJson() const override
{
return "";
}
USTRUCT()
struct SEQUENCEPLUGIN_API FListSessionsData : public FGenericData
{
GENERATED_USTRUCT_BODY()

UPROPERTY()
FString wallet = "";

FListSessionsData()
{
Operation = ListSessionsOP;
}

FListSessionsData(const FString& WalletIn)
{
Operation = ListSessionsOP;
wallet = WalletIn;
}

virtual FString GetJson() const override
{
return "";
}
};

USTRUCT()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,15 @@ void USequenceWalletBP::CallOnApiSendTransaction(const FSequenceResponseStatus&
UE_LOG(LogTemp, Error, TEXT("[Nothing bound to: OnApiSendTransaction]"));
}

void USequenceWalletBP::CallOnApiGetIdToken(const FSequenceResponseStatus& Status, const FSeqIdTokenResponse_Data& Response) const
{
if (this->OnApiGetIdToken.IsBound())
this->OnApiGetIdToken.Broadcast(Status, Response);
else
UE_LOG(LogTemp, Error, TEXT("[Nothing bound to: OnApiGetIdToken]"));

}

void USequenceWalletBP::CallOnApiListSessions(const FSequenceResponseStatus& Status, const TArray<FSeqListSessions_Session>& Sessions) const
{
if (this->OnApiListSessions.IsBound())
Expand Down Expand Up @@ -347,6 +356,26 @@ void USequenceWalletBP::ApiSendTransaction(UTransactions * Transactions)
}
}

void USequenceWalletBP::ApiGetIdToken(FString& Nonce)
{
const TFunction<void (FSeqIdTokenResponse_Data)> OnSuccess = [this](const FSeqIdTokenResponse_Data& Data)
{
this->CallOnApiGetIdToken(FSequenceResponseStatus(true, GetIdTokenTrt), Data);
};

const TFunction<void(FSequenceError)> OnFailure = [this](const FSequenceError& Err)
{
this->CallOnApiGetIdToken(FSequenceResponseStatus(false, Err.Message, GetIdTokenTrt), {});
};

const TOptional<USequenceWallet*> WalletOptional = USequenceWallet::Get();
if (WalletOptional.IsSet() && WalletOptional.GetValue())
{
const USequenceWallet* Wallet = WalletOptional.GetValue();
Wallet->GetIdToken(Nonce, OnSuccess, OnFailure);
}
}

void USequenceWalletBP::ApiListSessions()
{
const TFunction<void (TArray<FSeqListSessions_Session>)> OnSuccess = [this](const TArray<FSeqListSessions_Session>& Sessions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,13 @@ FString USequenceRPCManager::BuildSendTransactionWithFeeIntent(const FCredential
return Intent;
}

FString USequenceRPCManager::BuildGetIdTokenIntent(const FCredentials_BE& Credentials, const FString& Nonce) const
{
const FGetIdTokenData GetIdTokenData(Credentials.GetSessionWallet()->GetSessionId(), Credentials.GetWalletAddress(), Nonce);
const FString Intent = this->GenerateIntent<FGetIdTokenData>(GetIdTokenData);
return Intent;
}

FString USequenceRPCManager::BuildListSessionIntent(const FCredentials_BE& Credentials) const
{
const FListSessionsData ListSessionsData(Credentials.GetWalletAddress());
Expand Down Expand Up @@ -309,6 +316,33 @@ void USequenceRPCManager::GetFeeOptions(const FCredentials_BE& Credentials, cons
}
}

void USequenceRPCManager::GetIdToken(const FCredentials_BE& Credentials, const FString& Nonce, const TSuccessCallback<FSeqIdTokenResponse_Data>& OnSuccess, const FFailureCallback& OnFailure) const
{
const TSuccessCallback<FString> OnResponse = [OnSuccess, OnFailure](const FString& Response)
{
const FSeqIdTokenResponse ParsedResponse = USequenceSupport::JSONStringToStruct<FSeqIdTokenResponse>(Response);

if (ParsedResponse.IsValid())
{
OnSuccess(ParsedResponse.Response.Data);
}
else
{
OnFailure(FSequenceError(RequestFail, "Error Parsing Response: " + Response));
}
};

if (Credentials.RegisteredValid())
{
this->SequenceRPC(this->BuildUrl(), this->BuildGetIdTokenIntent(Credentials, Nonce), OnResponse, OnFailure);
}
else
{
OnFailure(FSequenceError(RequestFail, "[Session Not Registered Please Register Session First]"));
}

}

void USequenceRPCManager::ListSessions(const FCredentials_BE& Credentials, const TSuccessCallback<TArray<FSeqListSessions_Session>>& OnSuccess, const FFailureCallback& OnFailure) const
{
const TSuccessCallback<FString> OnResponse = [OnSuccess,OnFailure](const FString& Response)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ class SEQUENCEPLUGIN_API USequenceRPCManager : public UObject
FString BuildSignMessageIntent(const FCredentials_BE& Credentials, const FString& Message) const;
FString BuildSendTransactionIntent(const FCredentials_BE& Credentials, const TArray<TransactionUnion>& Transactions) const;
FString BuildSendTransactionWithFeeIntent(const FCredentials_BE& Credentials, const TArray<TransactionUnion>& Transactions,const FString& FeeQuote) const;
FString BuildGetIdTokenIntent(const FCredentials_BE& Credentials, const FString& nonce) const;
FString BuildListSessionIntent(const FCredentials_BE& Credentials) const;
FString BuildCloseSessionIntent() const;
FString BuildSessionValidationIntent() const;
Expand Down Expand Up @@ -166,6 +167,10 @@ class SEQUENCEPLUGIN_API USequenceRPCManager : public UObject
* @param OnSuccess Called if the operation succeeds with your Sessions
* @param OnFailure Called if the operation fails with an Error
*/

void GetIdToken(const FCredentials_BE& Credentials, const FString& Nonce, const TSuccessCallback<FSeqIdTokenResponse_Data>&OnSuccess, const FFailureCallback& OnFailure) const;


void ListSessions(const FCredentials_BE& Credentials, const TSuccessCallback<TArray<FSeqListSessions_Session>>& OnSuccess, const FFailureCallback& OnFailure) const;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,9 @@ class SEQUENCEPLUGIN_API USequenceWallet : public UGameInstanceSubsystem
* @param OnSuccess A list of all active sessions
* @param OnFailure An error occured
*/

void GetIdToken(const FString& Nonce, const TSuccessCallback<FSeqIdTokenResponse_Data>&OnSuccess, const FFailureCallback& OnFailure) const;

void ListSessions(const TSuccessCallback<TArray<FSeqListSessions_Session>>& OnSuccess, const FFailureCallback& OnFailure) const;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,59 @@ struct SEQUENCEPLUGIN_API FSeqSignMessageResponse

//SignMessage//


//GetIdToken//

USTRUCT(Blueprintable)
struct SEQUENCEPLUGIN_API FSeqIdTokenResponse_Data
{
GENERATED_BODY()

UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
FString IdToken;

UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
int32 ExpiresIn;
};



USTRUCT(Blueprintable)
struct SEQUENCEPLUGIN_API FSeqIdTokenResponse_Response
{
GENERATED_BODY()

UPROPERTY()
FString Code = "";

UPROPERTY()
FSeqIdTokenResponse_Data Data;


bool IsValid() const
{
return Code.Equals(TEXT("idToken"), ESearchCase::IgnoreCase);

}
};


USTRUCT(Blueprintable)
struct SEQUENCEPLUGIN_API FSeqIdTokenResponse
{
GENERATED_BODY()


UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
FSeqIdTokenResponse_Response Response;

bool IsValid() const
{
return Response.IsValid();
}
};


//ListSessions//

USTRUCT(Blueprintable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiGetFilteredFeeOptions, FSequ
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiGetUnFilteredFeeOptions, FSequenceResponseStatus, ResponseStatus, const TArray<FFeeOption>&, FeeOptions);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiSendTransactionWtihFeeOption, FSequenceResponseStatus, ResponseStatus, FSeqTransactionResponse_Data, Response);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiSendTransaction, FSequenceResponseStatus, ResponseStatus, FSeqTransactionResponse_Data, Response);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiGetIdToken, FSequenceResponseStatus, ResponseStatus, FSeqIdTokenResponse_Data, Response);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiListSessions, FSequenceResponseStatus, ResponseStatus, const TArray<FSeqListSessions_Session>&, Sessions);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiGetSupportedTransakCountries, FSequenceResponseStatus, ResponseStatus, const TArray<FSupportedCountry>&, SupportedCountries);

Expand Down Expand Up @@ -73,6 +74,9 @@ class SEQUENCEPLUGIN_API USequenceWalletBP : public UObject
UPROPERTY(BlueprintAssignable, Category="ASYNC_RESPONSE")
FOnIApiSendTransaction OnApiSendTransaction;

UPROPERTY(BlueprintAssignable, Category = "ASYNC_RESPONSE")
FOnIApiGetIdToken OnApiGetIdToken;

UPROPERTY(BlueprintAssignable, Category="ASYNC_RESPONSE")
FOnIApiListSessions OnApiListSessions;

Expand Down Expand Up @@ -127,6 +131,7 @@ class SEQUENCEPLUGIN_API USequenceWalletBP : public UObject
void CallOnApiGetUnFilteredFeeOptions(const FSequenceResponseStatus& Status, const TArray<FFeeOption>& FeeOptions) const;
void CallOnApiSendTransactionWithFee(const FSequenceResponseStatus& Status, const FSeqTransactionResponse_Data& Response) const;
void CallOnApiSendTransaction(const FSequenceResponseStatus& Status, const FSeqTransactionResponse_Data& Response) const;
void CallOnApiGetIdToken(const FSequenceResponseStatus& Status, const FSeqIdTokenResponse_Data& Response) const;
void CallOnApiListSessions(const FSequenceResponseStatus& Status, const TArray<FSeqListSessions_Session>& Sessions) const;
void CallOnApiGetSupportedTransakCountries(const FSequenceResponseStatus& Status, const TArray<FSupportedCountry>& SupportedCountries) const;

Expand Down Expand Up @@ -232,6 +237,9 @@ class SEQUENCEPLUGIN_API USequenceWalletBP : public UObject
UFUNCTION(BlueprintCallable, Category="ASync Api")
void ApiSendTransaction(UTransactions * Transactions);

UFUNCTION(BlueprintCallable, Category = "ASync Api")
void ApiGetIdToken(FString& Nonce);

UFUNCTION(BlueprintCallable, Category="ASync Api")
void ApiListSessions();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ enum ETransactionResponseType
GetUnFilteredFeeOptionsTrt UMETA(DisplayName = "GetUnFilteredFeeOptions"),
SendTransactionWithFeeTrt UMETA(DisplayName = "SendTransactionWithFee"),
SendTransactionTrt UMETA(DisplayName = "SendTransaction"),
GetIdTokenTrt UMETA(DisplayName = "GetIdToken"),
ListSessionsTrt UMETA(DisplayName = "ListSessions"),
GetSupportedTransakCountriesTrt UMETA(DisplayName = "GetSupportedTransakCountries"),
PingTrt UMETA(DisplayName = "Ping"),
Expand Down