123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <AzCore/std/smart_ptr/make_shared.h>
- #include <AzCore/IO/FileIO.h>
- #include <Authentication/AuthenticationProviderTypes.h>
- #include <Authentication/AWSCognitoAuthenticationProvider.h>
- #include <Authentication/LWAAuthenticationProvider.h>
- #include <Authentication/GoogleAuthenticationProvider.h>
- #include <Authentication/AuthenticationProviderManager.h>
- namespace AWSClientAuth
- {
- AuthenticationProviderManager::AuthenticationProviderManager()
- {
- AZ::Interface<IAuthenticationProviderRequests>::Register(this);
- AuthenticationProviderRequestBus::Handler::BusConnect();
- AuthenticationProviderScriptCanvasRequestBus::Handler::BusConnect();
- }
- AuthenticationProviderManager::~AuthenticationProviderManager()
- {
- ResetProviders();
- AuthenticationProviderScriptCanvasRequestBus::Handler::BusDisconnect();
- AuthenticationProviderRequestBus::Handler::BusDisconnect();
- AZ::Interface<IAuthenticationProviderRequests>::Unregister(this);
- }
- bool AuthenticationProviderManager::Initialize(const AZStd::vector<ProviderNameEnum>& providerNames)
- {
- ResetProviders();
- bool initializeSuccess = true;
- for (auto providerName : providerNames)
- {
- m_authenticationProvidersMap[providerName] = CreateAuthenticationProviderObject(providerName);
- initializeSuccess = initializeSuccess && m_authenticationProvidersMap[providerName]->Initialize();
- }
- return initializeSuccess;
- }
- void AuthenticationProviderManager::PasswordGrantSingleFactorSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& password)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->PasswordGrantSingleFactorSignInAsync(username, password);
- }
- }
- void AuthenticationProviderManager::PasswordGrantMultiFactorSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& password)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->PasswordGrantMultiFactorSignInAsync(username, password);
- }
- }
- void AuthenticationProviderManager::PasswordGrantMultiFactorConfirmSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& confirmationCode)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->PasswordGrantMultiFactorConfirmSignInAsync(username, confirmationCode);
- }
- }
- void AuthenticationProviderManager::DeviceCodeGrantSignInAsync(const ProviderNameEnum& providerName)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->DeviceCodeGrantSignInAsync();
- }
- }
- void AuthenticationProviderManager::DeviceCodeGrantConfirmSignInAsync(const ProviderNameEnum& providerName)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->DeviceCodeGrantConfirmSignInAsync();
- }
- }
- void AuthenticationProviderManager::RefreshTokensAsync(const ProviderNameEnum& providerName)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->RefreshTokensAsync();
- }
- }
- void AuthenticationProviderManager::GetTokensWithRefreshAsync(const ProviderNameEnum& providerName)
- {
- if (!IsProviderInitialized(providerName))
- {
- AuthenticationProviderNotificationBus::Broadcast(&AuthenticationProviderNotifications::OnRefreshTokensFail
- , "Provider is not initialized");
- return;
- }
- AuthenticationTokens tokens = m_authenticationProvidersMap[providerName]->GetAuthenticationTokens();
- if (tokens.AreTokensValid())
- {
- AuthenticationProviderNotificationBus::Broadcast(&AuthenticationProviderNotifications::OnRefreshTokensSuccess, tokens);
- }
- else
- {
- m_authenticationProvidersMap[providerName]->RefreshTokensAsync();
- }
- }
- bool AuthenticationProviderManager::IsSignedIn(const ProviderNameEnum& providerName)
- {
- if (IsProviderInitialized(providerName))
- {
- return m_authenticationProvidersMap[providerName]->GetAuthenticationTokens().AreTokensValid();
- }
- return false;
- }
- bool AuthenticationProviderManager::SignOut(const ProviderNameEnum& providerName)
- {
- if (IsProviderInitialized(providerName))
- {
- m_authenticationProvidersMap[providerName]->SignOut();
- AuthenticationProviderNotificationBus::Broadcast(&AuthenticationProviderNotifications::OnSignOut, providerName);
- return true;
- }
- return false;
- }
- AuthenticationTokens AuthenticationProviderManager::GetAuthenticationTokens(const ProviderNameEnum& providerName)
- {
- return m_authenticationProvidersMap[providerName]->GetAuthenticationTokens();
- }
- AZStd::unique_ptr<AuthenticationProviderInterface> AuthenticationProviderManager::CreateAuthenticationProviderObject(const ProviderNameEnum& providerName)
- {
- switch (providerName)
- {
- case ProviderNameEnum::AWSCognitoIDP:
- return AZStd::make_unique<AWSCognitoAuthenticationProvider>();
- case ProviderNameEnum::LoginWithAmazon:
- return AZStd::make_unique<LWAAuthenticationProvider>();
- case ProviderNameEnum::Google:
- return AZStd::make_unique<GoogleAuthenticationProvider>();
- default:
- return nullptr;
- }
- }
- bool AuthenticationProviderManager::IsProviderInitialized(const ProviderNameEnum& providerName)
- {
- bool ret = m_authenticationProvidersMap.contains(providerName);
- AZ_Assert(ret, "ProviderName enum %i not initialized. Please call initialize first");
- return ret;
- }
- void AuthenticationProviderManager::ResetProviders()
- {
- for (auto& [providerName, providerInterface] : m_authenticationProvidersMap)
- {
- providerInterface.reset();
- }
- }
- ProviderNameEnum AuthenticationProviderManager::GetProviderNameEnum(AZStd::string name)
- {
- auto enumValue = ProviderNameEnumNamespace::FromStringToProviderNameEnum(name);
- if (enumValue.has_value())
- {
- return enumValue.value();
- }
- AZ_Warning("AuthenticationProviderManager", false, "Incorrect string value for enum: %s", name.c_str());
- return ProviderNameEnum::None;
- }
- bool AuthenticationProviderManager::Initialize(
- const AZStd::vector<AZStd::string>& providerNames)
- {
- AZStd::vector<ProviderNameEnum> providerNamesEnum;
- for (auto name : providerNames)
- {
- providerNamesEnum.push_back(GetProviderNameEnum(name));
- }
- return Initialize(providerNamesEnum);
- }
- void AuthenticationProviderManager::PasswordGrantSingleFactorSignInAsync(const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& password)
- {
- PasswordGrantSingleFactorSignInAsync(GetProviderNameEnum(providerName), username, password);
- }
- void AuthenticationProviderManager::PasswordGrantMultiFactorSignInAsync(const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& password)
- {
- PasswordGrantMultiFactorSignInAsync(GetProviderNameEnum(providerName), username, password);
- }
- void AuthenticationProviderManager::PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& confirmationCode)
- {
- PasswordGrantMultiFactorConfirmSignInAsync(GetProviderNameEnum(providerName), username, confirmationCode);
- }
- void AuthenticationProviderManager::DeviceCodeGrantSignInAsync(const AZStd::string& providerName)
- {
- DeviceCodeGrantSignInAsync(GetProviderNameEnum(providerName));
- }
- void AuthenticationProviderManager::DeviceCodeGrantConfirmSignInAsync(const AZStd::string& providerName)
- {
- DeviceCodeGrantConfirmSignInAsync(GetProviderNameEnum(providerName));
- }
- void AuthenticationProviderManager::RefreshTokensAsync(const AZStd::string& providerName)
- {
- RefreshTokensAsync(GetProviderNameEnum(providerName));
- }
- void AuthenticationProviderManager::GetTokensWithRefreshAsync(const AZStd::string& providerName)
- {
- GetTokensWithRefreshAsync(GetProviderNameEnum(providerName));
- }
- bool AuthenticationProviderManager::IsSignedIn(const AZStd::string& providerName)
- {
- return IsSignedIn(GetProviderNameEnum(providerName));
- }
- bool AuthenticationProviderManager::SignOut(const AZStd::string& providerName)
- {
- return SignOut(GetProviderNameEnum(providerName));
- }
- AuthenticationTokens AuthenticationProviderManager::GetAuthenticationTokens(const AZStd::string& providerName)
- {
- return GetAuthenticationTokens(GetProviderNameEnum(providerName));
- }
- } // namespace AWSClientAuth
|