aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/alias.py91
-rw-r--r--server/component.py54
-rw-r--r--server/server.py137
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))