From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/auth/Loginbox/loginProvider.cpp | 231 ++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 Src/auth/Loginbox/loginProvider.cpp (limited to 'Src/auth/Loginbox/loginProvider.cpp') diff --git a/Src/auth/Loginbox/loginProvider.cpp b/Src/auth/Loginbox/loginProvider.cpp new file mode 100644 index 00000000..04b2b662 --- /dev/null +++ b/Src/auth/Loginbox/loginProvider.cpp @@ -0,0 +1,231 @@ +#include "./loginProvider.h" +#include "./loginTemplate.h" +#include "./loginCommand.h" +#include "./common.h" + +#include + + +static HRESULT LoginProvider_SetString(LPWSTR *ppszTarget, LPCWSTR pszSource) +{ + if (NULL == ppszTarget) + return E_POINTER; + if (NULL != *ppszTarget) + free(*ppszTarget); + + + if (NULL == pszSource) + *ppszTarget = NULL; + else + { + *ppszTarget = LoginBox_CopyString(pszSource); + if (NULL == *ppszTarget) return E_OUTOFMEMORY; + } + return S_OK; +} + +LoginProvider::LoginProvider(const GUID *providerUid) + : ref(1), name(NULL), description(NULL), imagePath(NULL), tosUrl(NULL), + privacyUrl(NULL), helpUrl(NULL), pageTemplate(NULL), command(NULL) +{ + id = (NULL != providerUid) ? *providerUid : GUID_NULL; +} + +LoginProvider::~LoginProvider() +{ + LoginBox_FreeString(name); + LoginBox_FreeString(description); + LoginBox_FreeString(imagePath); + LoginBox_FreeString(tosUrl); + LoginBox_FreeString(privacyUrl); + LoginBox_FreeString(helpUrl); + if (NULL != pageTemplate) pageTemplate->Release(); + if (NULL != command) command->Release(); +} + +HRESULT LoginProvider::CreateInstance(const GUID *providerUid, LoginProvider **instance) +{ + if (NULL == instance) return E_POINTER; + if (NULL == providerUid) return E_INVALIDARG; + *instance = new LoginProvider(providerUid); + if (NULL == *instance) return E_OUTOFMEMORY; + return S_OK; +} + +ULONG LoginProvider::AddRef() +{ + return InterlockedIncrement((LONG*)&ref); +} + +ULONG LoginProvider::Release() +{ + if (0 == ref) + return ref; + + LONG r = InterlockedDecrement((LONG*)&ref); + if (0 == r) + delete(this); + + return r; +} + +HRESULT LoginProvider::IsIdentical(LoginProvider *test) +{ + if (NULL == test) + return E_INVALIDARG; + + if (FALSE == IsEqualGUID(id, test->id)) + return S_FALSE; + + + if (S_OK != LoginBox_IsStrEq(name, test->name) || + S_OK != LoginBox_IsStrEq(description, test->description) || + S_OK != LoginBox_IsStrEqInvI(imagePath, test->imagePath) || + S_OK != LoginBox_IsStrEqInvI(tosUrl, test->tosUrl) || + S_OK != LoginBox_IsStrEqInvI(privacyUrl, test->privacyUrl) || + S_OK != LoginBox_IsStrEqInvI(helpUrl, test->helpUrl)) + { + return S_FALSE; + } + + if ((NULL == pageTemplate) != (NULL == test->pageTemplate)) + return S_FALSE; + + if (NULL != pageTemplate) + { + HRESULT hr = pageTemplate->IsIdentical(test->pageTemplate); + if (S_OK != hr) return hr; + } + + if ((NULL == command) != (NULL == test->command)) + return S_FALSE; + + if (NULL != command) + { + HRESULT hr = command->IsIdentical(test->command); + if (S_OK != hr) return hr; + } + + return S_OK; +} + +HRESULT LoginProvider::IsValid() +{ + return (NULL != pageTemplate && NULL != command) ? S_OK :S_FALSE; +} + +HRESULT LoginProvider::GetId(GUID *pId) +{ + if (NULL == pId) return E_POINTER; + *pId = id; + return S_OK; +} + +HRESULT LoginProvider::GetName(LPWSTR pszBuffer, UINT cchBufferMax) +{ + if (NULL == pszBuffer) return E_INVALIDARG; + return StringCchCopyEx(pszBuffer, cchBufferMax, name, NULL, NULL, STRSAFE_IGNORE_NULLS); +} + +HRESULT LoginProvider::GetDescription(LPWSTR pszBuffer, UINT cchBufferMax) +{ + if (NULL == pszBuffer) return E_INVALIDARG; + return StringCchCopyEx(pszBuffer, cchBufferMax, description, NULL, NULL, STRSAFE_IGNORE_NULLS); +} + +HRESULT LoginProvider::GetImagePath(LPWSTR pszBuffer, UINT cchBufferMax) +{ + if (NULL == pszBuffer) return E_INVALIDARG; + return StringCchCopyEx(pszBuffer, cchBufferMax, imagePath, NULL, NULL, STRSAFE_IGNORE_NULLS); +} + +HRESULT LoginProvider::GetTosLink(LPWSTR pszBuffer, UINT cchBufferMax) +{ + if (NULL == pszBuffer) return E_INVALIDARG; + return StringCchCopyEx(pszBuffer, cchBufferMax, tosUrl, NULL, NULL, STRSAFE_IGNORE_NULLS); +} + +HRESULT LoginProvider::GetPrivacyLink(LPWSTR pszBuffer, UINT cchBufferMax) +{ + if (NULL == pszBuffer) return E_INVALIDARG; + return StringCchCopyEx(pszBuffer, cchBufferMax, privacyUrl, NULL, NULL, STRSAFE_IGNORE_NULLS); +} + +HRESULT LoginProvider::GetHelpLink(LPWSTR pszBuffer, UINT cchBufferMax) +{ + if (NULL == pszBuffer) return E_INVALIDARG; + return StringCchCopyEx(pszBuffer, cchBufferMax, helpUrl, NULL, NULL, STRSAFE_IGNORE_NULLS); +} + +HRESULT LoginProvider::GetTemplate(LoginTemplate **ppTemplate) +{ + if (NULL == ppTemplate) + return E_POINTER; + + *ppTemplate = pageTemplate; + if (NULL != pageTemplate) + pageTemplate->AddRef(); + + return S_OK; +} + +HRESULT LoginProvider::GetCommand(LoginCommand **ppCommand) +{ + if (NULL == ppCommand) + return E_POINTER; + + *ppCommand = command; + if (NULL != command) + command->AddRef(); + + return S_OK; +} + +HRESULT LoginProvider::SetName(LPCWSTR pszName) +{ + return LoginProvider_SetString(&name, pszName); +} + +HRESULT LoginProvider::SetDescription(LPCWSTR pszDescription) +{ + return LoginProvider_SetString(&description, pszDescription); +} + +HRESULT LoginProvider::SetImagePath(LPCWSTR pszImagePath) +{ + return LoginProvider_SetString(&imagePath, pszImagePath); +} + +HRESULT LoginProvider::SetTosLink(LPCWSTR pszUrl) +{ + return LoginProvider_SetString(&tosUrl, pszUrl); +} + +HRESULT LoginProvider::SetPrivacyLink(LPCWSTR pszUrl) +{ + return LoginProvider_SetString(&privacyUrl, pszUrl); +} + +HRESULT LoginProvider::SetHelpLink(LPCWSTR pszUrl) +{ + return LoginProvider_SetString(&helpUrl, pszUrl); +} + +HRESULT LoginProvider::SetTemplate(LoginTemplate *pTemplate) +{ + if (NULL != pageTemplate) pageTemplate->Release(); + pageTemplate = pTemplate; + if (NULL != pageTemplate) pageTemplate->AddRef(); + return S_OK; +} + +HRESULT LoginProvider::SetCommand(LoginCommand *pCommand) +{ + if (NULL != command) command->Release(); + command = pCommand; + if (NULL != command) command->AddRef(); + return S_OK; +} + + + -- cgit