00001
00002
00003 #ifndef __ARC_USERCONFIG_H__
00004 #define __ARC_USERCONFIG_H__
00005
00006 #include <list>
00007 #include <vector>
00008 #include <string>
00009
00010 #include <arc/ArcConfig.h>
00011 #include <arc/DateTime.h>
00012 #include <arc/URL.h>
00013 #include <arc/User.h>
00014
00015 namespace Arc {
00016
00017 class Logger;
00018 class XMLNode;
00019
00020 enum ServiceType {
00021 COMPUTING,
00022 INDEX
00023 };
00024
00025 class ConfigEndpoint {
00026 public:
00027 enum Type { REGISTRY, COMPUTINGINFO, ANY };
00028
00029 ConfigEndpoint(const std::string& URLString = "", const std::string& InterfaceName = "", ConfigEndpoint::Type type = ConfigEndpoint::ANY)
00030 : type(type), URLString(URLString), InterfaceName(InterfaceName) {}
00031 Type type;
00032 std::string URLString;
00033 std::string InterfaceName;
00034 std::string RequestedSubmissionInterfaceName;
00035
00036 operator bool() const {
00037 return (!URLString.empty());
00038 }
00039
00040 bool operator!() const {
00041 return (!URLString.empty());
00042 }
00043
00044 bool operator==(ConfigEndpoint c) const {
00045 return (type == c.type) && (URLString == c.URLString) && (InterfaceName == c.InterfaceName) && (RequestedSubmissionInterfaceName == c.RequestedSubmissionInterfaceName);
00046 }
00047 };
00048
00049 typedef std::list<std::string> ServiceList[2];
00050
00051
00052 std::string tostring(const ServiceType st);
00053
00055
00060 class initializeCredentialsType {
00061 public:
00062 typedef enum {
00063 SkipCredentials,
00064 NotTryCredentials,
00065 TryCredentials,
00066 RequireCredentials,
00067 SkipCANotTryCredentials,
00068 SkipCATryCredentials,
00069 SkipCARequireCredentials
00070 } initializeType;
00071 initializeCredentialsType(void):val(TryCredentials) { };
00072 initializeCredentialsType(initializeType v):val(v) { };
00073 bool operator==(initializeType v) { return (val == v); };
00074 bool operator!=(initializeType v) { return (val != v); };
00075 operator initializeType(void) { return val; };
00076 private:
00077 initializeType val;
00078 };
00079
00081
00131 class UserConfig {
00132 public:
00134
00148 UserConfig(initializeCredentialsType initializeCredentials = initializeCredentialsType());
00150
00179 UserConfig(const std::string& conffile,
00180 initializeCredentialsType initializeCredentials = initializeCredentialsType(),
00181 bool loadSysConfig = true);
00183
00208 UserConfig(const std::string& conffile,
00209 const std::string& jfile,
00210 initializeCredentialsType initializeCredentials = initializeCredentialsType(),
00211 bool loadSysConfig = true);
00213
00220 UserConfig(const long int& ptraddr);
00221 ~UserConfig() {}
00222
00224
00310 bool InitializeCredentials(initializeCredentialsType initializeCredentials);
00312
00323 bool CredentialsFound() const {
00324 return !((proxyPath.empty() && (certificatePath.empty() || keyPath.empty())) || caCertificatesDirectory.empty());
00325 }
00326
00328
00390 bool LoadConfigurationFile(const std::string& conffile, bool ignoreJobListFile = true);
00391
00393
00403 bool SaveToFile(const std::string& filename) const;
00404
00406
00417 void ApplyToConfig(BaseConfig& ccfg) const;
00418
00420
00426 operator bool() const { return ok; }
00428
00432 bool operator!() const { return !ok; }
00433
00435
00453 bool JobListFile(const std::string& path);
00455
00463 const std::string& JobListFile() const { return joblistfile; }
00464
00466
00485 bool Timeout(int newTimeout);
00487
00494 int Timeout() const { return timeout; }
00495
00497
00510 bool Verbosity(const std::string& newVerbosity);
00512
00521 const std::string& Verbosity() const { return verbosity; }
00522
00524
00542 bool Broker(const std::string& name);
00544
00560 bool Broker(const std::string& name, const std::string& argument) { broker = std::make_pair<std::string, std::string>(name, argument); return true;}
00562
00570 const std::pair<std::string, std::string>& Broker() const { return broker; }
00571
00573
00583 bool Bartender(const std::vector<URL>& urls) { bartenders = urls; return true; }
00585
00593 void AddBartender(const URL& url) { bartenders.push_back(url); }
00595
00602 const std::vector<URL>& Bartender() const { return bartenders; }
00603
00605
00617 bool VOMSESPath(const std::string& path) { vomsesPath = path; return true; }
00619
00626 const std::string& VOMSESPath();
00627
00629
00639 bool UserName(const std::string& name) { username = name; return true; }
00641
00648 const std::string& UserName() const { return username; }
00649
00651
00661 bool Password(const std::string& newPassword) { password = newPassword; return true; }
00663
00670 const std::string& Password() const { return password; }
00671
00673
00686 bool ProxyPath(const std::string& newProxyPath) { proxyPath = newProxyPath; return true;}
00688
00694 const std::string& ProxyPath() const { return proxyPath; }
00695
00697
00714 bool CertificatePath(const std::string& newCertificatePath) { certificatePath = newCertificatePath; return true; }
00716
00724 const std::string& CertificatePath() const { return certificatePath; }
00725
00727
00745 bool KeyPath(const std::string& newKeyPath) { keyPath = newKeyPath; return true; }
00747
00758 const std::string& KeyPath() const { return keyPath; }
00759
00761
00774 bool KeyPassword(const std::string& newKeyPassword) { keyPassword = newKeyPassword; return true; }
00776
00785 const std::string& KeyPassword() const { return keyPassword; }
00786
00788
00800 bool KeySize(int newKeySize) { keySize = newKeySize; return true;}
00802
00811 int KeySize() const { return keySize; }
00812
00814
00827 bool CACertificatePath(const std::string& newCACertificatePath) { caCertificatePath = newCACertificatePath; return true; }
00829
00836 const std::string& CACertificatePath() const { return caCertificatePath; }
00837
00839
00855 bool CACertificatesDirectory(const std::string& newCACertificatesDirectory) { caCertificatesDirectory = newCACertificatesDirectory; return true; }
00857
00865 const std::string& CACertificatesDirectory() const { return caCertificatesDirectory; }
00866
00868
00880 bool CertificateLifeTime(const Period& newCertificateLifeTime) { certificateLifeTime = newCertificateLifeTime; return true; }
00882
00889 const Period& CertificateLifeTime() const { return certificateLifeTime; }
00890
00892
00900 bool SLCS(const URL& newSLCS) { slcs = newSLCS; return true; }
00902
00907 const URL& SLCS() const { return slcs; }
00908
00910
00920 bool StoreDirectory(const std::string& newStoreDirectory) { storeDirectory = newStoreDirectory; return true; }
00922
00929 const std::string& StoreDirectory() const { return storeDirectory; }
00930
00932
00942 bool JobDownloadDirectory(const std::string& newDownloadDirectory) { downloadDirectory = newDownloadDirectory; return true; }
00943
00945
00954 const std::string& JobDownloadDirectory() const { return downloadDirectory; }
00955
00957
00966 bool IdPName(const std::string& name) { idPName = name; return true; }
00968
00974 const std::string& IdPName() const { return idPName; }
00975
00977
00991 bool OverlayFile(const std::string& path) { overlayfile = path; return true; }
00993
00997 const std::string& OverlayFile() const { return overlayfile; }
00998
01000
01009 bool UtilsDirPath(const std::string& dir);
01011
01015 const std::string& UtilsDirPath() const { return utilsdir; };
01016
01018
01025 void SetUser(const User& u) { user = u; };
01026
01028
01032 const User& GetUser() const { return user; };
01033
01034
01035 std::list<ConfigEndpoint> GetDefaultServices(ConfigEndpoint::Type type = ConfigEndpoint::ANY);
01036
01037 ConfigEndpoint GetService(const std::string& alias);
01038
01039 std::list<ConfigEndpoint> GetServices(const std::string& groupOrAlias, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
01040
01041 std::list<ConfigEndpoint> GetServicesInGroup(const std::string& group, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
01042
01043
01044 const std::string& InfoInterface() const { return infointerface; };
01045
01046 bool InfoInterface(const std::string& infointerface_) {
01047 infointerface = infointerface_;
01048 return true;
01049 }
01050
01051
01052 const std::string& SubmissionInterface() const { return submissioninterface; };
01053
01054 bool SubmissionInterface(const std::string& submissioninterface_) {
01055 submissioninterface = submissioninterface_;
01056 return true;
01057 }
01058
01059
01060 const std::list<std::string>& RejectDiscoveryURLs() const { return rejectDiscoveryURLs; };
01061 const std::list<std::string>& RejectManagementURLs() const { return rejectManagementURLs; };
01062
01063
01065
01071 static const std::string ARCUSERDIRECTORY;
01073
01078 static const std::string SYSCONFIG;
01080
01084 static const std::string SYSCONFIGARCLOC;
01086
01092 static const std::string DEFAULTCONFIG;
01094
01098 static const std::string EXAMPLECONFIG;
01099
01101
01108 static const int DEFAULT_TIMEOUT = 20;
01109
01111
01119 static const std::string DEFAULT_BROKER;
01120
01121 private:
01122
01123 static ConfigEndpoint ServiceFromLegacyString(std::string);
01124
01125 void setDefaults();
01126 static bool makeDir(const std::string& path);
01127 static bool copyFile(const std::string& source,
01128 const std::string& destination);
01129 bool CreateDefaultConfigurationFile() const;
01130
01131 std::list<ConfigEndpoint> FilterServices(const std::list<ConfigEndpoint>&, ConfigEndpoint::Type);
01132
01133
01134 std::string joblistfile;
01135
01136 int timeout;
01137
01138 std::string verbosity;
01139
01140
01141 std::pair<std::string, std::string> broker;
01142
01143 std::list<ConfigEndpoint> defaultServices;
01144 std::map<std::string, ConfigEndpoint> allServices;
01145 std::map<std::string, std::list<ConfigEndpoint> > groupMap;
01146 std::list<std::string> rejectDiscoveryURLs;
01147 std::list<std::string> rejectManagementURLs;
01148
01149
01150 std::vector<URL> bartenders;
01151
01152 std::string proxyPath;
01153 std::string certificatePath;
01154 std::string keyPath;
01155 std::string keyPassword;
01156 int keySize;
01157 std::string caCertificatePath;
01158 std::string caCertificatesDirectory;
01159 Period certificateLifeTime;
01160
01161 URL slcs;
01162
01163 std::string vomsesPath;
01164
01165 std::string storeDirectory;
01166 std::string downloadDirectory;
01167 std::string idPName;
01168
01169 std::string username;
01170 std::string password;
01171
01172 std::string overlayfile;
01173 std::string utilsdir;
01174
01175 std::string submissioninterface;
01176 std::string infointerface;
01177
01178
01179 User user;
01180
01181 bool ok;
01182
01183 initializeCredentialsType initializeCredentials;
01184
01185 static Logger logger;
01186 };
01187
01188
01189 class CertEnvLocker {
01190 public:
01191 CertEnvLocker(const UserConfig& cfg);
01192 ~CertEnvLocker(void);
01193
01194 protected:
01195 std::string x509_user_key_old;
01196 std::string x509_user_key_new;
01197 bool x509_user_key_set;
01198 std::string x509_user_cert_old;
01199 std::string x509_user_cert_new;
01200 bool x509_user_cert_set;
01201 std::string x509_user_proxy_old;
01202 std::string x509_user_proxy_new;
01203 bool x509_user_proxy_set;
01204 std::string ca_cert_dir_old;
01205 bool ca_cert_dir_set;
01206 };
01207
01208 }
01209
01210 #endif // __ARC_USERCONFIG_H__