File: Config.h

package info (click to toggle)
beid 3.5.2.dfsg-10
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 147,240 kB
  • ctags: 34,507
  • sloc: cpp: 149,944; ansic: 41,577; java: 8,927; cs: 6,528; sh: 2,426; perl: 1,866; xml: 805; python: 463; makefile: 263; lex: 92
file content (344 lines) | stat: -rw-r--r-- 18,728 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
/* ****************************************************************************

 * eID Middleware Project.
 * Copyright (C) 2008-2009 FedICT.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License version
 * 3.0 as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, see
 * http://www.gnu.org/licenses/.

**************************************************************************** */
#pragma once

#include "Export.h"
#include <string>
#include "Mutex.h"
#include "datafile.h"

/** \file Config.h
Class to set and get configuration-data from the registry(Windows) or the ini-file(Linux and Mac).

\todo
replace $install by string in install parameter


\section Description
- The build-file determinates if the registry(configReg.cpp) or the ini-file(config.cpp) is used for data-storage.
  The project-file determinates the specific location inside the registry/ini-file.

- GetString retrieves data from the registry/ini-file.
- SetString writes data into the registry/ini-file.

- You can specify a default value for each Getxxxx.  The default value is returned in case that the specified key does not exist.
- Getxxx will first search in the HKEY_CURRENT_USER/CurrentUser  section, 
  the HKEY_LOCAL_MACHINE/AllUsers is searched secondly in case that the key was not found.
  The error "invalid_argument" is thrown when the key is not found and no default valued is specified.


  -> overview of the functional requirements in function of the storage location: Windows registry or ini-file (apple/linux)
<PRE>

                                                Registry                                 Ini-file
    +------------------------------------------+----------------------------------------+--------------------------------+
    Hardcoded in the project-file:              location in registry                     ini-file name & path
                                                
                                       
    GetString(                         
        const std::wstring & csKey,              key                                      key
        const std::wstring & section             1 directory-level                        1 level of [section]
            )                          
                                                Search first in HKEY_CURRENT_USER,      Search first in "Current Users"
                                                then in HKEY_LOCAL_MACHINE                then in "All User"
                                       
    SetString(                         
        tLocation location,                     SYSTEM -> HKEY_LOCAL_MACHINE\...         SYSTEM -> "All Users"
                                                USER   -> HKEY_CURRENT_USER\...          USER   -> "Current User"
                                       
        const std::wstring & csKey,              key                                      key 
        const std::wstring & section,            value-name, 1 directory-level            1 level of [section]
        const std::wstring & csValue             value                                    value
            )                          


    DelString(                         
        tLocation location,                     SYSTEM -> HKEY_LOCAL_MACHINE\...         SYSTEM -> "All Users"
                                                USER   -> HKEY_CURRENT_USER\...          USER   -> "Current User"
                                       
        const std::wstring & csKey,              key                                      key 
        const std::wstring & section,            directory, max 1 level                   [section], max 1 level
            )                          

    +------------------------------------------+----------------------------------------+--------------------------------+
</PRE>

-> overview of the Windows registry calls:

    RegOpenKeyEx    open key
    RegCreateKeyEx  create key
    RegCloseKey     close (not always flush)

    RegEnumKeyEx    get sub-keys for one key
    RegQueryInfoKey get data of particular subkey

    RegEnumValue    enum all the value-names
    RegQueryValueEx get the data for one value
    RegGetValue     get the data for one value, strings are always 0-terminated : only on win server... !!!
    RegSetValueEx   set the data for one value
    
    RegDeleteValue  delete key-value

    REG_DWORD  A 32-bit number. 
    REG_QWORD  a 64-bit number
    REG_SZ     0-terminated wstring


-> implemenation design

    write:
    - construct full path
    - create key
    - write data

    read: 
    - construct path.sys (in the system section)
    - check if key present
    - if no key present yet, construct path.user (in the user section)
                check if key present
    - return error if not found

    delete:
    - construct path
    - delete key
    - return error if not found

*/

#define EIDMW_CNF_MACRO_INSTALL         L"$install"             //installation directory
#define EIDMW_CNF_MACRO_HOME            L"$home"                //user home directory, $common is taken when used for processes without user (eg. services)
#define EIDMW_CNF_MACRO_COMMON          L"$common"              //directory readable/writable for every user, used for shared files like the CRLs

#define EIDMW_CNF_MACRO_COMMON_SUBDIR	L"beid"					//this subdirectory is part of the common

#define EIDMW_CNF_SECTION_GENERAL       L"general"              //section with the general pupose parameters
#define EIDMW_CNF_GENERAL_INSTALLDIR    L"install_dirname"      //string, directory of the basic eid software; c:/Program Files/beid/
#define EIDMW_CNF_GENERAL_INSTALL_PRO_DIR L"install_pro_dirname"  //string, directory of the pro eid software; c:/Program Files/beid/
#define EIDMW_CNF_GENERAL_INSTALL_SDK_DIR L"install_sdk_dirname"  //string, directory of the sdk eid software; c:/Program Files/beid/
#define EIDMW_CNF_GENERAL_CACHEDIR      L"cache_dirname"        //string, cache directory for card-file; $common/beid/crlcache/
#define EIDMW_CNF_GENERAL_LANGUAGE      L"language"             //string, user lanugage: fr, nl, en, de, es,  
#define EIDMW_CNF_GENERAL_CARDTXDELAY   L"card_transmit_delay"  //number, delay while communicating with the smartcard, in mili-seconds, default 1 mSec
#define EIDMW_CNF_GENERAL_CARDCONNDELAY L"card_connect_delay"   //number, delay before connecting to a smartcard, in mili-seconds, default 0 mSec
#define EIDMW_CNF_GENERAL_BUILDNBR		L"build_number"			//Number of the installed build

#define EIDMW_CNF_SECTION_LOGGING       L"logging"              //section with the logging parameters
#define EIDMW_CNF_LOGGING_DIRNAME       L"log_dirname"          //string, location of the log-file; $home/beid/	Full path with volume name.
#define EIDMW_CNF_LOGGING_PREFIX		L"log_prefix"			//string, prefix of the log files
#define EIDMW_CNF_LOGGING_FILENUMBER    L"log_filenumber"       //number, Maximum number of log-files; 3
#define EIDMW_CNF_LOGGING_FILESIZE      L"log_filesize"         //number, Maximum file size in bytes; 100000
#define EIDMW_CNF_LOGGING_LEVEL         L"log_level"            //string, Specify what should be logged; none, critical, error, warning, info or debug
#define EIDMW_CNF_LOGGING_GROUP			L"log_group_in_new_file"//number; 0=no (default), 1=yes (create on log file by module)

#define EIDMW_CNF_SECTION_CRL           L"crl"                      //section with the crl parameters
#define EIDMW_CNF_CRL_SERVDOWNLOADNR    L"crl_service_download_nr"  //number
#define EIDMW_CNF_CRL_TIMEOUT           L"crl_download_timeout"     //number, in seconds ??
#define EIDMW_CNF_CRL_CACHEFILE         L"crl_cachefile"            //string
#define EIDMW_CNF_CRL_CACHEDIR          L"crl_cachedir"             //string	$common/crl/
#define EIDMW_CNF_CRL_LOCKFILE          L"crl_lockfile"             //string

#define EIDMW_CNF_SECTION_CERTVALID     L"certificatevalidation"    //section with the certificate validation parameters
#define EIDMW_CNF_CERTVALID_ALLOWTESTC  L"cert_allow_testcard"      //number; 0=no, 1=yes
#define EIDMW_CNF_CERTVALID_CRL			L"cert_validation_crl"      //number; 0=no, 1=optional, 2=always
#define EIDMW_CNF_CERTVALID_OCSP		L"cert_validation_ocsp"     //number; 0=no, 1=optional, 2=always

#define EIDMW_CNF_SECTION_CERTCACHE     L"certificatecache"         //section with the certificate cache parameters
#define EIDMW_CNF_CERTCACHE_CACHEFILE   L"cert_cachefile"           //number; 0=no, 1=yes, If true, will read certain files (or most parts of them) on the card only the first time a card is used and cache their contents on disk for later use.
#define EIDMW_CNF_CERTCACHE_LINENUMB    L"cert_cache_linenumb"        //number
#define EIDMW_CNF_CERTCACHE_VALIDITY    L"cert_cache_validity"      //number
#define EIDMW_CNF_CERTCACHE_WAITDELAY   L"cert_cache_waitdelay"     //number

#define EIDMW_CNF_SECTION_PROXY         L"proxy"                    //section with the proxy parameters
#define EIDMW_CNF_PROXY_HOST            L"proxy_host"               //string; 
#define EIDMW_CNF_PROXY_PORT            L"proxy_port"               //number
#define EIDMW_CNF_PROXY_PACFILE         L"proxy_pacfile"            //string; 
#define EIDMW_CNF_PROXY_CONNECT_TIMEOUT  L"connect_timeout"          //number

#define EIDMW_CNF_SECTION_SECURITY      L"security"                 //section with the security parameters
#define EIDMW_CNF_SECURITY_SINGLESIGNON L"single_signon"            //number; 0=no, 1=yes; If yes, the PIN is requested by the driver and asked only once with multiple applications.

#define EIDMW_CNF_SECTION_GUITOOL       L"configuretool"            //section with the configure tool parameters
#define EIDMW_CNF_GUITOOL_STARTWIN      L"start_with_windows"       //number; 0=no(default), 1=yes
#define EIDMW_CNF_GUITOOL_STARTMINI     L"start_minimized"          //number; 0=no(default), 1=yes
#define EIDMW_CNF_GUITOOL_SHOWPIC       L"show_picture"             //number; 0=no(default), 1=yes
#define EIDMW_CNF_GUITOOL_SHOWNOTIFICATION  L"show_notification"    //number; 0=no, 1=yes(default)
#define EIDMW_CNF_GUITOOL_SHOWTBAR      L"show_toolbar"             //number; 0=no, 1=yes
#define EIDMW_CNF_GUITOOL_VIRTUALKBD    L"use_virtual_keypad"       //number; 0=no, 1=yes
#define EIDMW_CNF_GUITOOL_AUTOCARDREAD  L"automatic_cardreading"    //number; 0=no, 1=yes(default)
#define EIDMW_CNF_GUITOOL_CARDREADNUMB  L"cardreader"               //number; -1(not specified), 0-10	
#define EIDMW_CNF_GUITOOL_REGCERTIF     L"registrate_certificate"   //number; 0=no, 1=yes(default)
#define EIDMW_CNF_GUITOOL_REMOVECERTIF  L"remove_certificate"       //number; 0=no, 1=yes(default)
#define EIDMW_CNF_GUITOOL_FILESAVE		L"default_save_path"        //string; path, ""(default)

#define EIDMW_CNF_SECTION_XSIGN			L"xsign"					//section for xsign
#define EIDMW_CNF_XSIGN_TSAURL			L"tsa_url"					//string url of the tsa
#define EIDMW_CNF_XSIGN_ONLINE			L"online"					//number; 0=no(default), 1=yes
#define EIDMW_CNF_XSIGN_WORKINGDIR		L"working_dir"				//string working directory
#define EIDMW_CNF_XSIGN_TIMEOUT			L"timeout"					//number; 


namespace eIDMW
{

#ifdef WIN32
#define WDIRSEP L"\\"
#else
#define WDIRSEP L"/"
#endif


/** Class to set and get configuration-data from the registry(Windows) or the ini-file(Linux and Mac).
*/
class EIDMW_CMN_API CConfig
{
public:
    typedef enum
    {
        SYSTEM,
        USER,
    } tLocation;

	struct Param_Str
	{
		const wchar_t *csSection;
		const wchar_t *csParam;
		const wchar_t *csDefault;
	};

	struct Param_Num
	{
		const wchar_t *csSection;
		const wchar_t *csParam;
		const long lDefault;
	};

	CConfig();
	~CConfig();

#ifndef WIN32
    static void Init();
    static std::wstring GetStringInt(const std::wstring &csName, const std::wstring &czSection, bool bExpand);
    static std::wstring GetStringInt(tLocation location, const std::wstring &csName, const std::wstring &czSection, bool bExpand);
#endif

	static std::wstring   GetString(const struct Param_Str param);
    static std::wstring   GetString(const std::wstring &csName, const std::wstring &czSection);
    static std::wstring   GetString(const std::wstring &csName, const std::wstring &czSection, const std::wstring &csDefaultValue, bool bExpand=true);
	static std::wstring   GetString(tLocation location, const struct Param_Str param);
    static std::wstring   GetString(tLocation location, const std::wstring &csName, const std::wstring &czSection);
    static std::wstring   GetString(tLocation location, const std::wstring &csName, const std::wstring &czSection, const std::wstring &csDefaultValue, bool bExpand=true);

	static long           GetLong(  const struct Param_Num param);
    static long           GetLong(  const std::wstring &csName, const std::wstring &czSection);
    static long           GetLong(  const std::wstring &csName, const std::wstring &czSection, long lDefaultValue);
	static long           GetLong(  tLocation location, const struct Param_Num param);
    static long           GetLong(  tLocation location, const std::wstring &csName, const std::wstring &czSection);
    static long           GetLong(  tLocation location, const std::wstring &csName, const std::wstring &czSection, long lDefaultValue);

	static void           SetString(tLocation location, const struct Param_Str param, const std::wstring &csValue);
    static void           SetString(tLocation location, const std::wstring &csName, const std::wstring &czSection, const std::wstring &csValue);
    static void           SetLong(  tLocation location, const struct Param_Num param, long lValue);
    static void           SetLong(  tLocation location, const std::wstring &csName, const std::wstring &czSection, long lValue);

	static void           DelString(tLocation location, const struct Param_Str param);
    static void           DelString(tLocation location, const std::wstring &csName, const std::wstring &czSection);
    static void           DelLong(  tLocation location, const struct Param_Num param);
    static void           DelLong(  tLocation location, const std::wstring &csName, const std::wstring &czSection);

	//GENERAL
    static const struct Param_Str EIDMW_CONFIG_PARAM_GENERAL_INSTALLDIR;
    static const struct Param_Str EIDMW_CONFIG_PARAM_GENERAL_INSTALL_PRO_DIR;
    static const struct Param_Str EIDMW_CONFIG_PARAM_GENERAL_INSTALL_SDK_DIR;
    static const struct Param_Str EIDMW_CONFIG_PARAM_GENERAL_CACHEDIR;
    static const struct Param_Str EIDMW_CONFIG_PARAM_GENERAL_LANGUAGE;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GENERAL_CARDTXDELAY;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GENERAL_CARDCONNDELAY;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GENERAL_BUILDNBR;

    //LOGGING
    static const struct Param_Str EIDMW_CONFIG_PARAM_LOGGING_DIRNAME;
    static const struct Param_Str EIDMW_CONFIG_PARAM_LOGGING_PREFIX;
    static const struct Param_Num EIDMW_CONFIG_PARAM_LOGGING_FILENUMBER;
    static const struct Param_Num EIDMW_CONFIG_PARAM_LOGGING_FILESIZE;
    static const struct Param_Str EIDMW_CONFIG_PARAM_LOGGING_LEVEL;
    static const struct Param_Num EIDMW_CONFIG_PARAM_LOGGING_GROUP;

    //CRL
    static const struct Param_Num EIDMW_CONFIG_PARAM_CRL_SERVDOWNLOADNR;
    static const struct Param_Num EIDMW_CONFIG_PARAM_CRL_TIMEOUT;
    static const struct Param_Str EIDMW_CONFIG_PARAM_CRL_CACHEDIR;
    static const struct Param_Str EIDMW_CONFIG_PARAM_CRL_CACHEFILE;
    static const struct Param_Str EIDMW_CONFIG_PARAM_CRL_LOCKFILE;

    //CERTIFICATE VALIDATION
    static const struct Param_Num EIDMW_CONFIG_PARAM_CERTVALID_ALLOWTESTC;
    static const struct Param_Num EIDMW_CONFIG_PARAM_CERTVALID_CRL;
    static const struct Param_Num EIDMW_CONFIG_PARAM_CERTVALID_OCSP;

    //CERTIFICATE CACHE
    static const struct Param_Str EIDMW_CONFIG_PARAM_CERTCACHE_CACHEFILE;
    static const struct Param_Num EIDMW_CONFIG_PARAM_CERTCACHE_LINENUMB;
    static const struct Param_Num EIDMW_CONFIG_PARAM_CERTCACHE_VALIDITY;
    static const struct Param_Num EIDMW_CONFIG_PARAM_CERTCACHE_WAITDELAY;

    //PROXY
    static const struct Param_Str EIDMW_CONFIG_PARAM_PROXY_HOST;
    static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_PORT;
    static const struct Param_Str EIDMW_CONFIG_PARAM_PROXY_PACFILE;
	static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_CONNECT_TIMEOUT;

    //SECURITY
    static const struct Param_Num EIDMW_CONFIG_PARAM_SECURITY_SINGLESIGNON;

	//GUI
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_STARTWIN;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_STARTMINI;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWPIC;
	static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWNOTIFICATION;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWTBAR;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_VIRTUALKBD;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_AUTOCARDREAD;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_CARDREADNUMB;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_REGCERTIF;
    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_REMOVECERTIF;
	static const struct Param_Str EIDMW_CONFIG_PARAM_GUITOOL_FILESAVE;

	//XSIGN
    static const struct Param_Str EIDMW_CONFIG_PARAM_XSIGN_TSAURL;
    static const struct Param_Num EIDMW_CONFIG_PARAM_XSIGN_ONLINE;
    static const struct Param_Str EIDMW_CONFIG_PARAM_XSIGN_WORKINGDIR;
    static const struct Param_Num EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT;

private:
    //below info if not needed any more when the ini-file is hard-coded.
	// See http://groups.google.com/group/microsoft.public.vc.stl/msg/c4dfeb8987d7b8f0
#ifdef WIN32
#pragma warning(push)
#pragma warning(disable:4251)
#endif
    static CDataFile o_userDataFile;
    static CDataFile o_systemDataFile;

    static CMutex m_Mutex;	/**< Mutex for exclusive access */
#ifdef WIN32
#pragma warning(pop)
#endif
};

}