def loadRelevantPluginCredentials(): ''' Load the credentials configuration file. ''' configFile = hlm_args.args().daemonCredentials config = configparser.SafeConfigParser() try: config.read(configFile) except SystemExit: raise except BaseException as exc: raise FatalError(_('Can\'t load the credentials configuration file {0}: {1}').format(quote(configFile), exc)) configCredentials = {} try: supportedProviders = hlm_auth_plugins.getSupportedProviders() sections = config.sections() regex = re.compile('^provider = ([a-zA-Z0-9_.]+)$') for section in sections: # Check service provider match = regex.search(section) if match == None: raise Exception(_('section {0} is not allowed in this file.').format('[' + section + ']')) provider = match.group(1) if provider not in supportedProviders: raise Exception(_('service provider {0} is not (currently) supported by HLM.').format(quote(provider))) # Check options options = config.options(section) _checkAlienDirectives(['user', 'password'], options, section) user = _mandatoryDirective('user', options, section, config.get) password = _mandatoryDirective('password', options, section, config.get) configCredentials[provider] = (user, password) if configCredentials == {}: raise Exception(_('no configured credentials, exiting.')) # Check which plugins we may use, according to the provided credentials. availablePlugins = hlm_auth_plugins.getAuthPlugins() relevantPlugins = set() for plugin in availablePlugins: plugin.pluginCredentials = {} pluginProviders = plugin.getSupportedProviders() for provider in configCredentials: if provider in pluginProviders: plugin.pluginCredentials[provider] = configCredentials[provider] relevantPlugins.add(plugin) relevantPlugins = list(relevantPlugins) if relevantPlugins == []: raise Exception(_('configured credentials don\'t match any available authentication plugin, exiting.')) if __DEBUG__: logDebug('Credentials configuration has been loaded from {0}.'.format(configFile)) return relevantPlugins except SystemExit: raise except BaseException as exc: raise FatalError(_('Incorrect credentials configuration file {0}: {1}').format(quote(configFile), exc))
def loadDaemon(): ''' Load the daemon configuration file. ''' args = hlm_args.args() configFile = args.daemonConfig if configFile == None: configFile = hlm_paths.daemonConfig() config = configparser.SafeConfigParser() try: config.read(configFile) except SystemExit: raise except BaseException as exc: raise FatalError(_('Can\'t load the daemon configuration file {0}: {1}').format(quote(configFile), exc)) try: if config.sections() != ['daemon']: raise Exception(_('only the section {0} is allowed in this file.').format('[daemon]')) options = config.options('daemon') _checkAlienDirectives(['credentials', 'user', 'group', 'ping_site', 'ping_interval'], options, 'daemon') # "credentials" accepts a credentials.conf file path if args.daemonCredentials == None: credentials = None if config.has_option('daemon', 'credentials'): credentials = config.get('daemon', 'credentials') else: credentials = hlm_paths.credentialsConfig() args.daemonCredentials = credentials # "user" accepts an account name user = None if config.has_option('daemon', 'user'): user = config.get('daemon', 'user') # "group" accepts a group name group = None if config.has_option('daemon', 'group'): group = config.get('daemon', 'group') # "pingSite" requires an http:// website URL pingSite = _mandatoryDirective('ping_site', options, 'daemon', config.get) if not pingSite.startswith('http://'): raise Exception(_('ping_site {0} is is incorrect (must start with {1}), exiting.').format(quote(pingSite), quote('http://'))) pingInterval = _mandatoryDirective('ping_interval', options, 'daemon', config.getint) if pingInterval < _minimumPingInterval: if __WARNING__: logWarning(_('Daemon configuration file {0}: ping_interval is way too low ({1} seconds), forcing it to {2} seconds.').format(quote(configFile), pingInterval, _minimumPingInterval)) pingInterval = _minimumPingInterval # Wrap configuration into a single Values() object configCredentials = Values() configCredentials.user = user configCredentials.group = group configCredentials.pingSite = pingSite configCredentials.pingInterval = pingInterval if __DEBUG__: logDebug('Daemon configuration has been loaded from {0}.'.format(configFile)) return configCredentials except SystemExit: raise except BaseException as exc: raise FatalError(_('Incorrect daemon configuration file {0}: {1}').format(quote(configFile), exc))
def main(): try: # Parse arguments args = hlm_args.args() # Enforce global debugging flag if _forceDebug: args.logLevel = 'debug' # Apply command-line debugging flag hotspot_login_manager.libs.core.hlm_globals.setLogLevel(args.logLevel) if __DEBUG__: logDebug('Debugging mode is on.') #----------------------------------------------------------------------------- # --daemon if args.runDaemon: from hotspot_login_manager.libs.daemon import hlm_main_daemon hlm_main_daemon.main(args) #----------------------------------------------------------------------------- # --reauth if args.runReauth: from hotspot_login_manager.libs.clients import hlm_main_reauth hlm_main_reauth.main(args) #----------------------------------------------------------------------------- # --status if args.runStatus: from hotspot_login_manager.libs.clients import hlm_main_status hlm_main_status.main(args) #----------------------------------------------------------------------------- # --providers if args.runProviders: from hotspot_login_manager.libs.clients import hlm_main_providers hlm_main_providers.main(args) #----------------------------------------------------------------------------- # --pid if args.runPID: from hotspot_login_manager.libs.clients import hlm_main_pid hlm_main_pid.main(args) #----------------------------------------------------------------------------- # --notifier if args.runNotifier: from hotspot_login_manager.libs.clients import hlm_main_notifier hlm_main_notifier.main(args) #----------------------------------------------------------------------------- except SystemExit as exc: sys.exit(exc.code) except ImportError as exc: logError('Couldn\'t load module: {0}'.format(exc)) if __DEBUG__: logDebug('Full exception info:', ''.join(traceback.format_exception(*sys.exc_info()))) sys.exit(255) except BaseException as exc: logError(exc) if __DEBUG__: logDebug('Full exception info:', ''.join(traceback.format_exception(*sys.exc_info()))) sys.exit(1) sys.exit(0)