aboutsummaryrefslogtreecommitdiff
path: root/Src/auth/Loginbox/loginProvider.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/auth/Loginbox/loginProvider.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/auth/Loginbox/loginProvider.cpp')
-rw-r--r--Src/auth/Loginbox/loginProvider.cpp231
1 files changed, 231 insertions, 0 deletions
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 <strsafe.h>
+
+
+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;
+}
+
+
+