1
0

loginProvider.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #include "./loginProvider.h"
  2. #include "./loginTemplate.h"
  3. #include "./loginCommand.h"
  4. #include "./common.h"
  5. #include <strsafe.h>
  6. static HRESULT LoginProvider_SetString(LPWSTR *ppszTarget, LPCWSTR pszSource)
  7. {
  8. if (NULL == ppszTarget)
  9. return E_POINTER;
  10. if (NULL != *ppszTarget)
  11. free(*ppszTarget);
  12. if (NULL == pszSource)
  13. *ppszTarget = NULL;
  14. else
  15. {
  16. *ppszTarget = LoginBox_CopyString(pszSource);
  17. if (NULL == *ppszTarget) return E_OUTOFMEMORY;
  18. }
  19. return S_OK;
  20. }
  21. LoginProvider::LoginProvider(const GUID *providerUid)
  22. : ref(1), name(NULL), description(NULL), imagePath(NULL), tosUrl(NULL),
  23. privacyUrl(NULL), helpUrl(NULL), pageTemplate(NULL), command(NULL)
  24. {
  25. id = (NULL != providerUid) ? *providerUid : GUID_NULL;
  26. }
  27. LoginProvider::~LoginProvider()
  28. {
  29. LoginBox_FreeString(name);
  30. LoginBox_FreeString(description);
  31. LoginBox_FreeString(imagePath);
  32. LoginBox_FreeString(tosUrl);
  33. LoginBox_FreeString(privacyUrl);
  34. LoginBox_FreeString(helpUrl);
  35. if (NULL != pageTemplate) pageTemplate->Release();
  36. if (NULL != command) command->Release();
  37. }
  38. HRESULT LoginProvider::CreateInstance(const GUID *providerUid, LoginProvider **instance)
  39. {
  40. if (NULL == instance) return E_POINTER;
  41. if (NULL == providerUid) return E_INVALIDARG;
  42. *instance = new LoginProvider(providerUid);
  43. if (NULL == *instance) return E_OUTOFMEMORY;
  44. return S_OK;
  45. }
  46. ULONG LoginProvider::AddRef()
  47. {
  48. return InterlockedIncrement((LONG*)&ref);
  49. }
  50. ULONG LoginProvider::Release()
  51. {
  52. if (0 == ref)
  53. return ref;
  54. LONG r = InterlockedDecrement((LONG*)&ref);
  55. if (0 == r)
  56. delete(this);
  57. return r;
  58. }
  59. HRESULT LoginProvider::IsIdentical(LoginProvider *test)
  60. {
  61. if (NULL == test)
  62. return E_INVALIDARG;
  63. if (FALSE == IsEqualGUID(id, test->id))
  64. return S_FALSE;
  65. if (S_OK != LoginBox_IsStrEq(name, test->name) ||
  66. S_OK != LoginBox_IsStrEq(description, test->description) ||
  67. S_OK != LoginBox_IsStrEqInvI(imagePath, test->imagePath) ||
  68. S_OK != LoginBox_IsStrEqInvI(tosUrl, test->tosUrl) ||
  69. S_OK != LoginBox_IsStrEqInvI(privacyUrl, test->privacyUrl) ||
  70. S_OK != LoginBox_IsStrEqInvI(helpUrl, test->helpUrl))
  71. {
  72. return S_FALSE;
  73. }
  74. if ((NULL == pageTemplate) != (NULL == test->pageTemplate))
  75. return S_FALSE;
  76. if (NULL != pageTemplate)
  77. {
  78. HRESULT hr = pageTemplate->IsIdentical(test->pageTemplate);
  79. if (S_OK != hr) return hr;
  80. }
  81. if ((NULL == command) != (NULL == test->command))
  82. return S_FALSE;
  83. if (NULL != command)
  84. {
  85. HRESULT hr = command->IsIdentical(test->command);
  86. if (S_OK != hr) return hr;
  87. }
  88. return S_OK;
  89. }
  90. HRESULT LoginProvider::IsValid()
  91. {
  92. return (NULL != pageTemplate && NULL != command) ? S_OK :S_FALSE;
  93. }
  94. HRESULT LoginProvider::GetId(GUID *pId)
  95. {
  96. if (NULL == pId) return E_POINTER;
  97. *pId = id;
  98. return S_OK;
  99. }
  100. HRESULT LoginProvider::GetName(LPWSTR pszBuffer, UINT cchBufferMax)
  101. {
  102. if (NULL == pszBuffer) return E_INVALIDARG;
  103. return StringCchCopyEx(pszBuffer, cchBufferMax, name, NULL, NULL, STRSAFE_IGNORE_NULLS);
  104. }
  105. HRESULT LoginProvider::GetDescription(LPWSTR pszBuffer, UINT cchBufferMax)
  106. {
  107. if (NULL == pszBuffer) return E_INVALIDARG;
  108. return StringCchCopyEx(pszBuffer, cchBufferMax, description, NULL, NULL, STRSAFE_IGNORE_NULLS);
  109. }
  110. HRESULT LoginProvider::GetImagePath(LPWSTR pszBuffer, UINT cchBufferMax)
  111. {
  112. if (NULL == pszBuffer) return E_INVALIDARG;
  113. return StringCchCopyEx(pszBuffer, cchBufferMax, imagePath, NULL, NULL, STRSAFE_IGNORE_NULLS);
  114. }
  115. HRESULT LoginProvider::GetTosLink(LPWSTR pszBuffer, UINT cchBufferMax)
  116. {
  117. if (NULL == pszBuffer) return E_INVALIDARG;
  118. return StringCchCopyEx(pszBuffer, cchBufferMax, tosUrl, NULL, NULL, STRSAFE_IGNORE_NULLS);
  119. }
  120. HRESULT LoginProvider::GetPrivacyLink(LPWSTR pszBuffer, UINT cchBufferMax)
  121. {
  122. if (NULL == pszBuffer) return E_INVALIDARG;
  123. return StringCchCopyEx(pszBuffer, cchBufferMax, privacyUrl, NULL, NULL, STRSAFE_IGNORE_NULLS);
  124. }
  125. HRESULT LoginProvider::GetHelpLink(LPWSTR pszBuffer, UINT cchBufferMax)
  126. {
  127. if (NULL == pszBuffer) return E_INVALIDARG;
  128. return StringCchCopyEx(pszBuffer, cchBufferMax, helpUrl, NULL, NULL, STRSAFE_IGNORE_NULLS);
  129. }
  130. HRESULT LoginProvider::GetTemplate(LoginTemplate **ppTemplate)
  131. {
  132. if (NULL == ppTemplate)
  133. return E_POINTER;
  134. *ppTemplate = pageTemplate;
  135. if (NULL != pageTemplate)
  136. pageTemplate->AddRef();
  137. return S_OK;
  138. }
  139. HRESULT LoginProvider::GetCommand(LoginCommand **ppCommand)
  140. {
  141. if (NULL == ppCommand)
  142. return E_POINTER;
  143. *ppCommand = command;
  144. if (NULL != command)
  145. command->AddRef();
  146. return S_OK;
  147. }
  148. HRESULT LoginProvider::SetName(LPCWSTR pszName)
  149. {
  150. return LoginProvider_SetString(&name, pszName);
  151. }
  152. HRESULT LoginProvider::SetDescription(LPCWSTR pszDescription)
  153. {
  154. return LoginProvider_SetString(&description, pszDescription);
  155. }
  156. HRESULT LoginProvider::SetImagePath(LPCWSTR pszImagePath)
  157. {
  158. return LoginProvider_SetString(&imagePath, pszImagePath);
  159. }
  160. HRESULT LoginProvider::SetTosLink(LPCWSTR pszUrl)
  161. {
  162. return LoginProvider_SetString(&tosUrl, pszUrl);
  163. }
  164. HRESULT LoginProvider::SetPrivacyLink(LPCWSTR pszUrl)
  165. {
  166. return LoginProvider_SetString(&privacyUrl, pszUrl);
  167. }
  168. HRESULT LoginProvider::SetHelpLink(LPCWSTR pszUrl)
  169. {
  170. return LoginProvider_SetString(&helpUrl, pszUrl);
  171. }
  172. HRESULT LoginProvider::SetTemplate(LoginTemplate *pTemplate)
  173. {
  174. if (NULL != pageTemplate) pageTemplate->Release();
  175. pageTemplate = pTemplate;
  176. if (NULL != pageTemplate) pageTemplate->AddRef();
  177. return S_OK;
  178. }
  179. HRESULT LoginProvider::SetCommand(LoginCommand *pCommand)
  180. {
  181. if (NULL != command) command->Release();
  182. command = pCommand;
  183. if (NULL != command) command->AddRef();
  184. return S_OK;
  185. }