![]() |
AnyConnect Secure Mobility Client 5.1.9.113
|
00001 /************************************************************************** 00002 * Copyright (c) 2008, 2022-2024 Cisco Systems, Inc. 00003 * All Rights Reserved. Cisco Highly Confidential. 00004 *************************************************************************** 00005 * 00006 * File: PromptEntryBase.h 00007 * Date: 01/2008 00008 * 00009 *************************************************************************** 00010 * Prompt Entry base class implementation for the Client API. 00011 ***************************************************************************/ 00012 00013 #ifndef _PROMPTENTRYBASE_ 00014 #define _PROMPTENTRYBASE_ 00015 00016 00017 #include "api.h" 00018 #include <list> 00019 #include <unordered_set> 00020 00021 00022 #define PROMPT_ENTRY_VALUE_TRUE _T("true") 00023 #define PROMPT_ENTRY_VALUE_FALSE _T("false") 00024 00025 class VPN_VPNAPI PromptEntryBase 00026 { 00027 public: 00028 00029 bool setValue(const tstring& value); 00030 bool clearValue(); 00031 00032 const tstring &getPromptName() const; 00033 00034 const tstring &getPromptLabel() const; 00035 00036 bool isEnabled() const; 00037 00038 void setEnabled(bool bIsEnabled); 00039 00040 bool isVisible() const; 00041 00042 void setVisible(bool bIsVisible); 00043 00044 // if this is a PromptEntry that has a list of values 00045 // (e.g. combo box style) the default will be to mark it as a group 00046 // combo. This method allows the group designation to be set directly. 00047 // 00048 void setEntryGroup(bool bIsEntryGroup); 00049 00050 00051 PromptEntryBase(tstring PromptName, 00052 tstring PromptLabel, 00053 PromptType promptType = Prompt_Input, 00054 const tstring& DefaultValue = EmptyString, 00055 ApiStringMap LabelValues = EmptyLabelValues); 00056 00057 00058 void setPromptLabel(tstring label); 00059 00060 // In cases of prompt types with options (checkbox, combobox), 00061 // this will return the translated label (of the option). 00062 const tstring &getValue() const; 00063 00064 // this function returns the internal representation of the value 00065 const tstring &getTrueValue() const; 00066 00067 const std::list<tstring> &getValueOptions() const; 00068 00069 bool isEntryGroup() const; 00070 00071 bool isReadOnly() const; 00072 00073 PromptType getPromptType() const; 00074 00075 size_t GetGroupAttributesCount(); 00076 00077 00078 virtual ~PromptEntryBase(); 00079 00080 static const tstring EmptyString; 00081 00082 static const std::list<tstring> EmptyList; 00083 00084 static const ApiStringMap EmptyLabelValues; 00085 00086 // Deep Copy Assignment Operator 00087 // 00088 PromptEntryBase& operator=(const PromptEntryBase& existingEntry) 00089 { 00090 return deepCopy(existingEntry); 00091 } 00092 00093 // Deep Copy Constructor 00094 // 00095 explicit PromptEntryBase(const PromptEntryBase& existingEntry) 00096 { 00097 deepCopy(existingEntry); 00098 } 00099 00100 00101 private: 00102 00103 PromptEntryBase& deepCopy(const PromptEntryBase& existingEntry); 00104 00105 tstring ms_PromptName; 00106 tstring ms_PromptLabel; 00107 PromptType me_PromptType; 00108 tstring ms_Value; 00109 ApiStringMap msm_LabelValueMap; 00110 std::list<tstring> mls_ValueOptions; 00111 bool mb_IsEntryGroup; 00112 bool mb_Enabled; 00113 bool mb_Visible; 00114 00115 public: 00116 00117 class GroupAttributes 00118 { 00119 public: 00120 GroupAttributes() : 00121 CredRequired(true), 00122 UsesSDIAuth(false), 00123 UsernameEditable(true), 00124 SecondaryUsernameEditable(true), 00125 UsesSecondaryAuth(false) 00126 { 00127 } 00128 00129 // Deep Copy Constructor 00130 // 00131 explicit GroupAttributes( 00132 const GroupAttributes& existingGroupAttr) 00133 { 00134 deepCopy(existingGroupAttr); 00135 } 00136 00137 // Deep Copy Assignment Operator 00138 // 00139 GroupAttributes& operator=( 00140 const GroupAttributes& existingGroupAttr) 00141 { 00142 return deepCopy(existingGroupAttr); 00143 } 00144 00145 bool CredRequired; 00146 bool UsesSDIAuth; 00147 bool UsernameEditable; 00148 tstring Username; 00149 bool SecondaryUsernameEditable; 00150 tstring SecondaryUsername; 00151 bool UsesSecondaryAuth; 00152 00153 private: 00154 GroupAttributes& deepCopy(const GroupAttributes& existingGroupAttr) 00155 { 00156 if (std::addressof(existingGroupAttr) != this) 00157 { 00158 CredRequired = existingGroupAttr.CredRequired; 00159 UsesSDIAuth = existingGroupAttr.UsesSDIAuth; 00160 UsernameEditable = existingGroupAttr.UsernameEditable; 00161 Username = existingGroupAttr.Username.c_str(); 00162 SecondaryUsernameEditable = existingGroupAttr.SecondaryUsernameEditable; 00163 SecondaryUsername = existingGroupAttr.SecondaryUsername.c_str(); 00164 UsesSecondaryAuth = existingGroupAttr.UsesSecondaryAuth; 00165 } 00166 return *this; 00167 } 00168 }; 00169 00170 class SingleAttributes 00171 { 00172 public: 00173 SingleAttributes() : 00174 SecondaryAuthEntry(false), 00175 SSOTimeoutSeconds(0), 00176 SSOIsExternalBrowser(false) 00177 { 00178 } 00179 00180 // Deep Copy Constructor 00181 // 00182 explicit SingleAttributes( 00183 const SingleAttributes& existingSingleAttr) 00184 { 00185 deepCopy(existingSingleAttr); 00186 } 00187 00188 // Deep Copy Assignment Operator 00189 // 00190 SingleAttributes& operator=( 00191 const SingleAttributes& existingSingleAttr) 00192 { 00193 return deepCopy(existingSingleAttr); 00194 } 00195 00196 bool SecondaryAuthEntry; 00197 tstring SSOURL; 00198 tstring SSOFinalURL; 00199 tstring SSOTokenCookieName; 00200 tstring SSOErrorCookieName; 00201 unsigned int SSOTimeoutSeconds; 00202 tstring SSOUserAgent; 00203 bool SSOIsExternalBrowser; 00204 std::unordered_set<tstring> SSOClientCertReqIgnoredFqdns; 00205 00206 private: 00207 SingleAttributes& deepCopy(const SingleAttributes& existingSingleAttr) 00208 { 00209 if (std::addressof(existingSingleAttr) != this) 00210 { 00211 SecondaryAuthEntry = existingSingleAttr.SecondaryAuthEntry; 00212 SSOURL = existingSingleAttr.SSOURL.c_str(); 00213 SSOFinalURL = existingSingleAttr.SSOFinalURL.c_str(); 00214 SSOTokenCookieName = existingSingleAttr.SSOTokenCookieName.c_str(); 00215 SSOErrorCookieName = existingSingleAttr.SSOErrorCookieName.c_str(); 00216 SSOTimeoutSeconds = existingSingleAttr.SSOTimeoutSeconds; 00217 SSOUserAgent = existingSingleAttr.SSOUserAgent.c_str(); 00218 SSOIsExternalBrowser = existingSingleAttr.SSOIsExternalBrowser; 00219 for (const auto& fqdn : existingSingleAttr.SSOClientCertReqIgnoredFqdns) 00220 { 00221 SSOClientCertReqIgnoredFqdns.insert(fqdn.c_str()); 00222 } 00223 } 00224 return *this; 00225 } 00226 }; 00227 00228 typedef std::map<tstring, GroupAttributes> GroupAttributesMap; 00229 00230 const GroupAttributes& getGroupAttributes(const tstring& group) const; 00231 void setGroupAttributesMap(const GroupAttributesMap& groupAttributesMap); 00232 00233 const SingleAttributes& getSingleAttributes() const; 00234 void setSingleAttributes(const SingleAttributes& singleAttributes); 00235 00236 private: 00237 00238 void copyGroupAttributesMap (const GroupAttributesMap &srcMap, 00239 GroupAttributesMap &dstMap); 00240 00241 static const GroupAttributes DefaultGroupAttributes; 00242 GroupAttributesMap m_GroupAttributesMap; 00243 SingleAttributes m_SingleAttributes; 00244 }; 00245 00246 00247 #endif // _PROMPTENTRYBASE_