647 lines
18 KiB
C++
647 lines
18 KiB
C++
#pragma once
|
|
|
|
#include "profilefieldsconsts.h"
|
|
#include "profilefieldinfo.h"
|
|
#include "csite.h"
|
|
|
|
class CUserProfile2;
|
|
|
|
|
|
//
|
|
// customizaeble validation paramers
|
|
//
|
|
class CValidationParams
|
|
{
|
|
public:
|
|
CValidationParams(LONG lMinPwd = 6,
|
|
LONG lMaxPwd = 16,
|
|
LONG lMinMemberName = 1,
|
|
LONG lMaxMemberName = 64,
|
|
LONG lEmailLeft = 32,
|
|
LONG lEmailRight = 32,
|
|
LONG lMaxNickname = 30) :
|
|
// default values ....
|
|
m_lMinPwd(lMinPwd), m_lMaxPwd(lMaxPwd),
|
|
m_lMinMemberName(lMinMemberName), m_lMaxMemberName(lMaxMemberName),
|
|
m_lEmailLeft(lEmailLeft), m_lEmailRight(lEmailRight),
|
|
m_lMaxNickname(lMaxNickname)
|
|
{
|
|
}
|
|
// this is how to change'em
|
|
VOID SetNewValues(LONG lMinPwd = 8,
|
|
LONG lMaxPwd = 16,
|
|
LONG lMinMemberName = 1,
|
|
LONG lMaxMemberName = 64,
|
|
LONG lEmailLeft = 32,
|
|
LONG lEmailRight = 32,
|
|
LONG lMaxNickname = 30)
|
|
{
|
|
m_lMinPwd = lMinPwd, m_lMaxPwd=lMaxPwd,
|
|
m_lMinMemberName = lMinMemberName, m_lMaxMemberName = lMaxMemberName,
|
|
m_lEmailLeft = lEmailLeft, m_lEmailRight = lEmailRight;
|
|
m_lMaxNickname = lMaxNickname;
|
|
}
|
|
void GetPwdParams(LONG& lmin, LONG& lmax) {
|
|
lmin = m_lMinPwd, lmax = m_lMaxPwd;
|
|
}
|
|
void GetMemberNameParams(LONG& lmin, LONG& lmax){
|
|
lmin = m_lMinMemberName, lmax = m_lMaxMemberName;
|
|
}
|
|
void GetEmailParams(LONG& lmailL, LONG& lmailR ){
|
|
lmailL = m_lEmailLeft, lmailR = m_lEmailRight;
|
|
}
|
|
void GetNicknameParams(LONG& lmax){
|
|
lmax = m_lMaxNickname;
|
|
}
|
|
private:
|
|
LONG m_lMinPwd;
|
|
LONG m_lMaxPwd;
|
|
LONG m_lMinMemberName;
|
|
LONG m_lMaxMemberName;
|
|
LONG m_lEmailLeft;
|
|
LONG m_lEmailRight;
|
|
LONG m_lMaxNickname;
|
|
};
|
|
|
|
|
|
extern CProfileFieldInfo *g_pFieldInfo;
|
|
|
|
//
|
|
// field description ...
|
|
//
|
|
class CProfileFieldState
|
|
{
|
|
public:
|
|
CProfileFieldState(CStringA szName)
|
|
{
|
|
m_bIsRequired = FALSE;
|
|
m_lSectionID = -1;
|
|
m_lValidationID = 0;
|
|
|
|
m_pTag = g_pFieldInfo->GetFieldInfoByName(szName);
|
|
if (m_pTag == NULL)
|
|
{
|
|
m_szFieldName = szName;
|
|
m_bIsExternal = TRUE;
|
|
}
|
|
else
|
|
{
|
|
m_bIsExternal = FALSE;
|
|
m_lValidationID = -1; // internal validation
|
|
}
|
|
}
|
|
|
|
|
|
VARENUM GetSyntax()
|
|
{
|
|
if (m_bIsExternal) return VT_BSTR;
|
|
return m_pTag->lSyntax;
|
|
}
|
|
|
|
LONG GetFieldID()
|
|
{
|
|
if (m_bIsExternal) return -1;
|
|
return m_pTag->lFieldID;
|
|
}
|
|
|
|
LPCSTR GetFieldName()
|
|
{
|
|
if (!m_bIsExternal) return m_pTag->szField;
|
|
return m_szFieldName;
|
|
}
|
|
|
|
BOOL GetIsRequired() { return m_bIsRequired; }
|
|
void SetIsRequired(BOOL b) { m_bIsRequired = b; }
|
|
|
|
BOOL GetIsExternal() { return m_bIsExternal; }
|
|
|
|
LONG GetSectionID() { return m_lSectionID; }
|
|
void SetSectionID(LONG l) { m_lSectionID = l; }
|
|
|
|
LONG GetValidation() { return m_lValidationID; }
|
|
void SetValidation(LONG l)
|
|
{
|
|
if (GetIsExternal()) m_lValidationID = l;
|
|
}
|
|
|
|
HRESULT GetHRMissing()
|
|
{
|
|
if (GetIsExternal()) E_INVALIDARG;
|
|
|
|
if (m_pTag)
|
|
return m_pTag->hrMissing;
|
|
else
|
|
return S_OK;
|
|
}
|
|
|
|
private:
|
|
PCPROF_FIELD m_pTag; // This variable is stored for performance reason
|
|
// If a tag is passport supported, m_pTag points
|
|
// to g_FieldInfo, which provides Syntax, FieldID,
|
|
// and missing HR.
|
|
|
|
CStringA m_szFieldName; // Store name of a non passport attribute.
|
|
// GetFieldName points to m_pTag->cszField
|
|
// instead of making another copy
|
|
BOOL m_bIsRequired;
|
|
BOOL m_bIsExternal;
|
|
LONG m_lSectionID; // SectionID = -1 && bIsExternal indicates our internal "external item"
|
|
|
|
// validation routine index
|
|
// 0 = no validation
|
|
// -1 = internal validation for passport supported fields
|
|
// > 0 specify a validation routine for external items
|
|
// For internal items, the object that owns the field
|
|
// knows how to validate a particular field ID
|
|
LONG m_lValidationID;
|
|
|
|
|
|
};
|
|
|
|
typedef CAutoPtr<CProfileFieldState> CFieldStatePtr;
|
|
|
|
|
|
|
|
//
|
|
// represent a field into profile. Should be initialized from
|
|
// schema file in XML format ....
|
|
//
|
|
class CProfileField
|
|
{
|
|
public:
|
|
// get the field from the form ....
|
|
CProfileField(CProfileFieldState *pField,
|
|
BOOL fIsRequired = FALSE,
|
|
BOOL fIsDirty = TRUE
|
|
) :
|
|
m_dwErr(S_OK),
|
|
m_pTag(pField),
|
|
// by default the field is set. Mark it not set if
|
|
// necessary
|
|
m_fIsSet(TRUE),
|
|
m_bIsDirty(fIsDirty)
|
|
{
|
|
pField->SetIsRequired(fIsRequired);
|
|
m_lFieldID = pField->GetFieldID();
|
|
// should probably throw an exception if pField is NULL .....
|
|
}
|
|
|
|
// virtual d-tor
|
|
virtual ~CProfileField(){
|
|
}
|
|
|
|
|
|
// and from XML ....
|
|
// and from Cookie ....
|
|
|
|
// get the value ....
|
|
// specific for field types
|
|
// make that class abstract ...
|
|
virtual void GetStringValue(CStringW& Val) = 0;
|
|
virtual void SetStringValue(LPCWSTR Val) = 0;
|
|
HRESULT GetErrorCode()
|
|
{
|
|
return m_dwErr;
|
|
}
|
|
//
|
|
// external validation setting errcodes ...
|
|
//
|
|
void SetErrorCode(HRESULT hr)
|
|
{
|
|
m_dwErr = hr;
|
|
}
|
|
|
|
//
|
|
// Wrappers on CProfileFieldState when m_pTag is been invalidated
|
|
// When no FieldState is provided
|
|
//
|
|
VARENUM GetSyntax()
|
|
{
|
|
if (m_pTag) return m_pTag->GetSyntax();
|
|
|
|
PCPROF_FIELD ppf = g_pFieldInfo->GetFieldInfoByID(m_lFieldID);
|
|
if (!ppf) return VT_BSTR;
|
|
return ppf->lSyntax;
|
|
}
|
|
|
|
LONG GetFieldID()
|
|
{
|
|
return m_lFieldID;
|
|
}
|
|
|
|
LPCSTR GetFieldName()
|
|
{
|
|
if (m_pTag) return m_pTag->GetFieldName();
|
|
|
|
PCPROF_FIELD ppf = g_pFieldInfo->GetFieldInfoByID(m_lFieldID);
|
|
if (!ppf) return NULL;
|
|
return ppf->szField;
|
|
}
|
|
|
|
BOOL GetIsRequired()
|
|
{
|
|
if (m_pTag) return m_pTag->GetIsRequired();
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL GetIsExternal()
|
|
{
|
|
if (m_pTag == NULL) return FALSE;
|
|
return m_pTag->GetIsExternal();
|
|
}
|
|
|
|
LONG GetSectionID()
|
|
{
|
|
if (m_pTag == NULL) return -1;
|
|
return m_pTag->GetSectionID();
|
|
}
|
|
|
|
BOOL SetSectionID(LONG l)
|
|
{
|
|
if (m_pTag == NULL) return FALSE;
|
|
m_pTag->SetSectionID(l);
|
|
}
|
|
|
|
LONG GetValidation()
|
|
{
|
|
if (m_pTag == NULL) return -1; // internal validation
|
|
return m_pTag->GetValidation();
|
|
}
|
|
|
|
BOOL SetValidation(LONG l)
|
|
{
|
|
if (m_pTag == NULL) return FALSE;
|
|
// overwrite validation when when it is external
|
|
if (m_pTag->GetIsExternal())
|
|
{
|
|
m_pTag->SetValidation(l);
|
|
return TRUE;
|
|
}
|
|
else return FALSE;
|
|
}
|
|
|
|
HRESULT GetHRMissing()
|
|
{
|
|
if (m_pTag->GetIsExternal()) return PP_E_EXTERNALFIELD_BLANK;
|
|
return m_pTag->GetHRMissing();
|
|
}
|
|
|
|
|
|
// set up the item
|
|
virtual HRESULT SetDBItem(CComVariant& v) = 0;
|
|
|
|
//
|
|
// Generate field that does not need runtime FieldState
|
|
// This is used only for passport supported attributes
|
|
//
|
|
//void InvalidateFieldState()
|
|
//{
|
|
// m_pTag = NULL;
|
|
//}
|
|
|
|
BOOL GetIsDirty() { return m_bIsDirty; }
|
|
void SetIsDirty(BOOL b) { m_bIsDirty = b; }
|
|
|
|
|
|
protected:
|
|
HRESULT m_dwErr;
|
|
BOOL m_fIsSet;
|
|
LONG m_lFieldID; // used when m_pTag is not valid
|
|
// used for simple attribute that does not need
|
|
// runtime FieldState, the FieldID
|
|
// gives us access to g_FieldInfo
|
|
|
|
CProfileFieldState *m_pTag;
|
|
|
|
//
|
|
// Used for persistence optimization
|
|
//
|
|
BOOL m_bIsDirty;
|
|
|
|
|
|
};
|
|
|
|
typedef CAutoPtr<CProfileField> CProfFieldPtr;
|
|
|
|
|
|
|
|
|
|
//
|
|
// This interface manages a list of profile fields.
|
|
// Alternatively, field state list can be managed to
|
|
// restrict the list of fields presented.
|
|
//
|
|
class CProfileFieldCollectionBase
|
|
{
|
|
public:
|
|
|
|
virtual ~CProfileFieldCollectionBase(){};
|
|
|
|
// A field is passport supported within the range that this object manages
|
|
virtual BOOL IsFieldSupported(LPCSTR szName) = 0;
|
|
|
|
// FieldName <- -> FieldID ; only for passport supported attributes
|
|
virtual LPCSTR GetFieldNameByID(ULONG lFieldID) = 0;
|
|
virtual LONG GetIDByFieldName(LPCSTR szName) = 0;
|
|
|
|
// Retrive a field
|
|
virtual CProfileField* GetField(LPCSTR szName) = 0;
|
|
virtual CProfileFieldState* GetFieldState(LPCSTR szName) = 0;
|
|
virtual HRESULT GetFieldStateCount(LONG& lCount) =0;
|
|
|
|
virtual HRESULT GetFieldValue(LPCSTR szName, CStringW& cswValue) = 0;
|
|
virtual HRESULT GetFieldValue(LPCSTR szName, LONG& lValue) = 0;
|
|
virtual HRESULT GetFieldValue(LPCSTR szName, CComBSTR& bstrValue) = 0;
|
|
virtual HRESULT GetFieldError(LPCSTR szName) = 0;
|
|
|
|
virtual HRESULT SetFieldError(LPCSTR szName, HRESULT h) =0;
|
|
virtual HRESULT GetFieldErrorCount(LONG& lCount) =0;
|
|
|
|
// Validation
|
|
virtual LONG Validate() = 0;
|
|
virtual HRESULT Validate(CProfileField *ppf) = 0;
|
|
virtual LONG ValidateSection(LONG lSectionNum)=0;
|
|
|
|
// Field management
|
|
virtual HRESULT UpdateField(LPCSTR cszName, LPCWSTR cszValue)=0;
|
|
virtual HRESULT UpdateField(LPCSTR cszName, LONG lValue)=0;
|
|
virtual HRESULT AddField(LPCSTR cszName, PCWSTR value)=0;
|
|
virtual HRESULT DeleteField(LPCSTR cszName)=0;
|
|
|
|
// DB initialization
|
|
virtual HRESULT InitFromDB(LARGE_INTEGER PUID, CStringW cswCredName)=0;
|
|
virtual HRESULT Persist(LARGE_INTEGER& PUID, CStringW& cswCredName, BOOL bInsert)=0;
|
|
|
|
// Web initialization
|
|
virtual HRESULT InitFromHTMLForm(CHttpRequest& request)=0;
|
|
virtual HRESULT InitFromQueryString(CHttpRequest& request)=0;
|
|
virtual HRESULT InitFromXML(IXMLDOMDocument *pXMLDoc)=0;
|
|
|
|
|
|
// Save all fields in XML format and append to szProfileXML
|
|
virtual HRESULT SaveToXML(CStringA &szProfileXML) = 0;
|
|
//
|
|
// Manage FieldStates.
|
|
// It stores a list of fields requirements.
|
|
// Used when only a subset of fields belonging to the category are needed
|
|
//
|
|
virtual HRESULT InitFieldStates()=0;
|
|
//virtual HRESULT AddFieldState(LONG lFieldID, bool bRequired = true)=0;
|
|
virtual HRESULT AddFieldState(LPCSTR szName, bool bRequired = true, bool bExternal = false)=0;
|
|
//virtual HRESULT DeleteFieldState(LONG lFieldID)=0;
|
|
virtual HRESULT DeleteFieldState(LPCSTR szsName)=0;
|
|
virtual HRESULT DeleteFieldStates()=0;
|
|
|
|
virtual HRESULT StartEnumFields(POSITION &pos)=0;
|
|
virtual HRESULT GetNextField(POSITION& pos, CStringA& fname, CStringW& fvalue)=0;
|
|
virtual HRESULT StartEnumErrors(POSITION& pos)=0;
|
|
virtual HRESULT GetNextError(POSITION& pos, CStringA& fname, HRESULT& fhr)=0;
|
|
|
|
|
|
};
|
|
|
|
|
|
// In DB,
|
|
// set @si_ProfileCategory = 1
|
|
// set @si_SystemCategory = 2
|
|
// set @si_ProfileConsentCategory = 3
|
|
//(never change) defined in DB
|
|
typedef enum _tagProfileCategory
|
|
{
|
|
PROFCAT_INVALID = -1,
|
|
PROFCAT_FIRST=0,
|
|
PROFCAT_CREDENTIAL = PROFCAT_FIRST, // 0
|
|
PROFCAT_PROFILE, // 1
|
|
PROFCAT_SYSTEM, // 2
|
|
PROFCAT_PROFILECONSENT, // 3
|
|
PROFCAT_CREDENTIALCONSENT, // 4
|
|
PROFCAT_SYSTEMCONSENT, // 5
|
|
PROFCAT_VOLATILE, // 6
|
|
PROFCAT_LAST,
|
|
|
|
} PROFILE_CATEGORY;
|
|
|
|
#define PROFCAT_NUM 3
|
|
|
|
typedef enum _tagCredentialType
|
|
{
|
|
PROFCRED_INVALID = -1,
|
|
PROFCRED_FIRST=0,
|
|
PROFCRED_EMAIL = PROFCAT_FIRST, // email, password
|
|
PROFCRED_EMAILSQA, // email, password, secret question, secret answer
|
|
PROFCRED_MOBILE, // phone, pin
|
|
// PROFCRED_EMAIL3SQA, // email, password, SQ1, SA1, SQ2, SA2, SQ3, SA3
|
|
PROFCRED_3SQAPIN, // SQ1, SA1, SQ2, SA2, SQ3, SA3, PIN, SA1_Verify, SA2_Verify, SA3_Verify
|
|
PROFCRED_LAST,
|
|
} PROFILE_CREDENTIALTYPE;
|
|
|
|
|
|
//
|
|
// user profile interface. An abstract class ...
|
|
//
|
|
class CUserProfileBase : public CProfileFieldCollectionBase
|
|
{
|
|
public:
|
|
// this need to be defined for the autoptr ....
|
|
// all other functions are pure virtual
|
|
virtual ~CUserProfileBase(){};
|
|
|
|
//*******************************************************************
|
|
// CProfileFieldCollectionBase interface to access to fields
|
|
//
|
|
// A field is passport supported within the range that this object manages
|
|
virtual BOOL IsFieldSupported(LPCSTR szName) = 0;
|
|
|
|
// FieldName <- -> FieldID ; only for passport supported attributes
|
|
virtual LPCSTR GetFieldNameByID(ULONG lFieldID) = 0;
|
|
virtual LONG GetIDByFieldName(LPCSTR szName) = 0;
|
|
|
|
// Retrive a field
|
|
virtual CProfileField* GetField(LPCSTR szName) = 0;
|
|
virtual CProfileFieldState* GetFieldState(LPCSTR szName) = 0;
|
|
virtual HRESULT GetFieldStateCount(LONG& lCount) =0;
|
|
|
|
virtual HRESULT GetFieldValue(LPCSTR szName, CStringW& cswValue) = 0;
|
|
virtual HRESULT GetFieldValue(LPCSTR szName, LONG& lValue) = 0;
|
|
virtual HRESULT GetFieldValue(LPCSTR szName, CComBSTR& bstrValue) = 0;
|
|
virtual HRESULT GetFieldError(LPCSTR szName) = 0;
|
|
|
|
virtual HRESULT SetFieldError(LPCSTR szName, HRESULT h) =0;
|
|
virtual HRESULT GetFieldErrorCount(LONG& lCount) =0;
|
|
|
|
// Validation
|
|
virtual LONG Validate() = 0;
|
|
virtual HRESULT Validate(CProfileField *ppf) = 0;
|
|
|
|
// Field management
|
|
virtual HRESULT UpdateField(LPCSTR cszName, LPCWSTR cszValue)=0;
|
|
virtual HRESULT UpdateField(LPCSTR cszName, LONG lValue)=0;
|
|
virtual HRESULT AddField(LPCSTR cszName, PCWSTR value)=0;
|
|
virtual HRESULT DeleteField(LPCSTR cszName)=0;
|
|
|
|
// DB initialization
|
|
virtual HRESULT InitFromDB(LARGE_INTEGER PUID, CStringW cswCredName)=0;
|
|
virtual HRESULT Persist(LARGE_INTEGER& PUID, CStringW& cswCredName, BOOL bInsert)=0;
|
|
|
|
// Web initialization
|
|
virtual HRESULT InitFromHTMLForm(CHttpRequest& request)=0;
|
|
virtual HRESULT InitFromQueryString(CHttpRequest& request)=0;
|
|
virtual HRESULT InitFromXML(IXMLDOMDocument *pXMLDoc)=0;
|
|
|
|
|
|
// Save all fields in XML format and append to szProfileXML
|
|
virtual HRESULT SaveToXML(CStringA &szProfileXML) = 0;
|
|
//
|
|
// Manage FieldStates.
|
|
// It stores a list of fields requirements.
|
|
// Used when only a subset of fields belonging to the category are needed
|
|
//
|
|
virtual HRESULT InitFieldStates(LONG lSiteID, CStringA cszDevice, CSite* in_pCSite = NULL, BOOL bIsService = FALSE)=0;
|
|
//virtual HRESULT AddFieldState(LONG lFieldID, bool bRequired = true)=0;
|
|
virtual HRESULT AddFieldState(LPCSTR szName, bool bRequired = true, bool bExternal = false)=0;
|
|
//virtual HRESULT DeleteFieldState(LONG lFieldID)=0;
|
|
virtual HRESULT DeleteFieldState(LPCSTR szsName)=0;
|
|
virtual HRESULT DeleteFieldStates()=0;
|
|
|
|
virtual HRESULT StartEnumFields(POSITION &pos)=0;
|
|
virtual HRESULT GetNextField(POSITION& pos, CStringA& fname, CStringW& fvalue)=0;
|
|
virtual HRESULT StartEnumErrors(POSITION& pos)=0;
|
|
virtual HRESULT GetNextError(POSITION& pos, CStringA& fname, HRESULT& fhr)=0;
|
|
|
|
//
|
|
//
|
|
//
|
|
//**********************************************************************
|
|
|
|
// Set Dictionary, Locale or Regional Information for Validation purpose
|
|
virtual void SetDictionaryObject(IDictionaryEx *ppiDict)=0;
|
|
virtual IDictionaryEx* GetDictionaryObject()=0;
|
|
|
|
virtual void SetLCID(LCID lc)=0;
|
|
virtual LCID GetLCID()=0;
|
|
#if 0
|
|
// Maintain fields version
|
|
virtual void SetVersion(LONG l)=0;
|
|
virtual LONG GetVersion()=0;
|
|
#endif
|
|
virtual PROFILE_CATEGORY GetCategory(LPCSTR szFieldName)=0;
|
|
|
|
|
|
// debug method
|
|
virtual void Dump(PROFILE_CATEGORY cat, CStringA& dump) = 0;
|
|
#if 0
|
|
// get/set namespace
|
|
virtual HRESULT GetProfileNamespace(CStringW& strNameSpace) = 0;
|
|
virtual void SetProfileNamespace(PCWSTR cszNameSpace) = 0;
|
|
#endif
|
|
// get/set credential type
|
|
virtual void SetCredentialType(PROFILE_CREDENTIALTYPE t) = 0;
|
|
virtual PROFILE_CREDENTIALTYPE GetCredentialType() =0;
|
|
virtual HRESULT GetCredentialFieldName(CStringA& cszCredential) =0;
|
|
virtual HRESULT GetCredResponseFieldName(CStringA& cszCredResponse) =0;
|
|
// virtual BOOL Credential2PUID(LPCWSTR szMemberName, LARGE_INTEGER& PUID)=0;
|
|
|
|
// consent
|
|
virtual HRESULT GetConsent(LPCSTR cszFieldName, BOOL& bHasConsent)=0;
|
|
virtual HRESULT SetConsent(LPCSTR cszFieldName, BOOL bHasConsent)=0;
|
|
|
|
// get a list of External fields for generating ticket/cookie
|
|
virtual HRESULT GetExternalProfileFields(CAtlArray<CStringA *>& pArray)=0;
|
|
|
|
//$$ Should move to global caching later
|
|
// Initialize Global Meta Info
|
|
// virtual HRESULT InitGlobalMetaDataInfo()=0;
|
|
|
|
// Enumeration: to control which category to enumerate
|
|
virtual void SetEnumerationCategory(PROFILE_CATEGORY cat) =0;
|
|
|
|
// Backward Compatibility
|
|
virtual HRESULT GetSystemFlag_backward(LONG& lFlags) = 0;
|
|
virtual HRESULT GetDirectoryFlag_backward(LONG& lFlags) = 0;
|
|
virtual HRESULT GetSystemMiscFlag_backward(LONG& lFlags) = 0;
|
|
|
|
// Retrieve error for last calling GetFieldValue
|
|
virtual LPCWSTR GetStringFieldValue(LPCSTR szName) = 0;
|
|
virtual DATE GetDateFieldValue(LPCSTR szName) = 0;
|
|
virtual LONG GetLongFieldValue(LPCSTR szName) = 0;
|
|
virtual HRESULT GetLastFieldError() = 0;
|
|
|
|
// Fine Tune category action control
|
|
virtual LONG GetTaskMask() = 0;
|
|
virtual void SetTaskMask(LONG l) = 0;
|
|
|
|
// PUID access
|
|
virtual LARGE_INTEGER GetPUID() = 0;
|
|
virtual void GetPUID(LONG& lHigh, LONG& lLow)=0;
|
|
virtual void SetPUID(LARGE_INTEGER l) = 0;
|
|
virtual void SetPUID(LONG lHigh, LONG lLow) = 0;
|
|
|
|
// DB flags access
|
|
virtual void SetDBIsActive(BOOL b) = 0;
|
|
virtual void SetDBIsManaged(BOOL b) = 0;
|
|
virtual void SetDBIsOverwrite(BOOL b) = 0;
|
|
virtual void SetDBIsCaseSensitive(BOOL b) = 0;
|
|
virtual void SetDBAdminPUID(LARGE_INTEGER PUID)=0;
|
|
|
|
virtual BOOL GetDBIsActive() = 0;
|
|
virtual BOOL GetDBIsManaged() = 0;
|
|
virtual BOOL GetDBIsOverwrite() = 0;
|
|
virtual BOOL GetDBIsCaseSensitive() = 0;
|
|
virtual LARGE_INTEGER GetDBAdminPUID()=0;
|
|
|
|
// Wizard Section Processing
|
|
virtual LONG GetSectionCount()=0;
|
|
virtual HRESULT GetDeviceAttribute(CStringA szName, CStringW& wszValue)=0;
|
|
|
|
// Set ProfileFieldInfo -- replacing InitGlobalMetaData
|
|
// init per app instead of per request
|
|
virtual void SetProfileFieldInfo(CProfileFieldInfo *p) = 0;
|
|
|
|
// Check whether a field is a volatile passport field
|
|
virtual BOOL IsFieldPassportVolatile(LPCSTR szName) = 0;
|
|
|
|
// Delete Member
|
|
virtual HRESULT DeleteMember(LARGE_INTEGER PUID, CStringW &wszMemberName) = 0;
|
|
|
|
// in order to make sure Persist does MemberName conversion
|
|
virtual HRESULT GetDisplayMemberName(CStringW& cswMemberName) = 0;
|
|
virtual HRESULT GetInternalName(BOOL bEASI, LPCWSTR m_cswNameSpace, CStringW& cswName) = 0;
|
|
|
|
// IsEASI for managed domain member exclusion validation
|
|
virtual BOOL GetIsEASI() = 0;
|
|
virtual void SetIsEASI(BOOL b) = 0;
|
|
};
|
|
|
|
|
|
//
|
|
// Global validation function
|
|
//
|
|
BOOL VL_IsDropDownMissing(CProfileField *pField);
|
|
|
|
//
|
|
// wrapper for the abstract class. Use it to get
|
|
// CUserProfile* interface
|
|
//
|
|
class CUserProfileWrapper2 : public CAutoPtr<CUserProfileBase>
|
|
{
|
|
public:
|
|
CUserProfileWrapper2();
|
|
};
|
|
|
|
|
|
#define PROFILE_TASK_PROFILE 0x00000001
|
|
#define PROFILE_TASK_SYSTEM 0x00000002
|
|
#define PROFILE_TASK_PROFILECONSENT 0x00000004
|
|
#define PROFILE_TASK_SYSTEMCONSENT 0x00000008
|
|
#define PROFILE_TASK_CREDENTIALCONSENT 0x00000010
|
|
|
|
#define PROFILE_TASK_CREDENTIAL_ANY(l) ( l >= 10000 )
|
|
|
|
#define PROFILE_TASK_CREDENTIAL_NEW 0x00010000
|
|
#define PROFILE_TASK_CREDENTIAL_ADD_ADDITIONAL 0x00020000
|
|
#define PROFILE_TASK_CREDENTIAL_UPDATE 0x00040000
|
|
#define PROFILE_TASK_CREDENTIAL_RENAME 0x00080000
|
|
|
|
|
|
|