Software: Apache. PHP/5.5.15 uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 SYSTEM Safe-mode: OFF (not secure) E:\xampp\xampp\htdocs\chat\src\core\ drwxrwxrwx |
Viewing file: action.js (8.47 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) | /** File: action.js * Candy - Chats are not dead yet. * * Authors: * - Patrick Stadler <patrick.stadler@gmail.com> * - Michael Weibel <michael.weibel@gmail.com> * * Copyright: * (c) 2011 Amiado Group AG. All rights reserved. */ /** Class: Candy.Core.Action * Chat Actions (basicly a abstraction of Jabber commands) * * Parameters: * (Candy.Core.Action) self - itself * (Strophe) Strophe - Strophe * (jQuery) $ - jQuery */ Candy.Core.Action = (function(self, Strophe, $) { /** Class: Candy.Core.Action.Jabber * Jabber actions */ self.Jabber = { /** Function: Version * Replies to a version request * * Parameters: * (jQuery.element) msg - jQuery element */ Version: function(msg) { Candy.Core.getConnection().send($iq({type: 'result', to: msg.attr('from'), from: msg.attr('to'), id: msg.attr('id')}).c('query', {name: Candy.about.name, version: Candy.about.version, os: navigator.userAgent})); }, /** Function: Roster * Sends a request for a roster */ Roster: function() { Candy.Core.getConnection().send($iq({type: 'get', xmlns: Strophe.NS.CLIENT}).c('query', {xmlns: Strophe.NS.ROSTER}).tree()); }, /** Function: Presence * Sends a request for presence * * Parameters: * (Object) attr - Optional attributes */ Presence: function(attr) { Candy.Core.getConnection().send($pres(attr).tree()); }, /** Function: Services * Sends a request for disco items */ Services: function() { Candy.Core.getConnection().send($iq({type: 'get', xmlns: Strophe.NS.CLIENT}).c('query', {xmlns: Strophe.NS.DISCO_ITEMS}).tree()); }, /** Function: Autojoin * When Candy.Core.getOptions().autojoin is true, request autojoin bookmarks (OpenFire) * * Otherwise, if Candy.Core.getOptions().autojoin is an array, join each channel specified. */ Autojoin: function() { // Request bookmarks if(Candy.Core.getOptions().autojoin === true) { Candy.Core.getConnection().send($iq({type: 'get', xmlns: Strophe.NS.CLIENT}).c('query', {xmlns: Strophe.NS.PRIVATE}).c('storage', {xmlns: Strophe.NS.BOOKMARKS}).tree()); // Join defined rooms } else if($.isArray(Candy.Core.getOptions().autojoin)) { $.each(Candy.Core.getOptions().autojoin, function() { self.Jabber.Room.Join(this.valueOf()); }); } }, /** Function: ResetIgnoreList * Create new ignore privacy list (and reset the old one, if it exists). */ ResetIgnoreList: function() { Candy.Core.getConnection().send($iq({type: 'set', from: Candy.Core.getUser().getJid(), id: 'set1'}) .c('query', {xmlns: Strophe.NS.PRIVACY }).c('list', {name: 'ignore'}).c('item', {'action': 'allow', 'order': '0'}).tree()); }, /** Function: RemoveIgnoreList * Remove an existing ignore list. */ RemoveIgnoreList: function() { Candy.Core.getConnection().send($iq({type: 'set', from: Candy.Core.getUser().getJid(), id: 'remove1'}) .c('query', {xmlns: Strophe.NS.PRIVACY }).c('list', {name: 'ignore'}).tree()); }, /** Function: GetIgnoreList * Get existing ignore privacy list when connecting. */ GetIgnoreList: function() { Candy.Core.getConnection().send($iq({type: 'get', from: Candy.Core.getUser().getJid(), id: 'get1'}) .c('query', {xmlns: Strophe.NS.PRIVACY }).c('list', {name: 'ignore'}).tree()); }, /** Function: SetIgnoreListActive * Set ignore privacy list active */ SetIgnoreListActive: function() { Candy.Core.getConnection().send($iq({type: 'set', from: Candy.Core.getUser().getJid(), id: 'set2'}) .c('query', {xmlns: Strophe.NS.PRIVACY }).c('active', {name:'ignore'}).tree()); }, /** Function: GetJidIfAnonymous * On anonymous login, initially we don't know the jid and as a result, Candy.Core._user doesn't have a jid. * Check if user doesn't have a jid and get it if necessary from the connection. */ GetJidIfAnonymous: function() { if (!Candy.Core.getUser().getJid()) { Candy.Core.log("[Jabber] Anonymous login"); Candy.Core.getUser().data.jid = Candy.Core.getConnection().jid; } }, /** Class: Candy.Core.Action.Jabber.Room * Room-specific commands */ Room: { /** Function: Join * Requests disco of specified room and joins afterwards. * * TODO: * maybe we should wait for disco and later join the room? * but what if we send disco but don't want/can join the room * * Parameters: * (String) roomJid - Room to join * (String) password - [optional] Password for the room */ Join: function(roomJid, password) { self.Jabber.Room.Disco(roomJid); Candy.Core.getConnection().muc.join(roomJid, Candy.Core.getUser().getNick(), null, null, password); }, /** Function: Leave * Leaves a room. * * Parameters: * (String) roomJid - Room to leave */ Leave: function(roomJid) { Candy.Core.getConnection().muc.leave(roomJid, Candy.Core.getRoom(roomJid).getUser().getNick(), function() {}); }, /** Function: Disco * Requests <disco info of a room at http://xmpp.org/extensions/xep-0045.html#disco-roominfo>. * * Parameters: * (String) roomJid - Room to get info for */ Disco: function(roomJid) { Candy.Core.getConnection().send($iq({type: 'get', from: Candy.Core.getUser().getJid(), to: roomJid, id: 'disco3'}).c('query', {xmlns: Strophe.NS.DISCO_INFO}).tree()); }, /** Function: Message * Send message * * Parameters: * (String) roomJid - Room to which send the message into * (String) msg - Message * (String) type - "groupchat" or "chat" ("chat" is for private messages) * * Returns: * (Boolean) - true if message is not empty after trimming, false otherwise. */ Message: function(roomJid, msg, type) { // Trim message msg = $.trim(msg); if(msg === '') { return false; } Candy.Core.getConnection().muc.message(Candy.Util.escapeJid(roomJid), undefined, msg, type); return true; }, /** Function: IgnoreUnignore * Checks if the user is already ignoring the target user, if yes: unignore him, if no: ignore him. * * Uses the ignore privacy list set on connecting. * * Parameters: * (String) userJid - Target user jid */ IgnoreUnignore: function(userJid) { Candy.Core.getUser().addToOrRemoveFromPrivacyList('ignore', userJid); Candy.Core.Action.Jabber.Room.UpdatePrivacyList(); }, /** Function: UpdatePrivacyList * Updates privacy list according to the privacylist in the currentUser */ UpdatePrivacyList: function() { var currentUser = Candy.Core.getUser(), iq = $iq({type: 'set', from: currentUser.getJid(), id: 'edit1'}) .c('query', {xmlns: 'jabber:iq:privacy' }) .c('list', {name: 'ignore'}), privacyList = currentUser.getPrivacyList('ignore'); if (privacyList.length > 0) { $.each(privacyList, function(index, jid) { iq.c('item', {type:'jid', value: Candy.Util.escapeJid(jid), action: 'deny', order : index}) .c('message').up().up(); }); } else { iq.c('item', {action: 'allow', order : '0'}); } Candy.Core.getConnection().send(iq.tree()); }, /** Class: Candy.Core.Action.Jabber.Room.Admin * Room administration commands */ Admin: { /** Function: UserAction * Kick or ban a user * * Parameters: * (String) roomJid - Room in which the kick/ban should be done * (String) userJid - Victim * (String) type - "kick" or "ban" * (String) msg - Reason * * Returns: * (Boolean) - true if sent successfully, false if type is not one of "kick" or "ban". */ UserAction: function(roomJid, userJid, type, reason) { var iqId, itemObj = {nick: Strophe.escapeNode(Strophe.getResourceFromJid(userJid))}; switch(type) { case 'kick': iqId = 'kick1'; itemObj.role = 'none'; break; case 'ban': iqId = 'ban1'; itemObj.affiliation = 'outcast'; break; default: return false; } Candy.Core.getConnection().send($iq({type: 'set', from: Candy.Core.getUser().getJid(), to: roomJid, id: iqId}).c('query', {xmlns: Strophe.NS.MUC_ADMIN }).c('item', itemObj).c('reason').t(reason).tree()); return true; }, /** Function: SetSubject * Sets subject (topic) of a room. * * Parameters: * (String) roomJid - Room * (String) subject - Subject to set */ SetSubject: function(roomJid, subject) { Candy.Core.getConnection().muc.setTopic(roomJid, subject); } } } }; return self; }(Candy.Core.Action || {}, Strophe, jQuery)); |
:: Command execute :: | |
--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]-- |