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 
552  bool Verbosity(const std::string& newVerbosity);
554 
563  const std::string& Verbosity() const { return verbosity; }
564 
566 
584  bool Broker(const std::string& name);
586 
602  bool Broker(const std::string& name, const std::string& argument) { broker = std::make_pair<std::string, std::string>(name, argument); return true;}
604 
612  const std::pair<std::string, std::string>& Broker() const { return broker; }
613 
615 
627  bool VOMSESPath(const std::string& path) { vomsesPath = path; return true; }
629 
636  const std::string& VOMSESPath();
637 
639 
649  bool UserName(const std::string& name) { username = name; return true; }
651 
658  const std::string& UserName() const { return username; }
659 
661 
671  bool Password(const std::string& newPassword) { password = newPassword; return true; }
673 
680  const std::string& Password() const { return password; }
681 
683 
690  void CredentialString(const std::string& cred) { credentialString = cred; }
692 
699  const std::string& CredentialString() const { return credentialString; }
700 
702 
715  bool ProxyPath(const std::string& newProxyPath) { proxyPath = newProxyPath; return true;}
717 
723  const std::string& ProxyPath() const { return proxyPath; }
724 
726 
743  bool CertificatePath(const std::string& newCertificatePath) { certificatePath = newCertificatePath; return true; }
745 
753  const std::string& CertificatePath() const { return certificatePath; }
754 
756 
774  bool KeyPath(const std::string& newKeyPath) { keyPath = newKeyPath; return true; }
776 
787  const std::string& KeyPath() const { return keyPath; }
788 
790 
803  bool KeyPassword(const std::string& newKeyPassword) { keyPassword = newKeyPassword; return true; }
805 
814  const std::string& KeyPassword() const { return keyPassword; }
815 
817 
829  bool KeySize(int newKeySize) { keySize = newKeySize; return true;}
831 
840  int KeySize() const { return keySize; }
841 
843 
856  bool CACertificatePath(const std::string& newCACertificatePath) { caCertificatePath = newCACertificatePath; return true; }
858 
865  const std::string& CACertificatePath() const { return caCertificatePath; }
866 
868 
884  bool CACertificatesDirectory(const std::string& newCACertificatesDirectory) { caCertificatesDirectory = newCACertificatesDirectory; return true; }
886 
894  const std::string& CACertificatesDirectory() const { return caCertificatesDirectory; }
895 
897 
909  bool CertificateLifeTime(const Period& newCertificateLifeTime) { certificateLifeTime = newCertificateLifeTime; return true; }
911 
918  const Period& CertificateLifeTime() const { return certificateLifeTime; }
919 
921 
929  bool SLCS(const URL& newSLCS) { slcs = newSLCS; return true; }
931 
936  const URL& SLCS() const { return slcs; }
937 
939 
949  bool StoreDirectory(const std::string& newStoreDirectory) { storeDirectory = newStoreDirectory; return true; }
951 
958  const std::string& StoreDirectory() const { return storeDirectory; }
959 
961 
971  bool JobDownloadDirectory(const std::string& newDownloadDirectory) { downloadDirectory = newDownloadDirectory; return true; }
972 
974 
983  const std::string& JobDownloadDirectory() const { return downloadDirectory; }
984 
986 
995  bool IdPName(const std::string& name) { idPName = name; return true; }
997 
1003  const std::string& IdPName() const { return idPName; }
1004 
1006 
1020  bool OverlayFile(const std::string& path) { overlayfile = path; return true; }
1022 
1026  const std::string& OverlayFile() const { return overlayfile; }
1027 
1029 
1038  bool UtilsDirPath(const std::string& dir);
1040 
1044  const std::string& UtilsDirPath() const { return utilsdir; };
1045 
1047 
1054  void SetUser(const User& u) { user = u; };
1055 
1057 
1061  const User& GetUser() const { return user; };
1062 
1064 
1074  bool InfoInterface(const std::string& infointerface_) {
1075  infointerface = infointerface_;
1076  return true;
1077  }
1079 
1083  const std::string& InfoInterface() const { return infointerface; };
1084 
1086 
1097  bool SubmissionInterface(const std::string& submissioninterface_) {
1098  submissioninterface = submissioninterface_;
1099  return true;
1100  }
1102 
1106  const std::string& SubmissionInterface() const { return submissioninterface; };
1107 
1109 
1114  const std::list<std::string>& RejectDiscoveryURLs() const { return rejectDiscoveryURLs; };
1116 
1123  void AddRejectDiscoveryURLs(const std::list<std::string>& urls) { rejectDiscoveryURLs.insert(rejectDiscoveryURLs.end(), urls.begin(), urls.end()); }
1125 
1129  void ClearRejectDiscoveryURLs() { rejectDiscoveryURLs.clear(); }
1130 
1132 
1137  const std::list<std::string>& RejectManagementURLs() const { return rejectManagementURLs; };
1138 
1139 
1141 
1148  ConfigEndpoint GetService(const std::string& alias);
1149 
1151 
1158  std::list<ConfigEndpoint> GetServicesInGroup(const std::string& group, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1159 
1161 
1168  std::list<ConfigEndpoint> GetDefaultServices(ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1169 
1171 
1182  std::list<ConfigEndpoint> GetServices(const std::string& groupOrAlias, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1183 
1185  std::map<std::string, ConfigEndpoint> GetAllConfiguredServices() { return allServices; }
1186 
1187 
1189 
1195  static const std::string ARCUSERDIRECTORY;
1197 
1202  static const std::string SYSCONFIG;
1204 
1208  static const std::string SYSCONFIGARCLOC;
1210 
1216  static const std::string DEFAULTCONFIG;
1218 
1222  static const std::string EXAMPLECONFIG;
1224 
1232  static const std::string JOBLISTFILE;
1233 
1235 
1242  static const int DEFAULT_TIMEOUT = 20;
1243 
1245 
1253  static const std::string DEFAULT_BROKER;
1254 
1255  private:
1256 
1257  static ConfigEndpoint ServiceFromLegacyString(std::string);
1258 
1259  void setDefaults();
1260  static bool makeDir(const std::string& path);
1261  static bool copyFile(const std::string& source,
1262  const std::string& destination);
1263  bool CreateDefaultConfigurationFile() const;
1264 
1265  std::list<ConfigEndpoint> FilterServices(const std::list<ConfigEndpoint>&, ConfigEndpoint::Type);
1266 
1267 
1268  std::string joblistfile;
1269  std::string joblisttype;
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  std::string credentialString;
1285  std::string proxyPath;
1286  std::string certificatePath;
1287  std::string keyPath;
1288  std::string keyPassword;
1289  int keySize;
1290  std::string caCertificatePath;
1291  std::string caCertificatesDirectory;
1292  Period certificateLifeTime;
1293 
1294  URL slcs;
1295 
1296  std::string vomsesPath;
1297 
1298  std::string storeDirectory;
1299  std::string downloadDirectory;
1300  std::string idPName;
1301 
1302  std::string username;
1303  std::string password;
1304 
1305  std::string overlayfile;
1306  std::string utilsdir;
1307 
1308  std::string submissioninterface;
1309  std::string infointerface;
1310  // User whose identity (uid/gid) should be used to access filesystem
1311  // Normally this is the same as the process owner
1312  User user;
1313  // Private members not refered to outside this class:
1314  bool ok;
1315 
1316  initializeCredentialsType initializeCredentials;
1317 
1318  static Logger logger;
1319  };
1320 
1321 
1323 
1336  public:
1338  CertEnvLocker(const UserConfig& cfg);
1340  ~CertEnvLocker(void);
1341 
1342  protected:
1343  std::string x509_user_key_old;
1344  std::string x509_user_key_new;
1345  bool x509_user_key_set;
1346  std::string x509_user_cert_old;
1347  std::string x509_user_cert_new;
1348  bool x509_user_cert_set;
1349  std::string x509_user_proxy_old;
1350  std::string x509_user_proxy_new;
1351  bool x509_user_proxy_set;
1352  std::string ca_cert_dir_old;
1353  bool ca_cert_dir_set;
1354  };
1355 
1358 } // namespace Arc
1359 
1360 #endif // __ARC_USERCONFIG_H__