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::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 
645  const std::list<std::string>& DefaultVOMSes() const { return defaultVomses; };
646 
648 
658  bool UserName(const std::string& name) { username = name; return true; }
660 
667  const std::string& UserName() const { return username; }
668 
670 
680  bool Password(const std::string& newPassword) { password = newPassword; return true; }
682 
689  const std::string& Password() const { return password; }
690 
692 
699  void CredentialString(const std::string& cred) { credentialString = cred; }
701 
708  const std::string& CredentialString() const { return credentialString; }
709 
711 
718  void OToken(const std::string& token) { otoken = token; }
720 
727  const std::string& OToken() const { return otoken; }
728 
730 
743  bool ProxyPath(const std::string& newProxyPath) { proxyPath = newProxyPath; return true;}
745 
751  const std::string& ProxyPath() const { return proxyPath; }
752 
754 
771  bool CertificatePath(const std::string& newCertificatePath) { certificatePath = newCertificatePath; return true; }
773 
781  const std::string& CertificatePath() const { return certificatePath; }
782 
784 
802  bool KeyPath(const std::string& newKeyPath) { keyPath = newKeyPath; return true; }
804 
815  const std::string& KeyPath() const { return keyPath; }
816 
818 
831  bool KeyPassword(const std::string& newKeyPassword) { keyPassword = newKeyPassword; return true; }
833 
842  const std::string& KeyPassword() const { return keyPassword; }
843 
845 
857  bool KeySize(int newKeySize) { keySize = newKeySize; return true;}
859 
868  int KeySize() const { return keySize; }
869 
871 
884  bool CACertificatePath(const std::string& newCACertificatePath) { caCertificatePath = newCACertificatePath; return true; }
886 
893  const std::string& CACertificatePath() const { return caCertificatePath; }
894 
896 
912  bool CACertificatesDirectory(const std::string& newCACertificatesDirectory) { caCertificatesDirectory = newCACertificatesDirectory; return true; }
914 
922  const std::string& CACertificatesDirectory() const { return caCertificatesDirectory; }
923 
925 
937  bool CertificateLifeTime(const Period& newCertificateLifeTime) { certificateLifeTime = newCertificateLifeTime; return true; }
939 
946  const Period& CertificateLifeTime() const { return certificateLifeTime; }
947 
949 
957  bool SLCS(const URL& newSLCS) { slcs = newSLCS; return true; }
959 
964  const URL& SLCS() const { return slcs; }
965 
967 
974  bool IsSameIdentity(UserConfig const & other) const {
975  if(credentialString != other.credentialString) return false;
976  if(proxyPath != other.proxyPath) return false;
977  if(certificatePath != other.certificatePath) return false;
978  if(username != other.username) return false;
979  if(otoken != other.otoken) return false;
980  return true;
981  }
982 
984 
994  bool StoreDirectory(const std::string& newStoreDirectory) { storeDirectory = newStoreDirectory; return true; }
996 
1003  const std::string& StoreDirectory() const { return storeDirectory; }
1004 
1006 
1016  bool JobDownloadDirectory(const std::string& newDownloadDirectory) { downloadDirectory = newDownloadDirectory; return true; }
1017 
1019 
1028  const std::string& JobDownloadDirectory() const { return downloadDirectory; }
1029 
1031 
1040  bool IdPName(const std::string& name) { idPName = name; return true; }
1042 
1048  const std::string& IdPName() const { return idPName; }
1049 
1051 
1065  bool OverlayFile(const std::string& path) { overlayfile = path; return true; }
1067 
1071  const std::string& OverlayFile() const { return overlayfile; }
1072 
1074 
1083  bool UtilsDirPath(const std::string& dir);
1085 
1089  const std::string& UtilsDirPath() const { return utilsdir; };
1090 
1092 
1099  void SetUser(const User& u) { user = u; };
1100 
1102 
1106  const User& GetUser() const { return user; };
1107 
1109 
1119  bool InfoInterface(const std::string& infointerface_) {
1120  infointerface = infointerface_;
1121  return true;
1122  }
1124 
1128  const std::string& InfoInterface() const { return infointerface; };
1129 
1131 
1142  bool SubmissionInterface(const std::string& submissioninterface_) {
1143  submissioninterface = submissioninterface_;
1144  return true;
1145  }
1147 
1151  const std::string& SubmissionInterface() const { return submissioninterface; };
1152 
1154 
1159  const std::list<std::string>& RejectDiscoveryURLs() const { return rejectDiscoveryURLs; };
1161 
1168  void AddRejectDiscoveryURLs(const std::list<std::string>& urls) { rejectDiscoveryURLs.insert(rejectDiscoveryURLs.end(), urls.begin(), urls.end()); }
1170 
1174  void ClearRejectDiscoveryURLs() { rejectDiscoveryURLs.clear(); }
1175 
1177 
1182  const std::list<std::string>& RejectManagementURLs() const { return rejectManagementURLs; };
1183 
1184 
1186 
1193  ConfigEndpoint GetService(const std::string& alias);
1194 
1196 
1203  std::list<ConfigEndpoint> GetServicesInGroup(const std::string& group, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1204 
1206 
1213  std::list<ConfigEndpoint> GetDefaultServices(ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1214 
1216 
1227  std::list<ConfigEndpoint> GetServices(const std::string& groupOrAlias, ConfigEndpoint::Type type = ConfigEndpoint::ANY);
1228 
1230  std::map<std::string, ConfigEndpoint> GetAllConfiguredServices() { return allServices; }
1231 
1232 
1234 
1240  static std::string ARCUSERDIRECTORY();
1242 
1247  static std::string SYSCONFIG();
1249 
1253  static std::string SYSCONFIGARCLOC();
1255 
1261  static std::string DEFAULTCONFIG();
1263 
1267  static std::string EXAMPLECONFIG();
1269 
1277  static std::string JOBLISTFILE();
1278 
1280 
1287  static const int DEFAULT_TIMEOUT = 20;
1288 
1290 
1298  static std::string DEFAULT_BROKER();
1299 
1300  private:
1301 
1302  static ConfigEndpoint ServiceFromLegacyString(std::string);
1303 
1304  void setDefaults();
1305  static bool makeDir(const std::string& path);
1306  static bool copyFile(const std::string& source,
1307  const std::string& destination);
1308  bool CreateDefaultConfigurationFile() const;
1309 
1310  std::list<ConfigEndpoint> FilterServices(const std::list<ConfigEndpoint>&, ConfigEndpoint::Type);
1311 
1312 
1313  std::string joblistfile;
1314  std::string joblisttype;
1315 
1316  int timeout;
1317 
1318  std::string verbosity;
1319 
1320  // Broker name and arguments.
1321  std::pair<std::string, std::string> broker;
1322 
1323  std::list<ConfigEndpoint> defaultServices;
1324  std::map<std::string, ConfigEndpoint> allServices;
1325  std::map<std::string, std::list<ConfigEndpoint> > groupMap;
1326  std::list<std::string> rejectDiscoveryURLs;
1327  std::list<std::string> rejectManagementURLs;
1328 
1329  std::string credentialString;
1330  std::string otoken;
1331  std::string proxyPath;
1332  std::string certificatePath;
1333  std::string keyPath;
1334  std::string keyPassword;
1335  int keySize;
1336  std::string caCertificatePath;
1337  std::string caCertificatesDirectory;
1338  Period certificateLifeTime;
1339 
1340  URL slcs;
1341 
1342  std::string vomsesPath;
1343  std::list<std::string> defaultVomses;
1344 
1345  std::string storeDirectory;
1346  std::string downloadDirectory;
1347  std::string idPName;
1348 
1349  std::string username;
1350  std::string password;
1351 
1352  std::string overlayfile;
1353  std::string utilsdir;
1354 
1355  std::string submissioninterface;
1356  std::string infointerface;
1357  // User whose identity (uid/gid) should be used to access filesystem
1358  // Normally this is the same as the process owner
1359  User user;
1360  // Private members not refered to outside this class:
1361  bool ok;
1362 
1363  initializeCredentialsType initializeCredentials;
1364 
1365  static Logger logger;
1366  };
1367 
1368 
1370 
1383  public:
1385  CertEnvLocker(const UserConfig& cfg);
1387  ~CertEnvLocker(void);
1388 
1389  protected:
1390  std::string x509_user_key_old;
1391  std::string x509_user_key_new;
1392  bool x509_user_key_set;
1393  std::string x509_user_cert_old;
1394  std::string x509_user_cert_new;
1395  bool x509_user_cert_set;
1396  std::string x509_user_proxy_old;
1397  std::string x509_user_proxy_new;
1398  bool x509_user_proxy_set;
1399  std::string ca_cert_dir_old;
1400  bool ca_cert_dir_set;
1401  };
1402 
1405 } // namespace Arc
1406 
1407 #endif // __ARC_USERCONFIG_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
int KeySize() const
Get key size.
Definition: UserConfig.h:868
Defines how user credentials are looked for.
Definition: UserConfig.h:98
bool operator==(initializeType v)
Returns true if this initializeType is the same as v.
Definition: UserConfig.h:115
bool operator!=(initializeType v)
Returns true if this initializeType is not the same as v.
Definition: UserConfig.h:117
~CertEnvLocker(void)
Release lock on X509 environment variables and set back to old values if they were changed...
const std::string & JobListType() const
Get type of job storage.
Definition: UserConfig.h:505
User configuration class
Definition: UserConfig.h:196
initializeCredentialsType(void)
Construct a new initializeCredentialsType with initializeType TryCredentials.
Definition: UserConfig.h:111
static std::string DEFAULTCONFIG()
Path to default configuration file.
void CredentialString(const std::string &cred)
Set credentials.
Definition: UserConfig.h:699
Same as TryCredentials but skip checking CA certificates.
Definition: UserConfig.h:107
static std::string EXAMPLECONFIG()
Path to example configuration.
bool SaveToFile(const std::string &filename) const
Save to INI file.
a local information system of a computing element
Definition: UserConfig.h:41
static std::string DEFAULT_BROKER()
Default broker.
std::string InterfaceName
A string representing the interface type (based on the InterfaceName attribute of the GLUE2 specifica...
Definition: UserConfig.h:62
bool ProxyPath(const std::string &newProxyPath)
Set path to user proxy.
Definition: UserConfig.h:743
const URL & SLCS() const
Get the URL to the Short Lived Certificate Service (SLCS).
Definition: UserConfig.h:964
static std::string JOBLISTFILE()
Path to default job list file.
bool Broker(const std::string &name, const std::string &argument)
Set broker to use in target matching.
Definition: UserConfig.h:604
Configuration for client interface.
Definition: ArcConfig.h:104
static std::string SYSCONFIG()
Path to system configuration.
bool UserName(const std::string &name)
Set user-name for SLCS.
Definition: UserConfig.h:658
initializeType
initializeType determines how UserConfig deals with credentials.
Definition: UserConfig.h:101
Represents the endpoint of service with a given type and GLUE2 InterfaceName.
Definition: UserConfig.h:36
bool KeySize(int newKeySize)
Set key size.
Definition: UserConfig.h:857
const std::pair< std::string, std::string > & Broker() const
Get the broker and corresponding arguments.
Definition: UserConfig.h:614
bool CertificatePath(const std::string &newCertificatePath)
Set path to certificate.
Definition: UserConfig.h:771
bool CACertificatePath(const std::string &newCACertificatePath)
Set CA-certificate path.
Definition: UserConfig.h:884
const std::string & SubmissionInterface() const
Get the default submission interface.
Definition: UserConfig.h:1151
UserConfig(initializeCredentialsType initializeCredentials=initializeCredentialsType())
Create a UserConfig object.
static std::string ARCUSERDIRECTORY()
Path to ARC user home directory.
bool StoreDirectory(const std::string &newStoreDirectory)
Set store directory.
Definition: UserConfig.h:994
a service registry
Definition: UserConfig.h:40
ServiceType
Type of service.
Definition: UserConfig.h:23
A logger class.
Definition: Logger.h:493
void AddRejectDiscoveryURLs(const std::list< std::string > &urls)
Add list of URLs to ignored at service discovery.
Definition: UserConfig.h:1168
std::string tostring(T t, int width=0, int precision=0)
This method converts any type to a string of the width given.
Definition: StringConv.h:92
const std::string & UtilsDirPath() const
Get path to directory storing utility files for DataPoints.
Definition: UserConfig.h:1089
const std::string & CertificatePath() const
Get path to certificate.
Definition: UserConfig.h:781
const User & GetUser() const
Get User for filesystem access.
Definition: UserConfig.h:1106
std::string RequestedSubmissionInterfaceName
A GLUE2 InterfaceName requesting a job submission interface.
Definition: UserConfig.h:70
Class for handling X509* variables in a multi-threaded environment.
Definition: UserConfig.h:1382
const std::string & CACertificatesDirectory() const
Get path to CA-certificate directory.
Definition: UserConfig.h:922
Same as NotTryCredentials but skip checking CA certificates.
Definition: UserConfig.h:106
std::list< ConfigEndpoint > GetServicesInGroup(const std::string &group, ConfigEndpoint::Type type=ConfigEndpoint::ANY)
Get the services in a given group filtered by type.
const std::string & CredentialString() const
Get credentials.
Definition: UserConfig.h:708
const std::list< std::string > & DefaultVOMSes() const
Get the list of VOMS VOs to be used by default while creating proxy credentials.
Definition: UserConfig.h:645
both, only used for filtering, when both types are accepted
Definition: UserConfig.h:42
initializeCredentialsType(initializeType v)
Construct a new initializeCredentialsType with initializeType v.
Definition: UserConfig.h:113
Type type
The type of the ConfigEndpoint: REGISTRY or COMPUTINGINFO.
Definition: UserConfig.h:56
Look for credentials, test if they are valid and report errors if not valid.
Definition: UserConfig.h:105
int Timeout() const
Get timeout.
Definition: UserConfig.h:536
A service that processes jobs.
Definition: UserConfig.h:24
std::list< ConfigEndpoint > GetDefaultServices(ConfigEndpoint::Type type=ConfigEndpoint::ANY)
Get the services flagged as default filtered by type.
Look for credentials and test if they are valid.
Definition: UserConfig.h:104
const std::string & InfoInterface() const
Get the default local information system interface.
Definition: UserConfig.h:1128
bool KeyPath(const std::string &newKeyPath)
Set path to key.
Definition: UserConfig.h:802
const std::string & UserName() const
Get user-name.
Definition: UserConfig.h:667
bool InitializeCredentials(initializeCredentialsType initializeCredentials)
Initialize user credentials.
ConfigEndpoint(const std::string &URLString="", const std::string &InterfaceName="", ConfigEndpoint::Type type=ConfigEndpoint::ANY)
Creates a ConfigEndpoint from a URL an InterfaceName and a Type.
Definition: UserConfig.h:52
const std::string & VOMSESPath()
Get path to file containing VOMS configuration.
Same as RequireCredentials but skip checking CA certificates.
Definition: UserConfig.h:108
const std::string & OToken() const
Get authentication token.
Definition: UserConfig.h:727
bool LoadConfigurationFile(const std::string &conffile, bool ignoreJobListFile=true)
Load specified configuration file.
static std::string SYSCONFIGARCLOC()
Path to system configuration at ARC location.
bool CredentialsFound() const
Validate credential location.
Definition: UserConfig.h:388
A Period represents a length of time.
Definition: DateTime.h:48
void SetUser(const User &u)
Set User for filesystem access.
Definition: UserConfig.h:1099
const std::string & OverlayFile() const
Get path to configuration overlay file.
Definition: UserConfig.h:1071
bool KeyPassword(const std::string &newKeyPassword)
Set password for generated key.
Definition: UserConfig.h:831
Type
Types of ComputingEndpoint objects.
Definition: UserConfig.h:39
bool IdPName(const std::string &name)
Set IdP name.
Definition: UserConfig.h:1040
bool Password(const std::string &newPassword)
Set password.
Definition: UserConfig.h:680
Class to represent general URLs.
Definition: URL.h:88
bool operator!() const
Returns true if the URL is empty.
Definition: UserConfig.h:78
void ApplyToConfig(BaseConfig &ccfg) const
Apply credentials to BaseConfig.
bool JobDownloadDirectory(const std::string &newDownloadDirectory)
Set download directory.
Definition: UserConfig.h:1016
bool VOMSESPath(const std::string &path)
Set path to file containing VOMS configuration.
Definition: UserConfig.h:629
const std::string & IdPName() const
Get IdP name.
Definition: UserConfig.h:1048
CertEnvLocker(const UserConfig &cfg)
Create a lock on X509 environment variables. Blocks if another instance exists.
Don&#39;t look for credentials.
Definition: UserConfig.h:102
Look for credentials but don&#39;t evaluate them.
Definition: UserConfig.h:103
bool InfoInterface(const std::string &infointerface_)
Set the default local information system interface.
Definition: UserConfig.h:1119
bool CertificateLifeTime(const Period &newCertificateLifeTime)
Set certificate life time.
Definition: UserConfig.h:937
void ClearRejectDiscoveryURLs()
Clear the rejected service discovery URLs.
Definition: UserConfig.h:1174
const std::string & StoreDirectory() const
Get store diretory.
Definition: UserConfig.h:1003
const std::string & KeyPassword() const
Get password for generated key.
Definition: UserConfig.h:842
const std::string & Verbosity() const
Get the user selected level of verbosity.
Definition: UserConfig.h:565
std::list< ConfigEndpoint > GetServices(const std::string &groupOrAlias, ConfigEndpoint::Type type=ConfigEndpoint::ANY)
Get one or more service with the given alias or in the given group filtered by type.
const std::list< std::string > & RejectManagementURLs() const
Get the list of rejected job managmenet URLs.
Definition: UserConfig.h:1182
const std::string & KeyPath() const
Get path to key.
Definition: UserConfig.h:815
A service that provides information.
Definition: UserConfig.h:25
bool SLCS(const URL &newSLCS)
Set the URL to the Short Lived Certificate Service (SLCS).
Definition: UserConfig.h:957
const std::list< std::string > & RejectDiscoveryURLs() const
Get the list of rejected service discovery URLs.
Definition: UserConfig.h:1159
const std::string & Password() const
Get password.
Definition: UserConfig.h:689
bool SubmissionInterface(const std::string &submissioninterface_)
Set the default submission interface.
Definition: UserConfig.h:1142
Platform independent representation of system user.
Definition: User.h:16
bool operator!() const
Check for non-validity.
Definition: UserConfig.h:460
bool OverlayFile(const std::string &path)
Set path to configuration overlay file.
Definition: UserConfig.h:1065
std::map< std::string, ConfigEndpoint > GetAllConfiguredServices()
Get all services.
Definition: UserConfig.h:1230
const std::string & JobListFile() const
Get a reference to the path of the job list file.
Definition: UserConfig.h:485
const std::string & CACertificatePath() const
Get path to CA-certificate.
Definition: UserConfig.h:893
bool operator==(ConfigEndpoint c) const
Returns true if the type, the URLString, the InterfaceName and the RequestedSubmissionInterfaceName m...
Definition: UserConfig.h:83
void OToken(const std::string &token)
Set authentication token.
Definition: UserConfig.h:718
const Period & CertificateLifeTime() const
Get certificate life time.
Definition: UserConfig.h:946
ConfigEndpoint GetService(const std::string &alias)
Get the ConfigEndpoint for the service with the given alias.
const std::string & JobDownloadDirectory() const
Get download directory.
Definition: UserConfig.h:1028
bool CACertificatesDirectory(const std::string &newCACertificatesDirectory)
Set path to CA-certificate directory.
Definition: UserConfig.h:912
bool IsSameIdentity(UserConfig const &other) const
Check if configuration represents same user identity (false negatives are likely) ...
Definition: UserConfig.h:974
static const int DEFAULT_TIMEOUT
Default timeout in seconds.
Definition: UserConfig.h:1287
const std::string & ProxyPath() const
Get path to user proxy.
Definition: UserConfig.h:751
std::string URLString
A string representing the URL of the ConfigEndpoint.
Definition: UserConfig.h:59