Initial community commit
This commit is contained in:
108
Src/auth/Loginbox/loginCredentials.cpp
Normal file
108
Src/auth/Loginbox/loginCredentials.cpp
Normal file
@@ -0,0 +1,108 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user