aboutsummaryrefslogtreecommitdiffstats
path: root/server/server.py
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2010-12-31 19:19:25 +0100
committerThibaut Horel <thibaut.horel@gmail.com>2010-12-31 19:19:25 +0100
commitd90aec17e2201f256783a531c548dcc9857c889d (patch)
tree56b6d0580ee1993c73e67c63d4a452a81bbaaf1e /server/server.py
parentaf76bcdf7a947702eaa19d39f5b9ecfcd7ec6fd2 (diff)
downloadalias-d90aec17e2201f256783a531c548dcc9857c889d.tar.gz
Cleanup of repository. Bases of webclient.
* remove sleekxmpp (install guideline in server/README) * move server code to server directory * webclient directory with basic strophejs example
Diffstat (limited to 'server/server.py')
-rwxr-xr-xserver/server.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/server/server.py b/server/server.py
new file mode 100755
index 0000000..d78552d
--- /dev/null
+++ b/server/server.py
@@ -0,0 +1,97 @@
+#!/usr/bin/python2
+import logging
+from argparse import ArgumentParser
+
+from sleekxmpp.componentxmpp import ComponentXMPP
+from sleekxmpp.xmlstream.xmlstream import XMLStream
+
+from user import UserHandler
+from config import filename, config
+
+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("AliasPlugin", module = "plugin")
+ 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)
+ logging.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
+ self.userHandler.register(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
+ self.userHandler.unregister(userJID)
+
+ def presence_probe(self, event):
+ self.send_presence(pto = event["from"].full)
+
+
+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')
+
+ args = commandline.parse_args()
+
+ if args.config is None:
+ logging.basicConfig(level = args.debug)
+ config.name = args.name
+ config.port = args.port
+ config.secret = args.secret
+ config.root = args.root
+ config.host = args.host
+ else:
+ filename = args.config
+ logging.basicConfig(level = args.debug)
+ config.read(filename)
+
+ 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 :
+ print "Couldn't connect"
+
+