4 #include "RelationalAccess/AuthenticationCredentials.h"
5 #include "CoralCommon/Cipher.h"
6 #include "RelationalAccess/AuthenticationServiceException.h"
7 #include "CoralKernel/IPropertyManager.h"
8 #include "CoralKernel/Property.h"
9 #include "CoralKernel/Context.h"
12 #include "xercesc/parsers/XercesDOMParser.hpp"
13 #include "xercesc/framework/MemBufInputSource.hpp"
14 #include "xercesc/dom/DOM.hpp"
15 #include "xercesc/sax/HandlerBase.hpp"
16 #include "xercesc/util/XMLString.hpp"
17 #include "xercesc/util/PlatformUtils.hpp"
25 #include <boost/filesystem.hpp>
26 #include <boost/version.hpp>
27 #include <boost/bind.hpp>
29 #include "CoralBase/MessageStream.h"
35 m_serviceName( serviceName ),
36 m_connectionName( connectionName ),
37 m_default( new coral::AuthenticationCredentials( serviceName ) ),
44 for ( std::map< std::string, coral::AuthenticationCredentials* >::iterator iData = m_data.begin();
45 iData != m_data.end(); ++iData )
53 m_default->registerItem( item, value );
61 std::map< std::string, coral::AuthenticationCredentials* >::iterator iRole = m_data.find( role );
62 if ( iRole == m_data.end() ) {
63 iRole = m_data.insert( std::make_pair( role,
new coral::AuthenticationCredentials( m_serviceName ) ) ).first;
65 iRole->second->registerItem( item, value );
68 const coral::IAuthenticationCredentials&
74 const coral::IAuthenticationCredentials&
90 m_isInitialized(
false ),
91 m_inputFileName(
"" ),
107 for ( std::map< std::string, cond::XMLAuthenticationService::DataSourceEntry* >::iterator iConnection = m_data.begin();
108 iConnection != m_data.end(); ++iConnection )
delete iConnection->second;
115 if(boost::filesystem::is_directory(boostAuthPath)){
119 m_inputFileName = boostAuthPath.string();
126 coral::MessageStream
log(
"cond::XMLAuthenticationService::processFile");
133 inputFile.
read(inputFileName);
136 log << coral::Error <<
"File \"" << inputFileName <<
"\" not found."<<
std::string(exc.
what())<<coral::MessageStream::endmsg;
142 #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 47
168 xercesc::MemBufInputSource* memBufInputSource = 0;
172 xercesc::XercesDOMParser
parser;
173 parser.setValidationScheme( xercesc::XercesDOMParser::Val_Always );
174 parser.setDoNamespaces(
true );
176 xercesc::HandlerBase errorHandler;
177 parser.setErrorHandler( &errorHandler );
180 const char* bufferId=
"InMemoryDocument";
181 const char* buffer = cont.c_str();
183 memBufInputSource =
new xercesc::MemBufInputSource( (
const XMLByte*)buffer,strlen(buffer),bufferId,
false );
185 parser.parse(*memBufInputSource);
187 xercesc::DOMDocument* document = parser.getDocument();
192 xercesc::DOMNodeList* connectionList = document->getElementsByTagName( tempStr );
194 if ( connectionList )
196 XMLSize_t numberOfConnections = connectionList->getLength();
198 for ( XMLSize_t iConnection = 0; iConnection < numberOfConnections; ++iConnection )
200 xercesc::DOMNode* connectionNode = connectionList->item( iConnection );
202 if ( connectionNode )
210 std::map< std::string, cond::XMLAuthenticationService::DataSourceEntry* >::iterator iConnection = m_data.find( sConnectionName );
211 if ( iConnection != m_data.end() ) {
212 credential = iConnection->second;
215 log<<
coral::Debug<<
"Credential parameters for connection string \""
217 <<
"\" have already been defined. Only new elements are appended, while existing will be ignored."
218 << coral::MessageStream::endmsg;
221 m_data.insert( std::make_pair( sConnectionName, credential ) );
224 xercesc::DOMNodeList* parameterList = connectionNode->getChildNodes();
228 XMLSize_t numberOfParameters = parameterList->getLength();
230 for ( XMLSize_t iParameter = 0; iParameter < numberOfParameters; ++iParameter )
232 xercesc::DOMNode* parameterNode = parameterList->item( iParameter );
234 if ( parameterNode && parameterNode->getNodeType() == xercesc::DOMNode::ELEMENT_NODE )
240 if ( sNodeName ==
"parameter" ) {
250 else if ( sNodeName ==
"role" ) {
256 xercesc::DOMNodeList* roleParameterList = parameterNode->getChildNodes();
259 if ( roleParameterList )
261 XMLSize_t numberOfRoleParameters = roleParameterList->getLength();
263 for ( XMLSize_t iRoleParameter = 0; iRoleParameter < numberOfRoleParameters; ++iRoleParameter )
265 xercesc::DOMNode* roleParameterNode = roleParameterList->item( iRoleParameter );
266 if ( roleParameterNode && roleParameterNode->getNodeType() == xercesc::DOMNode::ELEMENT_NODE )
272 if ( sRoleNodeName ==
"parameter" ) {
274 std::string sRoleParameterName = roleParameterName;
277 std::string sRoleParameterValue = roleParameterValue;
295 catch (
const xercesc::XMLException& toCatch )
300 log<<coral::Error<<
std::string(message)<<coral::MessageStream::endmsg;
304 catch (
const xercesc::DOMException& toCatch )
309 log<<coral::Error<<
std::string(message)<<coral::MessageStream::endmsg;
313 catch (
const xercesc::SAXException& toCatch )
318 log<<coral::Error<<
std::string(message)<<coral::MessageStream::endmsg;
325 log<<coral::Error<<
"Unexpected Exception parsing file \"" << inputFileName <<
"\"" <<coral::MessageStream::endmsg;
328 if(memBufInputSource)
delete memBufInputSource;
336 coral::MessageStream
log(
"cond::XMLAuthenticationService::initialize");
338 if ( inputFileNames.empty() )
342 log<<
coral::Debug<<
"Could not open \"" << m_inputFileName <<
"\" for reading" <<coral::MessageStream::endmsg;
350 catch (
const xercesc::XMLException& toCatch )
355 log<<coral::Error<<
std::string(message)<<coral::MessageStream::endmsg;
361 for ( std::set< std::string >::const_reverse_iterator iFileName = inputFileNames.rbegin();
362 iFileName != inputFileNames.rend(); ++iFileName ) {
371 if(!m_isInitialized)
reset();
376 for ( std::map< std::string, cond::XMLAuthenticationService::DataSourceEntry* >::iterator iConnection = m_data.begin();
377 iConnection != m_data.end(); ++iConnection )
delete iConnection->second;
379 m_isInitialized =
false;
384 const coral::IAuthenticationCredentials&
387 boost::mutex::scoped_lock
lock(m_mutexLock);
388 if ( ! m_isInitialized ) {
391 std::map< std::string, cond::XMLAuthenticationService::DataSourceEntry* >::const_iterator iConnection = m_data.find( connectionString );
392 if ( iConnection == m_data.end() )
394 return iConnection->second->credentials();
398 const coral::IAuthenticationCredentials&
402 boost::mutex::scoped_lock
lock(m_mutexLock);
403 if ( ! m_isInitialized ) {
406 std::map< std::string, cond::XMLAuthenticationService::DataSourceEntry* >::const_iterator iConnection = m_data.find( connectionString );
407 if ( iConnection == m_data.end() )
409 return iConnection->second->credentials( role );
413 std::set< std::string >
416 coral::MessageStream
log(
"cond::XMLAuthenticationService::verifyFileName");
421 if ( boost::filesystem::exists( m_inputFileName ) ) {
422 if(boost::filesystem::is_directory( m_inputFileName )){
424 log <<coral::Error <<
"Provided path \"" << m_inputFileName <<
"\" is a directory." <<coral::MessageStream::endmsg;
428 fileNames.insert( fullPath.string() );
429 if(filePath.is_complete())
return fileNames;
433 const char* thePathVariable = ::getenv(
"CORAL_AUTH_PATH" );
434 if ( ! thePathVariable )
return fileNames;
435 log<<
coral::Debug<<
"File \"" << m_inputFileName <<
"\" not found in the current directory. Trying in the search path." <<coral::MessageStream::endmsg;
439 if(boost::filesystem::exists(searchPath)){
440 if(!boost::filesystem::is_directory( searchPath )){
441 log<<
coral::Debug<<
"Search path \"" << searchPath <<
"\" is not a directory."<<coral::MessageStream::endmsg;
445 fullPath /= filePath;
446 fileNames.insert( fullPath.string() );
448 log<<
coral::Debug<<
"Search path \"" << searchPath <<
"\" does not exist."<<coral::MessageStream::endmsg;
virtual char const * what() const
static AlgebraicMatrix initialize()
void appendCredentialItemForRole(const std::string &item, const std::string &value, const std::string &role)
Base exception class for the object to relational access.
bool initialize()
Service framework related initialization.
tuple cont
load Luminosity info ##
static PFTauRenderPlugin instance
static constexpr const char *const COND_AUTH_PATH_PROPERTY
static const std::string serviceName
void reset()
Reset parsed data.
#define DEFINE_CORALSERVICE(type, name)
std::set< std::string > verifyFileName()
Verifies the existence of the authentication files.
char XML_AUTHENTICATION_FILE[]
bool read(const std::string &fileName)
XMLAuthenticationService(const std::string &name)
Standard Constructor.
XMLCh * transcode(const T &fInput)
void setAuthenticationPath(const std::string &inputPath)
Sets the input file name.
virtual ~XMLAuthenticationService()
Standard Destructor.
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
const std::string & content() const
bool processFile(const std::string &inputFileName)
Parses an xml file.
void appendCredentialItem(const std::string &item, const std::string &value)
coral::Property::CallbackID m_callbackID
const coral::IAuthenticationCredentials & credentials() const
volatile std::atomic< bool > shutdown_flag false
~DataSourceEntry()
Destructor.
void reset(double vett[256])
const coral::IAuthenticationCredentials & credentials(const std::string &connectionString) const