ARC SDK
UserConfig.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_USERCONFIG_H__
4 #define __ARC_USERCONFIG_H__
5 
6 #include <list>
7 #include <vector>
8 #include <string>
9 
10 #include <arc/ArcConfig.h>
11 #include <arc/DateTime.h>
12 #include <arc/URL.h>
13 #include <arc/User.h>
14 
15 namespace Arc {
16 
19  class Logger;
20  class XMLNode;
21 
23  enum ServiceType {
26  };
27 
29 
37  public:
39  enum Type {
42  ANY
43  };
44 
46 
52  ConfigEndpoint(const std::string& URLString = "", const std::string& InterfaceName = "", ConfigEndpoint::Type type = ConfigEndpoint::ANY)
54 
57 
59  std::string URLString;
60 
62  std::string InterfaceName;
63 
65 
71 
73  operator bool() const {
74  return (!URLString.empty());
75  }
76 
78  bool operator!() const {
79  return (URLString.empty());
80  }
81 
83  bool operator==(ConfigEndpoint c) const {
85  }
86  };
87 
89  std::string tostring(const ServiceType st);
90 
92 
99  public:
101  typedef enum {
109  } initializeType;
115  bool operator==(initializeType v) { return (val == v); };
117  bool operator!=(initializeType v) { return (val != v); };
119  operator initializeType(void) { return val; };
120  private:
121  initializeType val;
122  };
123 
125 
196  class UserConfig {
197  public:
199 
215 
244  UserConfig(const std::string& conffile,
245  initializeCredentialsType initializeCredentials = initializeCredentialsType(),
246  bool loadSysConfig = true);
248 
273  UserConfig(const std::string& conffile,
274  const std::string& jfile,
275  initializeCredentialsType initializeCredentials = initializeCredentialsType(),
276  bool loadSysConfig = true);
278 
285  UserConfig(const long int& ptraddr);
286  ~UserConfig() {}
287 
289 
375  bool InitializeCredentials(initializeCredentialsType initializeCredentials);
377 
388  bool CredentialsFound() const {
389  return !((proxyPath.empty() && (certificatePath.empty() || keyPath.empty())) || caCertificatesDirectory.empty());
390  }
391 
393 
413  bool LoadConfigurationFile(const std::string& conffile, bool ignoreJobListFile = true);
414 
416 
426  bool SaveToFile(const std::string& filename) const;
427 
429 
440  void ApplyToConfig(BaseConfig& ccfg) const;
441 
443 
449  operator bool() const { return ok; }
451 
455  bool operator!() const { return !ok; }
456 
458 
476  bool JobListFile(const std::string& path);
478 
486  const std::string& JobListFile() const { return joblistfile; }
487 
489 
508  bool Timeout(int newTimeout);
510 
517  int Timeout() const { return timeout; }
518 
520 
533  bool Verbosity(const std::string& newVerbosity);
535 
544  const std::string& Verbosity() const { return verbosity; }
545 
547 
565  bool Broker(const std::string& name);
567 
583  bool Broker(const std::string& name, const std::string& argument) { broker = std::make_pair<std::string, std::string>(name, argument); return true;}
585 
593  const std::pair<std::string, std::string>& Broker() const { return broker; }
594 
596 
606  bool Bartender(const std::vector<URL>& urls) { bartenders = urls; return true; }
608 
616  void AddBartender(const URL& url) { bartenders.push_back(url); }
618 
625  const std::vector<URL>& Bartender() const { return bartenders; }
626 
628 
640  bool VOMSESPath(const std::string& path) { vomsesPath = path; return true; }
642 
649  const std::string& VOMSESPath();
650 
652 
662  bool UserName(const std::string& name) { username = name; return true; }
664 
671  const std::string& UserName() const { return username; }
672 
674 
684  bool Password(const std::string& newPassword) { password = newPassword; return true; }
686 
693  const std::string& Password() const { return password; }
694 
696 
702  void CredentialString(const std::string& cred) { credentialString = cred; }
704 
710  const std::string& CredentialString() const { return credentialString; }
711 
713 
726  bool ProxyPath(const std::string& newProxyPath) { proxyPath = newProxyPath; return true;}
728 
734  const std::string& ProxyPath() const { return proxyPath; }
735 
737 
754  bool CertificatePath(const std::string& newCertificatePath) { certificatePath = newCertificatePath; return true; }
756 
764  const std::string& CertificatePath() const { return certificatePath; }
765 
767 
785  bool KeyPath(const std::string& newKeyPath) { keyPath = newKeyPath; return true; }
787 
798  const std::string& KeyPath() const { return keyPath; }
799 
801 
814  bool KeyPassword(const std::string& newKeyPassword) { keyPassword = newKeyPassword; return true; }
816 
825  const std::string& KeyPassword() const { return keyPassword; }
826 
828 
840  bool KeySize(int newKeySize) { keySize = newKeySize; return true;}
842 
851  int KeySize() const { return keySize; }
852 
854 
867  bool CACertificatePath(const std::string& newCACertificatePath) { caCertificatePath = newCACertificatePath; return true; }
869 
876  const std::string& CACertificatePath() const { return caCertificatePath; }
877 
879 
895  bool CACertificatesDirectory(const std::string& newCACertificatesDirectory) { caCertificatesDirectory = newCACertificatesDirectory; return true; }
897 
905  const std::string& CACertificatesDirectory() const { return caCertificatesDirectory; }
906 
908 
920  bool CertificateLifeTime(const Period& newCertificateLifeTime) { certificateLifeTime = newCertificateLifeTime; return true; }
922 
929  const Period& CertificateLifeTime() const { return certificateLifeTime; }
930 
932 
940  bool SLCS(const URL& newSLCS) { slcs = newSLCS; return true; }
942 
947  const URL& SLCS() const { return slcs; }
948 
950 
960  bool StoreDirectory(const std::string& newStoreDirectory) { storeDirectory = newStoreDirectory; return true; }
962 
969  const std::string& StoreDirectory() const { return storeDirectory; }
970 
972 
982  bool JobDownloadDirectory(const std::string& newDownloadDirectory) { downloadDirectory = newDownloadDirectory; return true; }
983 
985 
994  const std::string& JobDownloadDirectory() const { return downloadDirectory; }
995 
997 
1006  bool IdPName(const std::string& name) { idPName = name; return true; }
1008 
1014  const std::string& IdPName() const { return idPName; }
1015 
1017 
1031  bool OverlayFile(const std::string& path) { overlayfile = path; return true; }
1033 
1037  const std::string& OverlayFile() const { return overlayfile; }
1038 
1040 
1049  bool UtilsDirPath(const std::string& dir);
1051 
1055  const std::string& UtilsDirPath() const { return utilsdir; };
1056 
1058 
1065  void SetUser(const User& u) { user = u; };
1066 
1068 
1072  const User& GetUser() const { return user; };
1073 
1075 
1085  bool InfoInterface(const std::string& infointerface_) {
1086  infointerface = infointerface_;
1087  return true;
1088  }
1090 
1094  const std::string& InfoInterface() const { return infointerface; };
1095 
1097 
1108  bool SubmissionInterface(const std::string& submissioninterface_) {
1109  submissioninterface = submissioninterface_;
1110  return true;
1111  }
1113 
1117  const std::string& SubmissionInterface() const { return submissioninterface; };
1118 
1120 
1125  const std::list<std::string>& RejectDiscoveryURLs() const { return rejectDiscoveryURLs; };
1127 
1134  void AddRejectDiscoveryURLs(const std::list<std::string>& urls) { rejectDiscoveryURLs.insert(rejectDiscoveryURLs.end(), urls.begin(), urls.end()); }
1136 
1140  void ClearRejectDiscoveryURLs() { rejectDiscoveryURLs.clear(); }
1141 
1143 
1148  const std::list<std::string>& RejectManagementURLs() const { return rejectManagementURLs; };
1149 
1150 
1152 
1159  ConfigEndpoint GetService(const std::string& alias);
1160 
1162 
1169  std::list<ConfigEndpoint> GetServicesInGroup(const std::string& group, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1170 
1172 
1179  std::list<ConfigEndpoint> GetDefaultServices(ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1180 
1182 
1193  std::list<ConfigEndpoint> GetServices(const std::string& groupOrAlias, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1194 
1196  std::map<std::string, ConfigEndpoint> GetAllConfiguredServices() { return allServices; }
1197 
1198 
1200 
1206  static const std::string ARCUSERDIRECTORY;
1208 
1213  static const std::string SYSCONFIG;
1215 
1219  static const std::string SYSCONFIGARCLOC;
1221 
1227  static const std::string DEFAULTCONFIG;
1229 
1233  static const std::string EXAMPLECONFIG;
1234 
1236 
1243  static const int DEFAULT_TIMEOUT = 20;
1244 
1246 
1254  static const std::string DEFAULT_BROKER;
1255 
1256  private:
1257 
1258  static ConfigEndpoint ServiceFromLegacyString(std::string);
1259 
1260  void setDefaults();
1261  static bool makeDir(const std::string& path);
1262  static bool copyFile(const std::string& source,
1263  const std::string& destination);
1264  bool CreateDefaultConfigurationFile() const;
1265 
1266  std::list<ConfigEndpoint> FilterServices(const std::list<ConfigEndpoint>&, ConfigEndpoint::Type);
1267 
1268 
1269  std::string joblistfile;
1270 
1271  int timeout;
1272 
1273  std::string verbosity;
1274 
1275  // Broker name and arguments.
1276  std::pair<std::string, std::string> broker;
1277 
1278  std::list<ConfigEndpoint> defaultServices;
1279  std::map<std::string, ConfigEndpoint> allServices;
1280  std::map<std::string, std::list<ConfigEndpoint> > groupMap;
1281  std::list<std::string> rejectDiscoveryURLs;
1282  std::list<std::string> rejectManagementURLs;
1283 
1284  // Vector needed for random access.
1285  std::vector<URL> bartenders;
1286 
1287  std::string credentialString;
1288  std::string proxyPath;
1289  std::string certificatePath;
1290  std::string keyPath;
1291  std::string keyPassword;
1292  int keySize;
1293  std::string caCertificatePath;
1294  std::string caCertificatesDirectory;
1295  Period certificateLifeTime;
1296 
1297  URL slcs;
1298 
1299  std::string vomsesPath;
1300 
1301  std::string storeDirectory;
1302  std::string downloadDirectory;
1303  std::string idPName;
1304 
1305  std::string username;
1306  std::string password;
1307 
1308  std::string overlayfile;
1309  std::string utilsdir;
1310 
1311  std::string submissioninterface;
1312  std::string infointerface;
1313  // User whose identity (uid/gid) should be used to access filesystem
1314  // Normally this is the same as the process owner
1315  User user;
1316  // Private members not refered to outside this class:
1317  bool ok;
1318 
1319  initializeCredentialsType initializeCredentials;
1320 
1321  static Logger logger;
1322  };
1323 
1324 
1326 
1339  public:
1341  CertEnvLocker(const UserConfig& cfg);
1343  ~CertEnvLocker(void);
1344 
1345  protected:
1346  std::string x509_user_key_old;
1347  std::string x509_user_key_new;
1348  bool x509_user_key_set;
1349  std::string x509_user_cert_old;
1350  std::string x509_user_cert_new;
1351  bool x509_user_cert_set;
1352  std::string x509_user_proxy_old;
1353  std::string x509_user_proxy_new;
1354  bool x509_user_proxy_set;
1355  std::string ca_cert_dir_old;
1356  bool ca_cert_dir_set;
1357  };
1358 
1361 } // namespace Arc
1362 
1363 #endif // __ARC_USERCONFIG_H__