Mercurial > psgxs
view modules/mod_disco.js @ 36:26eb015a7c40
Really should learn that “hg addremove” is good.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 10 Nov 2010 01:43:25 +0100 |
parents | b80ab94da447 |
children | bc717575e66a |
line wrap: on
line source
var config = require('../configuration'); var storage = require('../storage'); var forms = require('../forms'); var errors = require('../errors'); var makeError = errors.makeError; var NS = require('../namespaces'); // SECTION 5.1: Discover Features exports.disco_info = { type: 'get', child: 'query', ns: NS.DISCO_INFO, func: function(response, stanza, request) { var nodeID = request.getAttribute('node'); // SECTION 5.3: Discover Node Information if (nodeID && nodeID != '') { if (!storage.existsNode(nodeID)) return makeError(response, errors.node_does_not_exist.n); var conf = storage.getConfiguration(nodeID); if (typeof conf == 'number') return makeError(response, conf); var type = 'leaf' if (conf['pubsub#node_type']) type = conf['pubsub#node_type']; response.c('query', {xmlns: NS.DISCO_INFO, node: nodeID}) .c('identity', {category: 'pubsub', type: type}).up() .c('feature', {'var': NS.PUBSUB}).up(); // SECTION 5.4 if (config.enabled('meta-data')) { var x = forms.build('result', 'node_metadata', storage.getMetadata(nodeID), true); if (x) response.cnode(x); } // SECTION 5.1: Discover Features } else { response.c('query', {xmlns: NS.DISCO_INFO}) .c('identity', {category: 'pubsub', type: 'service', name: 'PubSub JavaScript Server'}).up() .c('feature', {'var': NS.DISCO_INFO}).up() .c('feature', {'var': NS.DISCO_ITEMS}).up() .c('feature', {'var': NS.PUBSUB}).up() .c('feature', {'var': 'jabber:iq:version'}).up() .c('feature', {'var': NS.COMMANDS}).up(); for (var i in config.activated) if (typeof i == 'string') response.c('feature', {'var': 'http://jabber.org/protocol/pubsub#' + config.activated[i]}).up(); } return response; } } // SECTION 5.2: Discover Nodes exports.disco_items = { type: 'get', child: 'query', ns: NS.DISCO_ITEMS, func: function(response, stanza, request) { var children; var nodeID = request.getAttribute('node'); if (nodeID && nodeID != '') { if (nodeID == NS.COMMANDS) { // XEP-0050: Ad-Hoc Commands response.c('query', {xmlns: NS.DISCO_ITEMS, node: nodeID}) .c('item', {jid: config.jid, node: 'ping', name: 'Ping'}).up() .c('item', {jid: config.jid, node: 'reload', name: 'Reload'}).up(); return response; } else { if (!storage.existsNode(nodeID)) return makeError(response, errors.node_does_not_exist.n); response.c('query', {xmlns: NS.DISCO_ITEMS, node: nodeID}); children = storage.getChildren(nodeID); if (typeof children == 'number') return makeError(response, children); } } else { response.c('query', {xmlns: NS.DISCO_ITEMS}); children = storage.getChildren(); if (typeof children == 'number') return makeError(response, children); } for (var i in children) { var attr = {jid: config.jid}; if (children[i] == 'node') { if (config.enabled('meta-data')) { var metadata = storage.getMetadata(i); if (metadata['pubsub#title']) attr.name = metadata['pubsub#title']; } attr.node = i; // SECTION 5.5: Discover Items for a Node } else attr.name = i; response.c('item', attr).up(); } return response; } }