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 
415  bool LoadConfigurationFile(const std::string& conffile, bool ignoreJobListFile = true);
416 
418 
428  bool SaveToFile(const std::string& filename) const;
429 
431 
445  void ApplyToConfig(BaseConfig& ccfg) const;
446 
448 
454  operator bool() const { return ok; }
456 
460  bool operator!() const { return !ok; }
461 
463 
475  bool JobListFile(const std::string& path);
477 
485  const std::string& JobListFile() const { return joblistfile; }
486 
488 
498  bool JobListType(const std::string& type);
500 
505  const std::string& JobListType() const { return joblisttype; }
506 
508 
527  bool Timeout(int newTimeout);
529 
536  int Timeout() const { return timeout; }
537 
539 
554  bool Verbosity(const std::string& newVerbosity);
556 
565  const std::string& Verbosity() const { return verbosity; }
566 
568 
586  bool Broker(const std::string& name);
588 
604  bool Broker(const std::string& name, const std::string& argument) { broker = std::make_pair<std::string, std::string>(name, argument); return true;}
606 
614  const std::pair<std::string, std::string>& Broker() const { return broker; }
615 
617 
629  bool VOMSESPath(const std::string& path) { vomsesPath = path; return true; }
631 
638  const std::string& VOMSESPath();
639 
641 
651  bool UserName(const std::string& name) { username = name; return true; }
653 
660  const std::string& UserName() const { return username; }
661 
663 
673  bool Password(const std::string& newPassword) { password = newPassword; return true; }
675 
682  const std::string& Password() const { return password; }
683 
685 
692  void CredentialString(const std::string& cred) { credentialString = cred; }
694 
701  const std::string& CredentialString() const { return credentialString; }
702 
704 
717  bool ProxyPath(const std::string& newProxyPath) { proxyPath = newProxyPath; return true;}
719 
725  const std::string& ProxyPath() const { return proxyPath; }
726 
728 
745  bool CertificatePath(const std::string& newCertificatePath) { certificatePath = newCertificatePath; return true; }
747 
755  const std::string& CertificatePath() const { return certificatePath; }
756 
758 
776  bool KeyPath(const std::string& newKeyPath) { keyPath = newKeyPath; return true; }
778 
789  const std::string& KeyPath() const { return keyPath; }
790 
792 
805  bool KeyPassword(const std::string& newKeyPassword) { keyPassword = newKeyPassword; return true; }
807 
816  const std::string& KeyPassword() const { return keyPassword; }
817 
819 
831  bool KeySize(int newKeySize) { keySize = newKeySize; return true;}
833 
842  int KeySize() const { return keySize; }
843 
845 
858  bool CACertificatePath(const std::string& newCACertificatePath) { caCertificatePath = newCACertificatePath; return true; }
860 
867  const std::string& CACertificatePath() const { return caCertificatePath; }
868 
870 
886  bool CACertificatesDirectory(const std::string& newCACertificatesDirectory) { caCertificatesDirectory = newCACertificatesDirectory; return true; }
888 
896  const std::string& CACertificatesDirectory() const { return caCertificatesDirectory; }
897 
899 
911  bool CertificateLifeTime(const Period& newCertificateLifeTime) { certificateLifeTime = newCertificateLifeTime; return true; }
913 
920  const Period& CertificateLifeTime() const { return certificateLifeTime; }
921 
923 
931  bool SLCS(const URL& newSLCS) { slcs = newSLCS; return true; }
933 
938  const URL& SLCS() const { return slcs; }
939 
941 
951  bool StoreDirectory(const std::string& newStoreDirectory) { storeDirectory = newStoreDirectory; return true; }
953 
960  const std::string& StoreDirectory() const { return storeDirectory; }
961 
963 
973  bool JobDownloadDirectory(const std::string& newDownloadDirectory) { downloadDirectory = newDownloadDirectory; return true; }
974 
976 
985  const std::string& JobDownloadDirectory() const { return downloadDirectory; }
986 
988 
997  bool IdPName(const std::string& name) { idPName = name; return true; }
999 
1005  const std::string& IdPName() const { return idPName; }
1006 
1008 
1022  bool OverlayFile(const std::string& path) { overlayfile = path; return true; }
1024 
1028  const std::string& OverlayFile() const { return overlayfile; }
1029 
1031 
1040  bool UtilsDirPath(const std::string& dir);
1042 
1046  const std::string& UtilsDirPath() const { return utilsdir; };
1047 
1049 
1056  void SetUser(const User& u) { user = u; };
1057 
1059 
1063  const User& GetUser() const { return user; };
1064 
1066 
1076  bool InfoInterface(const std::string& infointerface_) {
1077  infointerface = infointerface_;
1078  return true;
1079  }
1081 
1085  const std::string& InfoInterface() const { return infointerface; };
1086 
1088 
1099  bool SubmissionInterface(const std::string& submissioninterface_) {
1100  submissioninterface = submissioninterface_;
1101  return true;
1102  }
1104 
1108  const std::string& SubmissionInterface() const { return submissioninterface; };
1109 
1111 
1116  const std::list<std::string>& RejectDiscoveryURLs() const { return rejectDiscoveryURLs; };
1118 
1125  void AddRejectDiscoveryURLs(const std::list<std::string>& urls) { rejectDiscoveryURLs.insert(rejectDiscoveryURLs.end(), urls.begin(), urls.end()); }
1127 
1131  void ClearRejectDiscoveryURLs() { rejectDiscoveryURLs.clear(); }
1132 
1134 
1139  const std::list<std::string>& RejectManagementURLs() const { return rejectManagementURLs; };
1140 
1141 
1143 
1150  ConfigEndpoint GetService(const std::string& alias);
1151 
1153 
1160  std::list<ConfigEndpoint> GetServicesInGroup(const std::string& group, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1161 
1163 
1170  std::list<ConfigEndpoint> GetDefaultServices(ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1171 
1173 
1184  std::list<ConfigEndpoint> GetServices(const std::string& groupOrAlias, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1185 
1187  std::map<std::string, ConfigEndpoint> GetAllConfiguredServices() { return allServices; }
1188 
1189 
1191 
1197  static const std::string ARCUSERDIRECTORY;
1199 
1204  static const std::string SYSCONFIG;
1206 
1210  static const std::string SYSCONFIGARCLOC;
1212 
1218  static const std::string DEFAULTCONFIG;
1220 
1224  static const std::string EXAMPLECONFIG;
1226 
1234  static const std::string JOBLISTFILE;
1235 
1237 
1244  static const int DEFAULT_TIMEOUT = 20;
1245 
1247 
1255  static const std::string DEFAULT_BROKER;
1256 
1257  private:
1258 
1259  static ConfigEndpoint ServiceFromLegacyString(std::string);
1260 
1261  void setDefaults();
1262  static bool makeDir(const std::string& path);
1263  static bool copyFile(const std::string& source,
1264  const std::string& destination);
1265  bool CreateDefaultConfigurationFile() const;
1266 
1267  std::list<ConfigEndpoint> FilterServices(const std::list<ConfigEndpoint>&, ConfigEndpoint::Type);
1268 
1269 
1270  std::string joblistfile;
1271  std::string joblisttype;
1272 
1273  int timeout;
1274 
1275  std::string verbosity;
1276 
1277  // Broker name and arguments.
1278  std::pair<std::string, std::string> broker;
1279 
1280  std::list<ConfigEndpoint> defaultServices;
1281  std::map<std::string, ConfigEndpoint> allServices;
1282  std::map<std::string, std::list<ConfigEndpoint> > groupMap;
1283  std::list<std::string> rejectDiscoveryURLs;
1284  std::list<std::string> rejectManagementURLs;
1285 
1286  std::string credentialString;
1287  std::string proxyPath;
1288  std::string certificatePath;
1289  std::string keyPath;
1290  std::string keyPassword;
1291  int keySize;
1292  std::string caCertificatePath;
1293  std::string caCertificatesDirectory;
1294  Period certificateLifeTime;
1295 
1296  URL slcs;
1297 
1298  std::string vomsesPath;
1299 
1300  std::string storeDirectory;
1301  std::string downloadDirectory;
1302  std::string idPName;
1303 
1304  std::string username;
1305  std::string password;
1306 
1307  std::string overlayfile;
1308  std::string utilsdir;
1309 
1310  std::string submissioninterface;
1311  std::string infointerface;
1312  // User whose identity (uid/gid) should be used to access filesystem
1313  // Normally this is the same as the process owner
1314  User user;
1315  // Private members not refered to outside this class:
1316  bool ok;
1317 
1318  initializeCredentialsType initializeCredentials;
1319 
1320  static Logger logger;
1321  };
1322 
1323 
1325 
1338  public:
1340  CertEnvLocker(const UserConfig& cfg);
1342  ~CertEnvLocker(void);
1343 
1344  protected:
1345  std::string x509_user_key_old;
1346  std::string x509_user_key_new;
1347  bool x509_user_key_set;
1348  std::string x509_user_cert_old;
1349  std::string x509_user_cert_new;
1350  bool x509_user_cert_set;
1351  std::string x509_user_proxy_old;
1352  std::string x509_user_proxy_new;
1353  bool x509_user_proxy_set;
1354  std::string ca_cert_dir_old;
1355  bool ca_cert_dir_set;
1356  };
1357 
1360 } // namespace Arc
1361 
1362 #endif // __ARC_USERCONFIG_H__