diff options
| -rw-r--r-- | server/alias.py | 91 | ||||
| -rw-r--r-- | server/component.py | 54 | ||||
| -rw-r--r-- | server/server.py | 137 |
3 files changed, 141 insertions, 141 deletions
diff --git a/server/alias.py b/server/alias.py deleted file mode 100644 index 30925e1..0000000 --- a/server/alias.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/python2 -import logging -from argparse import ArgumentParser -from config import config -import daemon -import daemon.pidfile -from server import ObjectComponent -import os.path -import sys - -if __name__ == '__main__': - commandline = ArgumentParser(description = 'Connect the alias \ - component to a given server') - commandline.add_argument('-p', '--port', - help = 'Port to connect to', - type = int) - commandline.add_argument('-s', '--secret', - help = 'password') - commandline.add_argument('-n', '--name', - help = 'Name the component will have') - commandline.add_argument('-r', '--root', - help = 'Root directory of the user files') - commandline.add_argument('-c', '--config', - help = 'Name of the config file to use') - commandline.add_argument('-d', '--debug', - help = 'Set log level to DEBUG', - action = 'store_const', - const = logging.DEBUG, - default = logging.INFO) - commandline.add_argument('-o', '--host', - help = 'Host to connect to') - commandline.add_argument('-b', '--background', - help = 'run the server in the background', - action = 'store_true') - commandline.add_argument('--logfile', - help = 'location of the log file (default /var/log/${name}.log') - commandline.add_argument('--pidfile', - help = 'location of the pid file (default /var/run/${name}.pid') - args = commandline.parse_args() - - if args.config is None: - config.name = args.name - config.port = args.port - config.secret = args.secret - config.root = args.root - config.host = args.host - config.background = args.background - config.logfile = args.logfile - config.pidfile = args.pidfile - else: - filename = args.config - config.read(filename) - if config.logfile is None: - config.logfile = os.path.join('/var/log/', config.name + '.log') - if config.pidfile is None: - config.pidfile = os.path.join('/var/run/', config.name + '.pid') - - #set up the root logger - logging.getLogger('').setLevel(args.debug) - formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") - if config.background: - #save logs in a file - fh = logging.FileHandler(config.logfile) - fh.setFormatter(formatter) - logging.getLogger('').addHandler(fh) - else: - #save logs to the console - ch = logging.StreamHandler() - ch.setFormatter(formatter) - logging.getLogger('').addHandler(ch) - - if config.background: - context = daemon.DaemonContext(detach_process = True, - pidfile = daemon.pidfile.TimeoutPIDLockFile(config.pidfile,10), - files_preserve=[fh.stream.fileno()], - working_directory=os.path.abspath(config.root), - stdout=sys.stdout, stderr=sys.stderr) - else: - context = daemon.DaemonContext(detach_process = False, - stdout=sys.stdout, stderr=sys.stderr, - working_directory=os.path.abspath(config.root)) - - with context: - component = ObjectComponent(config.name, config.secret, - config.host, config.port, - config.root) - if component.connect(): - logging.info('Component {} connected'.format(component.boundjid)) - component.process(False) - else: - logging.error("Component {} couldn't connect".format(component.boundjid)) diff --git a/server/component.py b/server/component.py new file mode 100644 index 0000000..198b159 --- /dev/null +++ b/server/component.py @@ -0,0 +1,54 @@ +import logging +logger = logging.getLogger(__name__) +from sleekxmpp.componentxmpp import ComponentXMPP +from sleekxmpp.xmlstream.xmlstream import XMLStream + +from user import UserHandler + +class ObjectComponent(ComponentXMPP): + + def __init__(self, jid, secret, server, port, root): + ComponentXMPP.__init__(self, jid, secret, server, port) + self.register_plugin('xep_0030') + self.register_plugin('xep_0077', pconfig = {'root': root}) + self.plugin['xep_0077'] + self.register_plugin("AliasPlugin", module = "alias_plugin", pconfig = {'root': root}) + self.add_event_handler("session_start", self.start) + self.add_event_handler("presence_probe", self.presence_probe) + self.add_event_handler("message", self.message) + self.add_event_handler("changed_subscription", self.presence_subscription) + self.userHandler = UserHandler(root) + + def start(self, event): + for user in self.userHandler.get_user_list(): + self.send_presence(pto = user) + + def disconnect(self, reconnect = False): + for user in self.userHandler.get_user_list(): + self.send_presence(pto = user, ptype = "unavailable") + XMLStream.disconnect(self, reconnect) + logger.info('Component {} disconnected'.format(self.boundjid.bare)) + + def message(self, msg): + msg.reply("Thanks for sending\n{[body]}".format(msg)).send() + + def presence_subscription(self, subscription): + if subscription["type"] == "subscribe": + userJID = subscription["from"].full + if not self.userHandler.registered(userJID): + self.userHandler.register(userJID) + logger.info('registering user {}'.format(userJID)) + subscription.reply().send() + self.send_presence(pto = userJID) + self.send_presence_subscription(pto = userJID, ptype = "subscribe") + if subscription["type"] == "unsubscribe": + userJID = subscription["from"].full + if self.userHandler.registered(userJID): + self.userHandler.unregister(userJID) + logger.info('unregistering user {}'.format(userJID)) + + def presence_probe(self, event): + self.send_presence(pto = event["from"].full) + + + diff --git a/server/server.py b/server/server.py index 3bd953e..30925e1 100644 --- a/server/server.py +++ b/server/server.py @@ -1,54 +1,91 @@ +#!/usr/bin/python2 import logging -logger = logging.getLogger(__name__) -from sleekxmpp.componentxmpp import ComponentXMPP -from sleekxmpp.xmlstream.xmlstream import XMLStream - -from user import UserHandler - -class ObjectComponent(ComponentXMPP): - - def __init__(self, jid, secret, server, port, root): - ComponentXMPP.__init__(self, jid, secret, server, port) - self.register_plugin('xep_0030') - self.register_plugin('xep_0077', pconfig = {'root': root}) - self.plugin['xep_0077'].setForm('pubkey','privkey','salt') - self.register_plugin("AliasPlugin", module = "alias_plugin", pconfig = {'root': root}) - self.add_event_handler("session_start", self.start) - self.add_event_handler("presence_probe", self.presence_probe) - self.add_event_handler("message", self.message) - self.add_event_handler("changed_subscription", self.presence_subscription) - self.userHandler = UserHandler(root) - - def start(self, event): - for user in self.userHandler.get_user_list(): - self.send_presence(pto = user) - - def disconnect(self, reconnect = False): - for user in self.userHandler.get_user_list(): - self.send_presence(pto = user, ptype = "unavailable") - XMLStream.disconnect(self, reconnect) - logger.info('Component {} disconnected'.format(self.boundjid.bare)) - - def message(self, msg): - msg.reply("Thanks for sending\n{[body]}".format(msg)).send() - - def presence_subscription(self, subscription): - if subscription["type"] == "subscribe": - userJID = subscription["from"].full - if not self.userHandler.registered(userJID): - self.userHandler.register(userJID) - logger.info('registering user {}'.format(userJID)) - subscription.reply().send() - self.send_presence(pto = userJID) - self.send_presence_subscription(pto = userJID, ptype = "subscribe") - if subscription["type"] == "unsubscribe": - userJID = subscription["from"].full - if self.userHandler.registered(userJID): - self.userHandler.unregister(userJID) - logger.info('unregistering user {}'.format(userJID)) - - def presence_probe(self, event): - self.send_presence(pto = event["from"].full) +from argparse import ArgumentParser +from config import config +import daemon +import daemon.pidfile +from server import ObjectComponent +import os.path +import sys +if __name__ == '__main__': + commandline = ArgumentParser(description = 'Connect the alias \ + component to a given server') + commandline.add_argument('-p', '--port', + help = 'Port to connect to', + type = int) + commandline.add_argument('-s', '--secret', + help = 'password') + commandline.add_argument('-n', '--name', + help = 'Name the component will have') + commandline.add_argument('-r', '--root', + help = 'Root directory of the user files') + commandline.add_argument('-c', '--config', + help = 'Name of the config file to use') + commandline.add_argument('-d', '--debug', + help = 'Set log level to DEBUG', + action = 'store_const', + const = logging.DEBUG, + default = logging.INFO) + commandline.add_argument('-o', '--host', + help = 'Host to connect to') + commandline.add_argument('-b', '--background', + help = 'run the server in the background', + action = 'store_true') + commandline.add_argument('--logfile', + help = 'location of the log file (default /var/log/${name}.log') + commandline.add_argument('--pidfile', + help = 'location of the pid file (default /var/run/${name}.pid') + args = commandline.parse_args() + if args.config is None: + config.name = args.name + config.port = args.port + config.secret = args.secret + config.root = args.root + config.host = args.host + config.background = args.background + config.logfile = args.logfile + config.pidfile = args.pidfile + else: + filename = args.config + config.read(filename) + if config.logfile is None: + config.logfile = os.path.join('/var/log/', config.name + '.log') + if config.pidfile is None: + config.pidfile = os.path.join('/var/run/', config.name + '.pid') + + #set up the root logger + logging.getLogger('').setLevel(args.debug) + formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") + if config.background: + #save logs in a file + fh = logging.FileHandler(config.logfile) + fh.setFormatter(formatter) + logging.getLogger('').addHandler(fh) + else: + #save logs to the console + ch = logging.StreamHandler() + ch.setFormatter(formatter) + logging.getLogger('').addHandler(ch) + if config.background: + context = daemon.DaemonContext(detach_process = True, + pidfile = daemon.pidfile.TimeoutPIDLockFile(config.pidfile,10), + files_preserve=[fh.stream.fileno()], + working_directory=os.path.abspath(config.root), + stdout=sys.stdout, stderr=sys.stderr) + else: + context = daemon.DaemonContext(detach_process = False, + stdout=sys.stdout, stderr=sys.stderr, + working_directory=os.path.abspath(config.root)) + + with context: + component = ObjectComponent(config.name, config.secret, + config.host, config.port, + config.root) + if component.connect(): + logging.info('Component {} connected'.format(component.boundjid)) + component.process(False) + else: + logging.error("Component {} couldn't connect".format(component.boundjid)) |
