cerberus 0.6 → 0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Authors.txt +4 -0
- data/Changelog.txt +11 -0
- data/Copyright.txt +16 -0
- data/Rakefile +16 -25
- data/Readme.markdown +1 -3
- data/bin/cerberus +5 -0
- data/lib/cerberus/builder/bjam.rb +1 -3
- data/lib/cerberus/builder/maven2.rb +0 -1
- data/lib/cerberus/builder/rake.rb +1 -1
- data/lib/cerberus/builder/rspec.rb +0 -1
- data/lib/cerberus/builder/ruby_base.rb +0 -1
- data/lib/cerberus/component_lazy_loader.rb +6 -2
- data/lib/cerberus/config.example.yml +1 -0
- data/lib/cerberus/constants.rb +2 -2
- data/lib/cerberus/manager.rb +7 -1
- data/lib/cerberus/publisher/mail.rb +4 -4
- data/lib/cerberus/publisher/twitter.rb +0 -1
- data/lib/cerberus/scm/base.rb +19 -0
- data/lib/cerberus/scm/bzr.rb +62 -0
- data/lib/cerberus/scm/cvs.rb +2 -7
- data/lib/cerberus/scm/darcs.rb +2 -11
- data/lib/cerberus/scm/git.rb +6 -14
- data/lib/cerberus/scm/perforce.rb +4 -4
- data/lib/cerberus/scm/svn.rb +2 -7
- data/lib/cerberus/utils.rb +5 -0
- data/lib/vendor/irc/README +23 -0
- data/lib/vendor/irc/lib/IRC.rb +164 -0
- data/lib/vendor/irc/lib/IRCChannel.rb +33 -0
- data/lib/vendor/irc/lib/IRCConnection.rb +134 -0
- data/lib/vendor/irc/lib/IRCEvent.rb +91 -0
- data/lib/vendor/irc/lib/IRCUser.rb +23 -0
- data/lib/vendor/irc/lib/IRCUtil.rb +49 -0
- data/lib/vendor/irc/lib/eventmap.yml +247 -0
- data/lib/vendor/twitter/CHANGES +129 -0
- data/lib/vendor/twitter/MIT-LICENSE +20 -0
- data/lib/vendor/twitter/README +37 -0
- data/lib/vendor/twitter/TODO +7 -0
- data/lib/vendor/twitter/lib/twitter.rb +34 -0
- data/lib/vendor/twitter/lib/twitter/client.rb +24 -0
- data/lib/vendor/twitter/lib/twitter/client/account.rb +24 -0
- data/lib/vendor/twitter/lib/twitter/client/auth.rb +27 -0
- data/lib/vendor/twitter/lib/twitter/client/base.rb +93 -0
- data/lib/vendor/twitter/lib/twitter/client/blocks.rb +35 -0
- data/lib/vendor/twitter/lib/twitter/client/favorites.rb +53 -0
- data/lib/vendor/twitter/lib/twitter/client/friendship.rb +35 -0
- data/lib/vendor/twitter/lib/twitter/client/graph.rb +37 -0
- data/lib/vendor/twitter/lib/twitter/client/messaging.rb +79 -0
- data/lib/vendor/twitter/lib/twitter/client/profile.rb +29 -0
- data/lib/vendor/twitter/lib/twitter/client/search.rb +27 -0
- data/lib/vendor/twitter/lib/twitter/client/status.rb +51 -0
- data/lib/vendor/twitter/lib/twitter/client/timeline.rb +72 -0
- data/lib/vendor/twitter/lib/twitter/client/user.rb +65 -0
- data/lib/vendor/twitter/lib/twitter/config.rb +77 -0
- data/lib/vendor/twitter/lib/twitter/console.rb +31 -0
- data/lib/vendor/twitter/lib/twitter/core.rb +137 -0
- data/lib/vendor/twitter/lib/twitter/ext.rb +2 -0
- data/lib/vendor/twitter/lib/twitter/ext/stdlib.rb +52 -0
- data/lib/vendor/twitter/lib/twitter/extras.rb +39 -0
- data/lib/vendor/twitter/lib/twitter/meta.rb +56 -0
- data/lib/vendor/twitter/lib/twitter/model.rb +360 -0
- data/lib/vendor/twitter/lib/twitter/version.rb +19 -0
- data/lib/vendor/twitter/spec/twitter/client/account_spec.rb +28 -0
- data/lib/vendor/twitter/spec/twitter/client/auth_spec.rb +34 -0
- data/lib/vendor/twitter/spec/twitter/client/base_spec.rb +242 -0
- data/lib/vendor/twitter/spec/twitter/client/blocks_spec.rb +76 -0
- data/lib/vendor/twitter/spec/twitter/client/favorites_spec.rb +183 -0
- data/lib/vendor/twitter/spec/twitter/client/friendship_spec.rb +76 -0
- data/lib/vendor/twitter/spec/twitter/client/graph_spec.rb +67 -0
- data/lib/vendor/twitter/spec/twitter/client/messaging_spec.rb +135 -0
- data/lib/vendor/twitter/spec/twitter/client/profile_spec.rb +91 -0
- data/lib/vendor/twitter/spec/twitter/client/search_spec.rb +68 -0
- data/lib/vendor/twitter/spec/twitter/client/status_spec.rb +119 -0
- data/lib/vendor/twitter/spec/twitter/client/timeline_spec.rb +79 -0
- data/lib/vendor/twitter/spec/twitter/client/user_spec.rb +203 -0
- data/lib/vendor/twitter/spec/twitter/client_spec.rb +2 -0
- data/lib/vendor/twitter/spec/twitter/config_spec.rb +86 -0
- data/lib/vendor/twitter/spec/twitter/console_spec.rb +15 -0
- data/lib/vendor/twitter/spec/twitter/core_spec.rb +127 -0
- data/lib/vendor/twitter/spec/twitter/ext/stdlib_spec.rb +59 -0
- data/lib/vendor/twitter/spec/twitter/extras_spec.rb +46 -0
- data/lib/vendor/twitter/spec/twitter/meta_spec.rb +90 -0
- data/lib/vendor/twitter/spec/twitter/model_spec.rb +508 -0
- data/lib/vendor/twitter/spec/twitter/version_spec.rb +19 -0
- data/lib/vendor/xmpp4r/CHANGELOG +83 -0
- data/lib/vendor/xmpp4r/COPYING +340 -0
- data/lib/vendor/xmpp4r/LICENSE +59 -0
- data/lib/vendor/xmpp4r/README.rdoc +110 -0
- data/lib/vendor/xmpp4r/README_ruby19.txt +43 -0
- data/lib/vendor/xmpp4r/Rakefile +262 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/client.rb +70 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/component.rb +11 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/register.rb +42 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r.rb +116 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/base64.rb +32 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/callbacks.rb +124 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps.rb +1 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/c.rb +53 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/generator.rb +160 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/helper.rb +87 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/client.rb +317 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/command/helper/responder.rb +53 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/command/iq/command.rb +154 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/component.rb +103 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/connection.rb +219 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms/x/data.rb +297 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/debuglog.rb +42 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/delay.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/delay/x/delay.rb +99 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/helper/responder.rb +165 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/errors.rb +281 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/framework/base.rb +55 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/framework/bot.rb +148 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding/client.rb +285 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/idgenerator.rb +37 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/iq.rb +221 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/jid.rb +167 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/message.rb +148 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc.rb +14 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/item.rb +143 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/muc.rb +70 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/presence.rb +232 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub.rb +8 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/event.rb +49 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/item.rb +35 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/items.rb +44 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/publish.rb +24 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/query.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rexmladdons.rb +151 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/helper/roster.rb +519 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/iq/roster.rb +215 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/x/roster.rb +138 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc.rb +2 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/client.rb +123 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/server.rb +74 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/sasl.rb +237 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/semaphore.rb +38 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/stream.rb +497 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/streamparser.rb +77 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune.rb +2 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune/helper/helper.rb +58 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune/tune.rb +113 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard.rb +6 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/responder.rb +72 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/iq/version.rb +105 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/x.rb +37 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml.rb +1 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml/html.rb +115 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmpp4r.rb +18 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmppelement.rb +168 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmppstanza.rb +162 -0
- data/lib/vendor/xmpp4r/setup.rb +1586 -0
- data/lib/vendor/xmpp4r/test/bytestreams/tc_ibb.rb +186 -0
- data/lib/vendor/xmpp4r/test/bytestreams/tc_socks5bytestreams.rb +113 -0
- data/lib/vendor/xmpp4r/test/caps/tc_helper.rb +156 -0
- data/lib/vendor/xmpp4r/test/dataforms/tc_data.rb +81 -0
- data/lib/vendor/xmpp4r/test/delay/tc_xdelay.rb +51 -0
- data/lib/vendor/xmpp4r/test/discovery/tc_responder.rb +91 -0
- data/lib/vendor/xmpp4r/test/lib/assert_equal_xml.rb +14 -0
- data/lib/vendor/xmpp4r/test/lib/clienttester.rb +120 -0
- data/lib/vendor/xmpp4r/test/muc/tc_muc_mucclient.rb +830 -0
- data/lib/vendor/xmpp4r/test/muc/tc_muc_simplemucclient.rb +114 -0
- data/lib/vendor/xmpp4r/test/muc/tc_mucowner.rb +50 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_helper.rb +662 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_nodeconfig.rb +54 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_subscriptionconfig.rb +41 -0
- data/lib/vendor/xmpp4r/test/roster/tc_helper.rb +514 -0
- data/lib/vendor/xmpp4r/test/roster/tc_iqqueryroster.rb +173 -0
- data/lib/vendor/xmpp4r/test/roster/tc_xroster.rb +73 -0
- data/lib/vendor/xmpp4r/test/rpc/tc_helper.rb +96 -0
- data/lib/vendor/xmpp4r/test/tc_callbacks.rb +129 -0
- data/lib/vendor/xmpp4r/test/tc_class_names.rb +146 -0
- data/lib/vendor/xmpp4r/test/tc_client.rb +30 -0
- data/lib/vendor/xmpp4r/test/tc_errors.rb +146 -0
- data/lib/vendor/xmpp4r/test/tc_idgenerator.rb +30 -0
- data/lib/vendor/xmpp4r/test/tc_iq.rb +113 -0
- data/lib/vendor/xmpp4r/test/tc_iqquery.rb +31 -0
- data/lib/vendor/xmpp4r/test/tc_jid.rb +204 -0
- data/lib/vendor/xmpp4r/test/tc_message.rb +116 -0
- data/lib/vendor/xmpp4r/test/tc_presence.rb +150 -0
- data/lib/vendor/xmpp4r/test/tc_rexml.rb +139 -0
- data/lib/vendor/xmpp4r/test/tc_stream.rb +229 -0
- data/lib/vendor/xmpp4r/test/tc_streamComponent.rb +95 -0
- data/lib/vendor/xmpp4r/test/tc_streamError.rb +131 -0
- data/lib/vendor/xmpp4r/test/tc_streamSend.rb +59 -0
- data/lib/vendor/xmpp4r/test/tc_streamparser.rb +112 -0
- data/lib/vendor/xmpp4r/test/tc_xmppstanza.rb +135 -0
- data/lib/vendor/xmpp4r/test/ts_xmpp4r.rb +53 -0
- data/lib/vendor/xmpp4r/test/tune/tc_helper_recv.rb +84 -0
- data/lib/vendor/xmpp4r/test/tune/tc_helper_send.rb +74 -0
- data/lib/vendor/xmpp4r/test/tune/tc_tune.rb +79 -0
- data/lib/vendor/xmpp4r/test/vcard/tc_helper.rb +49 -0
- data/lib/vendor/xmpp4r/test/vcard/tc_iqvcard.rb +62 -0
- data/lib/vendor/xmpp4r/test/version/tc_helper.rb +60 -0
- data/lib/vendor/xmpp4r/test/version/tc_iqqueryversion.rb +97 -0
- data/lib/vendor/xmpp4r/test/xhtml/tc_html.rb +41 -0
- data/lib/vendor/xmpp4r/tools/gen_requires.bash +31 -0
- data/lib/vendor/xmpp4r/tools/xmpp4r-gemspec-test.rb +11 -0
- data/lib/vendor/xmpp4r/xmpp4r.gemspec +291 -0
- data/test/jabber_publisher_test.rb +1 -1
- data/test/mail_publisher_test.rb +2 -2
- data/test/mock/twitter.rb +0 -1
- data/test/rspec_builder_test.rb +39 -2
- data/test/rss_publisher_test.rb +1 -1
- data/test/twitter_publisher_test.rb +1 -1
- metadata +268 -53
- data/lib/cerberus/publisher/gmailer.rb +0 -17
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
# This script will send a jabber message to the specified JID. The subject can be
|
|
4
|
+
# specified using the '-s' option, and the message will be taken from stdin.
|
|
5
|
+
|
|
6
|
+
$:.unshift '../../../../../lib'
|
|
7
|
+
|
|
8
|
+
require 'optparse'
|
|
9
|
+
require 'xmpp4r'
|
|
10
|
+
include Jabber
|
|
11
|
+
|
|
12
|
+
# settings
|
|
13
|
+
myJID = JID.new('bot@localhost/Bot')
|
|
14
|
+
myPassword = 'bot'
|
|
15
|
+
|
|
16
|
+
to = nil
|
|
17
|
+
subject = ''
|
|
18
|
+
OptionParser.new do |opts|
|
|
19
|
+
opts.banner = 'Usage: jabbersend.rb -s \'subject\' -t dest@domain'
|
|
20
|
+
opts.separator ''
|
|
21
|
+
opts.on('-s', '--subject SUBJECT', 'sets the message\'s subject') { |s| subject = s }
|
|
22
|
+
opts.on('-t', '--to DESTJID', 'sets the receiver') { |t| to = JID.new(t) }
|
|
23
|
+
opts.on_tail('-h', '--help', 'Show this message') {
|
|
24
|
+
puts opts
|
|
25
|
+
exit
|
|
26
|
+
}
|
|
27
|
+
opts.parse!(ARGV)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
if to.nil?
|
|
31
|
+
puts "No receiver specified. See jabbersend -h"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
cl = Client.new(myJID)
|
|
35
|
+
cl.connect
|
|
36
|
+
cl.auth(myPassword)
|
|
37
|
+
body = STDIN.readlines.join
|
|
38
|
+
m = Message.new(to, body).set_type(:normal).set_id('1').set_subject(subject)
|
|
39
|
+
puts m.to_s
|
|
40
|
+
cl.send(m)
|
|
41
|
+
cl.close
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
# This script will send a jabber message to a list of JID given on stdin.
|
|
4
|
+
|
|
5
|
+
$:.unshift '../../../../../lib'
|
|
6
|
+
|
|
7
|
+
require 'optparse'
|
|
8
|
+
require 'xmpp4r'
|
|
9
|
+
include Jabber
|
|
10
|
+
#Jabber::debug = true
|
|
11
|
+
|
|
12
|
+
# - message in file
|
|
13
|
+
# - subject in command line
|
|
14
|
+
# - JID list on stdin
|
|
15
|
+
|
|
16
|
+
# settings
|
|
17
|
+
jid = JID.new('bot@localhost/Bot')
|
|
18
|
+
password = 'bot'
|
|
19
|
+
filename = 'message.txt'
|
|
20
|
+
|
|
21
|
+
subject = "Message de test"
|
|
22
|
+
|
|
23
|
+
OptionParser.new do |opts|
|
|
24
|
+
opts.banner = 'Usage: mass_sender.rb -j jid -p password'
|
|
25
|
+
opts.separator ''
|
|
26
|
+
opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
|
|
27
|
+
opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
|
|
28
|
+
opts.on('-f', '--filename MESSAGE', 'sets the filename containing the message') { |f| filename = f }
|
|
29
|
+
opts.on('-s', '--subject SUBJECT', 'sets the subject') { |s| subject = s }
|
|
30
|
+
opts.on_tail('-h', '--help', 'Show this message') {
|
|
31
|
+
puts opts
|
|
32
|
+
exit
|
|
33
|
+
}
|
|
34
|
+
opts.parse!(ARGV)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
body = IO::read(filename).chomp
|
|
38
|
+
|
|
39
|
+
cl = Client.new(jid)
|
|
40
|
+
cl.connect
|
|
41
|
+
cl.auth(password)
|
|
42
|
+
exit = false
|
|
43
|
+
sent = []
|
|
44
|
+
cl.add_message_callback do |m|
|
|
45
|
+
if m.type != :error
|
|
46
|
+
if !sent.include?(m.from)
|
|
47
|
+
cl.send(Message.new(m.from, "Je suis un robot. Si tu souhaites contacter un administrateur du serveur, envoie un message à lucas@nussbaum.fr ou rejoins la salle jabberfr@chat.jabberfr.org."))
|
|
48
|
+
sent << m.from
|
|
49
|
+
end
|
|
50
|
+
if m.body == 'exitnowplease'
|
|
51
|
+
cl.send(Message.new(m.from, "Exiting ..."))
|
|
52
|
+
exit = true
|
|
53
|
+
end
|
|
54
|
+
cl.send(Message.new('lucas@nussbaum.fr', "From #{m.from}: #{m.body.to_s}"))
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
cl.send(Presence.new)
|
|
58
|
+
m = Message.new(nil, body)
|
|
59
|
+
m.subject = subject
|
|
60
|
+
STDIN.each_line { |l|
|
|
61
|
+
l.chomp!
|
|
62
|
+
m.set_to(JID.new(l).to_s)
|
|
63
|
+
cl.send(m)
|
|
64
|
+
}
|
|
65
|
+
while not exit do
|
|
66
|
+
cl.process(1)
|
|
67
|
+
end
|
|
68
|
+
cl.close
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'xmpp4r'
|
|
2
|
+
require 'xmpp4r/muc'
|
|
3
|
+
|
|
4
|
+
client = Jabber::Client.new('admin@myserver.co.uk/ruby')
|
|
5
|
+
muc = Jabber::MUC::MUCClient.new(client)
|
|
6
|
+
client.connect
|
|
7
|
+
client.auth('admin')
|
|
8
|
+
muc.join('room@conference.myserver.co.uk/admin')
|
|
9
|
+
muc.configure(
|
|
10
|
+
'muc#roomconfig_roomname' => 'roomname',
|
|
11
|
+
'muc#roomconfig_persistentroom' => 1
|
|
12
|
+
)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/muc/helper/mucbrowser'
|
|
7
|
+
|
|
8
|
+
if ARGV.size != 3
|
|
9
|
+
puts "Usage: #{$0} <jid> <password> <muc-jid>"
|
|
10
|
+
exit
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
jid, password, muc_jid = Jabber::JID.new(ARGV.shift), ARGV.shift, Jabber::JID.new(ARGV.shift)
|
|
14
|
+
|
|
15
|
+
cl = Jabber::Client.new(jid)
|
|
16
|
+
cl.connect
|
|
17
|
+
cl.auth(password)
|
|
18
|
+
|
|
19
|
+
browser = Jabber::MUC::MUCBrowser.new(cl)
|
|
20
|
+
|
|
21
|
+
print "Querying #{muc_jid} for identity..."; $stdout.flush
|
|
22
|
+
name = browser.muc_name(muc_jid)
|
|
23
|
+
|
|
24
|
+
if name.nil?
|
|
25
|
+
puts " Sorry, but the queried MUC component doesn't seem to support MUC or Groupchat."
|
|
26
|
+
else
|
|
27
|
+
puts " #{name}"
|
|
28
|
+
|
|
29
|
+
print "Querying #{muc_jid} for its rooms..."; $stdout.flush
|
|
30
|
+
rooms = browser.muc_rooms(muc_jid)
|
|
31
|
+
puts " #{rooms.size} rooms found"
|
|
32
|
+
|
|
33
|
+
max_room_length = 0
|
|
34
|
+
rooms.each_key { |jid| max_room_length = jid.to_s.size if jid.to_s.size > max_room_length }
|
|
35
|
+
|
|
36
|
+
rooms.each { |jid,name|
|
|
37
|
+
puts "#{jid.to_s.ljust(max_room_length)} #{name}"
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
cl.close
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift '../../../../../lib/'
|
|
3
|
+
require 'xmpp4r'
|
|
4
|
+
require 'xmpp4r/muc/helper/simplemucclient'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
if ARGV.size != 3
|
|
8
|
+
puts "Usage: #{$0} <jid> <password> <room@conference/nick>"
|
|
9
|
+
exit
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Print a line formatted depending on time.nil?
|
|
13
|
+
def print_line(time, line)
|
|
14
|
+
if time.nil?
|
|
15
|
+
puts line
|
|
16
|
+
else
|
|
17
|
+
puts "#{time.strftime('%I:%M')} #{line}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#Jabber::debug = true
|
|
23
|
+
cl = Jabber::Client.new(Jabber::JID.new(ARGV[0]))
|
|
24
|
+
cl.connect
|
|
25
|
+
cl.auth(ARGV[1])
|
|
26
|
+
|
|
27
|
+
# For waking up...
|
|
28
|
+
mainthread = Thread.current
|
|
29
|
+
|
|
30
|
+
# This is the SimpleMUCClient helper!
|
|
31
|
+
m = Jabber::MUC::SimpleMUCClient.new(cl)
|
|
32
|
+
|
|
33
|
+
# SimpleMUCClient callback-blocks
|
|
34
|
+
|
|
35
|
+
m.on_join { |time,nick|
|
|
36
|
+
print_line time, "#{nick} has joined!"
|
|
37
|
+
puts "Users: " + m.roster.keys.join(', ')
|
|
38
|
+
}
|
|
39
|
+
m.on_leave { |time,nick|
|
|
40
|
+
print_line time, "#{nick} has left!"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
m.on_message { |time,nick,text|
|
|
44
|
+
print_line time, "<#{nick}> #{text}"
|
|
45
|
+
|
|
46
|
+
# Avoid reacting on messaged delivered as room history
|
|
47
|
+
unless time
|
|
48
|
+
# Bot: invite astro@spaceboyz.net
|
|
49
|
+
if text.strip =~ /^(.+?): invite (.+)$/
|
|
50
|
+
jid = $2
|
|
51
|
+
if $1.downcase == m.jid.resource.downcase
|
|
52
|
+
m.invite(jid => "Inviting you on behalf of #{nick}")
|
|
53
|
+
m.say("Inviting #{jid}...")
|
|
54
|
+
end
|
|
55
|
+
# Bot: subject This is room is powered by XMPP4R
|
|
56
|
+
elsif text.strip =~ /^(.+?): subject (.+)$/
|
|
57
|
+
if $1.downcase == m.jid.resource.downcase
|
|
58
|
+
m.subject = $2
|
|
59
|
+
end
|
|
60
|
+
# Bot: exit please
|
|
61
|
+
elsif text.strip =~ /^(.+?): exit please$/
|
|
62
|
+
if $1.downcase == m.jid.resource.downcase
|
|
63
|
+
puts "exiting"
|
|
64
|
+
m.exit "Exiting on behalf of #{nick}"
|
|
65
|
+
mainthread.wakeup
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
}
|
|
70
|
+
m.on_room_message { |time,text|
|
|
71
|
+
print_line time, "- #{text}"
|
|
72
|
+
}
|
|
73
|
+
m.on_subject { |time,nick,subject|
|
|
74
|
+
print_line time, "*** (#{nick}) #{subject}"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
m.join(ARGV[2])
|
|
78
|
+
|
|
79
|
+
# Wait for being waken up by m.on_message
|
|
80
|
+
Thread.stop
|
|
81
|
+
|
|
82
|
+
cl.close
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
require 'xmpp4r'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Argument checking
|
|
8
|
+
if ARGV.size < 2
|
|
9
|
+
puts("Usage: #{$0} <desired jid> <password> [field1=value1] [fieldN=valueN]")
|
|
10
|
+
exit
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# The usual procedure
|
|
15
|
+
cl = Jabber::Client.new(Jabber::JID.new(ARGV[0]))
|
|
16
|
+
puts "Connecting"
|
|
17
|
+
cl.connect
|
|
18
|
+
|
|
19
|
+
# Registration of the new user account
|
|
20
|
+
puts "Registering..."
|
|
21
|
+
begin
|
|
22
|
+
fields = {}
|
|
23
|
+
ARGV[2..-1].each { |a|
|
|
24
|
+
k, v = a.split('=', 2)
|
|
25
|
+
fields[k] = v
|
|
26
|
+
}
|
|
27
|
+
cl.register(ARGV[1], fields)
|
|
28
|
+
puts "Successful"
|
|
29
|
+
rescue Jabber::ServerError => e
|
|
30
|
+
puts "Error: #{e.error.text}"
|
|
31
|
+
if e.error.type == :modify
|
|
32
|
+
puts "Accepted registration information:"
|
|
33
|
+
instructions, fields = cl.register_info
|
|
34
|
+
fields.each { |info|
|
|
35
|
+
puts "* #{info}"
|
|
36
|
+
}
|
|
37
|
+
puts "(#{instructions})"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Shutdown
|
|
42
|
+
cl.close
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
require 'xmpp4r'
|
|
5
|
+
include Jabber
|
|
6
|
+
|
|
7
|
+
if ARGV.size != 2
|
|
8
|
+
puts "Warning! This example UNREGISTERS user accounts!"
|
|
9
|
+
puts "Usage: #{$0} <jid> <password>"
|
|
10
|
+
exit
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
cl = Client.new(JID.new(ARGV[0]))
|
|
14
|
+
cl.connect
|
|
15
|
+
cl.auth(ARGV[1])
|
|
16
|
+
cl.remove_registration
|
|
17
|
+
|
|
18
|
+
cl.close
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
# This script can get all roster entries
|
|
4
|
+
|
|
5
|
+
#$:.unshift '../../../../../lib'
|
|
6
|
+
|
|
7
|
+
require 'optparse'
|
|
8
|
+
require 'xmpp4r'
|
|
9
|
+
require 'xmpp4r/roster/iq/roster'
|
|
10
|
+
include Jabber
|
|
11
|
+
|
|
12
|
+
jid = JID.new('lucastest@linux.ensimag.fr/rosterget')
|
|
13
|
+
password = 'lucastest'
|
|
14
|
+
|
|
15
|
+
OptionParser.new do |opts|
|
|
16
|
+
opts.banner = 'Usage: roster.rb -t get -j jid -p password'
|
|
17
|
+
opts.separator ''
|
|
18
|
+
opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
|
|
19
|
+
opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
|
|
20
|
+
opts.on_tail('-h', '--help', 'Show this message') {
|
|
21
|
+
puts opts
|
|
22
|
+
exit
|
|
23
|
+
}
|
|
24
|
+
opts.parse!(ARGV)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
cl = Client.new(jid)
|
|
28
|
+
cl.connect
|
|
29
|
+
cl.auth(password)
|
|
30
|
+
cl.send(Iq.new_rosterget)
|
|
31
|
+
exit = false
|
|
32
|
+
cl.add_iq_callback { |i|
|
|
33
|
+
if i.type == :result and i.query.kind_of?(Roster::IqQueryRoster)
|
|
34
|
+
i.query.each_element { |e|
|
|
35
|
+
e.text = ''
|
|
36
|
+
puts e.to_s
|
|
37
|
+
}
|
|
38
|
+
exit = true
|
|
39
|
+
end
|
|
40
|
+
}
|
|
41
|
+
while not exit
|
|
42
|
+
cl.process
|
|
43
|
+
end
|
|
44
|
+
cl.close
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib/'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/roster/helper/roster'
|
|
7
|
+
|
|
8
|
+
# Command line argument checking
|
|
9
|
+
|
|
10
|
+
if ARGV.size != 2
|
|
11
|
+
puts("Usage: ./rosterprint.rb <jid> <password>")
|
|
12
|
+
exit
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Building up the connection
|
|
16
|
+
|
|
17
|
+
#Jabber::debug = true
|
|
18
|
+
|
|
19
|
+
jid = Jabber::JID.new(ARGV[0])
|
|
20
|
+
|
|
21
|
+
cl = Jabber::Client.new(jid)
|
|
22
|
+
cl.connect
|
|
23
|
+
cl.auth(ARGV[1])
|
|
24
|
+
|
|
25
|
+
# The roster instance
|
|
26
|
+
roster = Jabber::Roster::Helper.new(cl)
|
|
27
|
+
|
|
28
|
+
mainthread = Thread.current
|
|
29
|
+
|
|
30
|
+
roster.add_query_callback { |iq|
|
|
31
|
+
mainthread.wakeup
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
Thread.stop
|
|
35
|
+
|
|
36
|
+
roster.groups.each { |group|
|
|
37
|
+
if group.nil?
|
|
38
|
+
puts "*** Ungrouped ***"
|
|
39
|
+
else
|
|
40
|
+
puts "*** #{group} ***"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
roster.find_by_group(group).each { |item|
|
|
44
|
+
puts "- #{item.iname} (#{item.jid})"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
print "\n"
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
cl.close
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/roster/iq/roster'
|
|
7
|
+
|
|
8
|
+
# Command line argument checking
|
|
9
|
+
|
|
10
|
+
if ARGV.size < 4
|
|
11
|
+
puts("Usage: ./rosterrename.rb <your jid> <password> <jid to rename> <new name> [<group1> ... <groupn>]")
|
|
12
|
+
exit
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Building up the connection
|
|
16
|
+
|
|
17
|
+
#Jabber::debug = true
|
|
18
|
+
|
|
19
|
+
jid = Jabber::JID.new(ARGV[0])
|
|
20
|
+
|
|
21
|
+
cl = Jabber::Client.new(jid)
|
|
22
|
+
cl.connect
|
|
23
|
+
cl.auth(ARGV[1])
|
|
24
|
+
|
|
25
|
+
# The iq stanza
|
|
26
|
+
iq = Jabber::Iq.new(:set)
|
|
27
|
+
# The new roster instance and item element
|
|
28
|
+
iq.add(Jabber::Roster::IqQueryRoster.new).add(Jabber::Roster::RosterItem.new(ARGV[2], ARGV[3])).groups = ARGV[4..ARGV.size]
|
|
29
|
+
|
|
30
|
+
# Sending the stanza
|
|
31
|
+
cl.send(iq)
|
|
32
|
+
|
|
33
|
+
# Don't look at the results:
|
|
34
|
+
cl.close
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
#
|
|
3
|
+
# XMPP4R - XMPP Library for Ruby
|
|
4
|
+
# Copyright (C) 2005 Stephan Maka <stephan@spaceboyz.net>
|
|
5
|
+
# Released under Ruby's license (see the LICENSE file) or GPL, at your option
|
|
6
|
+
#
|
|
7
|
+
#
|
|
8
|
+
# Roster-Watch example
|
|
9
|
+
#
|
|
10
|
+
#
|
|
11
|
+
# Learn how a roster looks like
|
|
12
|
+
# how presences are received
|
|
13
|
+
# about subscription requests and answers
|
|
14
|
+
# what vCards contain
|
|
15
|
+
#
|
|
16
|
+
# It's recommended to insert 'p' commands in this script. :-)
|
|
17
|
+
#
|
|
18
|
+
# This script does:
|
|
19
|
+
#
|
|
20
|
+
# * Listing roster changes
|
|
21
|
+
#
|
|
22
|
+
# * Subscribe to roster items which have a subscription of "none" or "from"
|
|
23
|
+
# WARNING: Chances are that you don't want that :-)
|
|
24
|
+
#
|
|
25
|
+
# * Requesting vCards for unnamed items in your roster and renaming them
|
|
26
|
+
# to the <NICKNAME/> or <FN/> field in the vCard
|
|
27
|
+
#
|
|
28
|
+
# * Listing presence changes
|
|
29
|
+
#
|
|
30
|
+
# * Listing subscription and unsubscription requests and answers
|
|
31
|
+
|
|
32
|
+
$:.unshift '../../../../../lib/'
|
|
33
|
+
|
|
34
|
+
require 'xmpp4r'
|
|
35
|
+
require 'xmpp4r/roster/helper/roster'
|
|
36
|
+
require 'xmpp4r/vcard/helper/vcard'
|
|
37
|
+
|
|
38
|
+
# Command line argument checking
|
|
39
|
+
|
|
40
|
+
if ARGV.size != 2
|
|
41
|
+
puts("Usage: ./rosterwatch.rb <jid> <password>")
|
|
42
|
+
exit
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Building up the connection
|
|
46
|
+
|
|
47
|
+
#Jabber::debug = true
|
|
48
|
+
|
|
49
|
+
jid = Jabber::JID.new(ARGV[0])
|
|
50
|
+
|
|
51
|
+
cl = Jabber::Client.new(jid)
|
|
52
|
+
cl.connect
|
|
53
|
+
cl.auth(ARGV[1])
|
|
54
|
+
|
|
55
|
+
# The roster instance
|
|
56
|
+
roster = Jabber::Roster::Helper.new(cl)
|
|
57
|
+
|
|
58
|
+
# Callback to handle updated roster items
|
|
59
|
+
roster.add_update_callback { |olditem,item|
|
|
60
|
+
if [:from, :none].include?(item.subscription) && item.ask != :subscribe
|
|
61
|
+
puts("Subscribing to #{item.jid}")
|
|
62
|
+
item.subscribe
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Print the item
|
|
66
|
+
if olditem.nil?
|
|
67
|
+
# We didn't knew before:
|
|
68
|
+
puts("#{item.iname} (#{item.jid}, #{item.subscription}) #{item.groups.join(', ')}")
|
|
69
|
+
else
|
|
70
|
+
# Showing whats different:
|
|
71
|
+
puts("#{olditem.iname} (#{olditem.jid}, #{olditem.subscription}) #{olditem.groups.join(', ')} -> #{item.iname} (#{item.jid}, #{item.subscription}) #{item.groups.join(', ')}")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# If the item has no name associated...
|
|
75
|
+
unless item.iname
|
|
76
|
+
Thread.new do
|
|
77
|
+
puts("#{item.jid} has no nickname... getting vCard")
|
|
78
|
+
begin
|
|
79
|
+
# ...get a vCard
|
|
80
|
+
vcard = Jabber::Vcard::Helper.new(cl).get(item.jid.strip)
|
|
81
|
+
|
|
82
|
+
unless vcard.nil?
|
|
83
|
+
# Rename him to vCard's <NICKNAME/> field
|
|
84
|
+
if vcard['NICKNAME']
|
|
85
|
+
item.iname = vcard['NICKNAME']
|
|
86
|
+
puts("Renaming #{item.jid} to #{vcard['NICKNAME']}")
|
|
87
|
+
item.send
|
|
88
|
+
# Rename him to vCard's <FN/> field
|
|
89
|
+
elsif vcard['FN']
|
|
90
|
+
item.iname = vcard['FN']
|
|
91
|
+
puts("Renaming #{item.jid} to #{vcard['FN']}")
|
|
92
|
+
item.send
|
|
93
|
+
# We've got a lazy one
|
|
94
|
+
else
|
|
95
|
+
puts("#{item.jid} provided no details in vCard")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
rescue Exception => e
|
|
100
|
+
# This will be (mostly) thrown by Jabber::Vcard::Helper#get
|
|
101
|
+
puts("Error getting vCard for #{item.jid}: #{e.to_s}")
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# Presence updates:
|
|
108
|
+
roster.add_presence_callback { |item,oldpres,pres|
|
|
109
|
+
# Can't look for something that just does not exist...
|
|
110
|
+
if pres.nil?
|
|
111
|
+
# ...so create it:
|
|
112
|
+
pres = Jabber::Presence.new
|
|
113
|
+
end
|
|
114
|
+
if oldpres.nil?
|
|
115
|
+
# ...so create it:
|
|
116
|
+
oldpres = Jabber::Presence.new
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Print name and jid:
|
|
120
|
+
name = "#{pres.from}"
|
|
121
|
+
if item.iname
|
|
122
|
+
name = "#{item.iname} (#{pres.from})"
|
|
123
|
+
end
|
|
124
|
+
puts(name)
|
|
125
|
+
|
|
126
|
+
# Print type changes:
|
|
127
|
+
unless oldpres.type.nil? && pres.type.nil?
|
|
128
|
+
puts(" Type: #{oldpres.type.inspect} -> #{pres.type.inspect}")
|
|
129
|
+
end
|
|
130
|
+
# Print show changes:
|
|
131
|
+
unless oldpres.show.nil? && pres.show.nil?
|
|
132
|
+
puts(" Show: #{oldpres.show.to_s.inspect} -> #{pres.show.to_s.inspect}")
|
|
133
|
+
end
|
|
134
|
+
# Print status changes:
|
|
135
|
+
unless oldpres.status.nil? && pres.status.nil?
|
|
136
|
+
puts(" Status: #{oldpres.status.to_s.inspect} -> #{pres.status.to_s.inspect}")
|
|
137
|
+
end
|
|
138
|
+
# Print priority changes:
|
|
139
|
+
unless oldpres.priority.nil? && pres.priority.nil?
|
|
140
|
+
puts(" Priority: #{oldpres.priority.inspect} -> #{pres.priority.inspect}")
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Note: presences with type='error' will reflect our own show/status/priority
|
|
144
|
+
# as it is mostly just a reply from a server. This is *not* a bug.
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Subscription requests and responses:
|
|
148
|
+
subscription_callback = lambda { |item,pres|
|
|
149
|
+
name = pres.from
|
|
150
|
+
if item != nil && item.iname != nil
|
|
151
|
+
name = "#{item.iname} (#{pres.from})"
|
|
152
|
+
end
|
|
153
|
+
case pres.type
|
|
154
|
+
when :subscribe then puts("Subscription request from #{name}")
|
|
155
|
+
when :subscribed then puts("Subscribed to #{name}")
|
|
156
|
+
when :unsubscribe then puts("Unsubscription request from #{name}")
|
|
157
|
+
when :unsubscribed then puts("Unsubscribed from #{name}")
|
|
158
|
+
else raise "The Roster Helper is buggy!!! subscription callback with type=#{pres.type}"
|
|
159
|
+
end
|
|
160
|
+
}
|
|
161
|
+
roster.add_subscription_callback(0, nil, &subscription_callback)
|
|
162
|
+
roster.add_subscription_request_callback(0, nil, &subscription_callback)
|
|
163
|
+
|
|
164
|
+
# Send initial presence
|
|
165
|
+
# this is important for receiving presence of subscribed users
|
|
166
|
+
cl.send(Jabber::Presence.new.set_show(:dnd).set_status('Watching my roster change...'))
|
|
167
|
+
|
|
168
|
+
# Main loop:
|
|
169
|
+
Thread.stop
|
|
170
|
+
|
|
171
|
+
cl.close
|