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