109 lines
2.5 KiB
C++
109 lines
2.5 KiB
C++
#include "./loginCredentials.h"
|
|
#include "./common.h"
|
|
|
|
#include "../api_auth.h"
|
|
|
|
|
|
LoginCredentials::LoginCredentials(const GUID *pRealm, LPCWSTR pszName, LPCSTR pszSession, LPCSTR pszToken, __time64_t tExpire)
|
|
: ref(1), username(NULL), sessionKey(NULL), token(NULL)
|
|
{
|
|
realm = (NULL == pRealm) ? GUID_NULL : *pRealm;
|
|
username = LoginBox_CopyString(pszName);
|
|
sessionKey = LoginBox_CopyAnsiString(pszSession);
|
|
token = LoginBox_CopyAnsiString(pszToken);
|
|
expire = tExpire;
|
|
}
|
|
|
|
LoginCredentials::~LoginCredentials()
|
|
{
|
|
LoginBox_FreeStringSecure(username);
|
|
LoginBox_FreeAnsiStringSecure(sessionKey);
|
|
LoginBox_FreeAnsiStringSecure(token);
|
|
}
|
|
|
|
HRESULT LoginCredentials::CreateInstance(const GUID *pRealm, LPCWSTR pszName, LPCSTR pszSession, LPCSTR pszToken, __time64_t tExpire, LoginCredentials **instance)
|
|
{
|
|
if (NULL == instance) return E_POINTER;
|
|
*instance = new LoginCredentials(pRealm, pszName, pszSession, pszToken, tExpire);
|
|
if (NULL == *instance) return E_OUTOFMEMORY;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT LoginCredentials::CreateFromAuth(api_auth *authApi, const GUID *pRealm, LoginCredentials **instance)
|
|
{
|
|
if (NULL == instance) return E_POINTER;
|
|
*instance = NULL;
|
|
|
|
if (NULL == authApi) return E_INVALIDARG;
|
|
|
|
const size_t sessionKeyMax(8192), tokenMax(8192), usernameMax(8192);
|
|
LPSTR sessionKey = LoginBox_MallocAnsiString(sessionKeyMax);
|
|
LPSTR token = LoginBox_MallocAnsiString(tokenMax);
|
|
LPWSTR username = LoginBox_MallocString(usernameMax);
|
|
__time64_t expire;
|
|
|
|
HRESULT hr;
|
|
|
|
if (NULL == sessionKey || NULL == token || NULL == username)
|
|
hr = E_OUTOFMEMORY;
|
|
else
|
|
{
|
|
INT result = authApi->GetCredentials((NULL != pRealm) ? *pRealm : GUID_NULL, sessionKey, sessionKeyMax, token, tokenMax, username, usernameMax, &expire);
|
|
if (AUTH_SUCCESS == result)
|
|
{
|
|
hr = CreateInstance(pRealm, username, sessionKey, token, expire, instance);
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
}
|
|
}
|
|
|
|
LoginBox_FreeAnsiStringSecure(sessionKey);
|
|
LoginBox_FreeAnsiStringSecure(token);
|
|
LoginBox_FreeStringSecure(username);
|
|
|
|
return hr;
|
|
}
|
|
|
|
UINT LoginCredentials::AddRef()
|
|
{
|
|
return InterlockedIncrement((LONG*)&ref);
|
|
}
|
|
|
|
UINT LoginCredentials::Release()
|
|
{
|
|
if (0 == ref)
|
|
return ref;
|
|
|
|
LONG r = InterlockedDecrement((LONG*)&ref);
|
|
if (0 == r)
|
|
delete(this);
|
|
|
|
return r;
|
|
}
|
|
|
|
GUID LoginCredentials::GetRealm()
|
|
{
|
|
return realm;
|
|
}
|
|
|
|
__time64_t LoginCredentials::GetExpiration()
|
|
{
|
|
return expire;
|
|
}
|
|
|
|
LPCWSTR LoginCredentials::GetUsername()
|
|
{
|
|
return username;
|
|
}
|
|
LPCSTR LoginCredentials::GetSessionKey()
|
|
{
|
|
return sessionKey;
|
|
}
|
|
|
|
LPCSTR LoginCredentials::GetToken()
|
|
{
|
|
return token;
|
|
}
|