winamp/Src/auth/Loginbox/loginProvider.cpp
2024-09-24 14:54:57 +02:00

232 lines
5.4 KiB
C++

#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;
}