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.
Files changed (290) hide show
  1. data/Authors.txt +4 -0
  2. data/Changelog.txt +11 -0
  3. data/Copyright.txt +16 -0
  4. data/Rakefile +16 -25
  5. data/Readme.markdown +1 -3
  6. data/bin/cerberus +5 -0
  7. data/lib/cerberus/builder/bjam.rb +1 -3
  8. data/lib/cerberus/builder/maven2.rb +0 -1
  9. data/lib/cerberus/builder/rake.rb +1 -1
  10. data/lib/cerberus/builder/rspec.rb +0 -1
  11. data/lib/cerberus/builder/ruby_base.rb +0 -1
  12. data/lib/cerberus/component_lazy_loader.rb +6 -2
  13. data/lib/cerberus/config.example.yml +1 -0
  14. data/lib/cerberus/constants.rb +2 -2
  15. data/lib/cerberus/manager.rb +7 -1
  16. data/lib/cerberus/publisher/mail.rb +4 -4
  17. data/lib/cerberus/publisher/twitter.rb +0 -1
  18. data/lib/cerberus/scm/base.rb +19 -0
  19. data/lib/cerberus/scm/bzr.rb +62 -0
  20. data/lib/cerberus/scm/cvs.rb +2 -7
  21. data/lib/cerberus/scm/darcs.rb +2 -11
  22. data/lib/cerberus/scm/git.rb +6 -14
  23. data/lib/cerberus/scm/perforce.rb +4 -4
  24. data/lib/cerberus/scm/svn.rb +2 -7
  25. data/lib/cerberus/utils.rb +5 -0
  26. data/lib/vendor/irc/README +23 -0
  27. data/lib/vendor/irc/lib/IRC.rb +164 -0
  28. data/lib/vendor/irc/lib/IRCChannel.rb +33 -0
  29. data/lib/vendor/irc/lib/IRCConnection.rb +134 -0
  30. data/lib/vendor/irc/lib/IRCEvent.rb +91 -0
  31. data/lib/vendor/irc/lib/IRCUser.rb +23 -0
  32. data/lib/vendor/irc/lib/IRCUtil.rb +49 -0
  33. data/lib/vendor/irc/lib/eventmap.yml +247 -0
  34. data/lib/vendor/twitter/CHANGES +129 -0
  35. data/lib/vendor/twitter/MIT-LICENSE +20 -0
  36. data/lib/vendor/twitter/README +37 -0
  37. data/lib/vendor/twitter/TODO +7 -0
  38. data/lib/vendor/twitter/lib/twitter.rb +34 -0
  39. data/lib/vendor/twitter/lib/twitter/client.rb +24 -0
  40. data/lib/vendor/twitter/lib/twitter/client/account.rb +24 -0
  41. data/lib/vendor/twitter/lib/twitter/client/auth.rb +27 -0
  42. data/lib/vendor/twitter/lib/twitter/client/base.rb +93 -0
  43. data/lib/vendor/twitter/lib/twitter/client/blocks.rb +35 -0
  44. data/lib/vendor/twitter/lib/twitter/client/favorites.rb +53 -0
  45. data/lib/vendor/twitter/lib/twitter/client/friendship.rb +35 -0
  46. data/lib/vendor/twitter/lib/twitter/client/graph.rb +37 -0
  47. data/lib/vendor/twitter/lib/twitter/client/messaging.rb +79 -0
  48. data/lib/vendor/twitter/lib/twitter/client/profile.rb +29 -0
  49. data/lib/vendor/twitter/lib/twitter/client/search.rb +27 -0
  50. data/lib/vendor/twitter/lib/twitter/client/status.rb +51 -0
  51. data/lib/vendor/twitter/lib/twitter/client/timeline.rb +72 -0
  52. data/lib/vendor/twitter/lib/twitter/client/user.rb +65 -0
  53. data/lib/vendor/twitter/lib/twitter/config.rb +77 -0
  54. data/lib/vendor/twitter/lib/twitter/console.rb +31 -0
  55. data/lib/vendor/twitter/lib/twitter/core.rb +137 -0
  56. data/lib/vendor/twitter/lib/twitter/ext.rb +2 -0
  57. data/lib/vendor/twitter/lib/twitter/ext/stdlib.rb +52 -0
  58. data/lib/vendor/twitter/lib/twitter/extras.rb +39 -0
  59. data/lib/vendor/twitter/lib/twitter/meta.rb +56 -0
  60. data/lib/vendor/twitter/lib/twitter/model.rb +360 -0
  61. data/lib/vendor/twitter/lib/twitter/version.rb +19 -0
  62. data/lib/vendor/twitter/spec/twitter/client/account_spec.rb +28 -0
  63. data/lib/vendor/twitter/spec/twitter/client/auth_spec.rb +34 -0
  64. data/lib/vendor/twitter/spec/twitter/client/base_spec.rb +242 -0
  65. data/lib/vendor/twitter/spec/twitter/client/blocks_spec.rb +76 -0
  66. data/lib/vendor/twitter/spec/twitter/client/favorites_spec.rb +183 -0
  67. data/lib/vendor/twitter/spec/twitter/client/friendship_spec.rb +76 -0
  68. data/lib/vendor/twitter/spec/twitter/client/graph_spec.rb +67 -0
  69. data/lib/vendor/twitter/spec/twitter/client/messaging_spec.rb +135 -0
  70. data/lib/vendor/twitter/spec/twitter/client/profile_spec.rb +91 -0
  71. data/lib/vendor/twitter/spec/twitter/client/search_spec.rb +68 -0
  72. data/lib/vendor/twitter/spec/twitter/client/status_spec.rb +119 -0
  73. data/lib/vendor/twitter/spec/twitter/client/timeline_spec.rb +79 -0
  74. data/lib/vendor/twitter/spec/twitter/client/user_spec.rb +203 -0
  75. data/lib/vendor/twitter/spec/twitter/client_spec.rb +2 -0
  76. data/lib/vendor/twitter/spec/twitter/config_spec.rb +86 -0
  77. data/lib/vendor/twitter/spec/twitter/console_spec.rb +15 -0
  78. data/lib/vendor/twitter/spec/twitter/core_spec.rb +127 -0
  79. data/lib/vendor/twitter/spec/twitter/ext/stdlib_spec.rb +59 -0
  80. data/lib/vendor/twitter/spec/twitter/extras_spec.rb +46 -0
  81. data/lib/vendor/twitter/spec/twitter/meta_spec.rb +90 -0
  82. data/lib/vendor/twitter/spec/twitter/model_spec.rb +508 -0
  83. data/lib/vendor/twitter/spec/twitter/version_spec.rb +19 -0
  84. data/lib/vendor/xmpp4r/CHANGELOG +83 -0
  85. data/lib/vendor/xmpp4r/COPYING +340 -0
  86. data/lib/vendor/xmpp4r/LICENSE +59 -0
  87. data/lib/vendor/xmpp4r/README.rdoc +110 -0
  88. data/lib/vendor/xmpp4r/README_ruby19.txt +43 -0
  89. data/lib/vendor/xmpp4r/Rakefile +262 -0
  90. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
  91. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
  92. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
  93. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
  94. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
  95. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
  96. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
  97. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
  98. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
  99. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
  100. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
  101. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
  102. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
  103. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
  104. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
  105. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
  106. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
  107. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
  108. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
  109. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
  110. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
  111. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
  112. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
  113. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
  114. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
  115. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/client.rb +70 -0
  116. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/component.rb +11 -0
  117. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
  118. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
  119. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
  120. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
  121. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
  122. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
  123. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/register.rb +42 -0
  124. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
  125. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
  126. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
  127. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
  128. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
  129. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
  130. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
  131. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
  132. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
  133. data/lib/vendor/xmpp4r/lib/xmpp4r.rb +116 -0
  134. data/lib/vendor/xmpp4r/lib/xmpp4r/base64.rb +32 -0
  135. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams.rb +15 -0
  136. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
  137. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
  138. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
  139. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
  140. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
  141. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
  142. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
  143. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
  144. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
  145. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
  146. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
  147. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
  148. data/lib/vendor/xmpp4r/lib/xmpp4r/callbacks.rb +124 -0
  149. data/lib/vendor/xmpp4r/lib/xmpp4r/caps.rb +1 -0
  150. data/lib/vendor/xmpp4r/lib/xmpp4r/caps/c.rb +53 -0
  151. data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/generator.rb +160 -0
  152. data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/helper.rb +87 -0
  153. data/lib/vendor/xmpp4r/lib/xmpp4r/client.rb +317 -0
  154. data/lib/vendor/xmpp4r/lib/xmpp4r/command/helper/responder.rb +53 -0
  155. data/lib/vendor/xmpp4r/lib/xmpp4r/command/iq/command.rb +154 -0
  156. data/lib/vendor/xmpp4r/lib/xmpp4r/component.rb +103 -0
  157. data/lib/vendor/xmpp4r/lib/xmpp4r/connection.rb +219 -0
  158. data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms.rb +5 -0
  159. data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms/x/data.rb +297 -0
  160. data/lib/vendor/xmpp4r/lib/xmpp4r/debuglog.rb +42 -0
  161. data/lib/vendor/xmpp4r/lib/xmpp4r/delay.rb +5 -0
  162. data/lib/vendor/xmpp4r/lib/xmpp4r/delay/x/delay.rb +99 -0
  163. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery.rb +7 -0
  164. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/helper/responder.rb +165 -0
  165. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
  166. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
  167. data/lib/vendor/xmpp4r/lib/xmpp4r/errors.rb +281 -0
  168. data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation.rb +5 -0
  169. data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
  170. data/lib/vendor/xmpp4r/lib/xmpp4r/framework/base.rb +55 -0
  171. data/lib/vendor/xmpp4r/lib/xmpp4r/framework/bot.rb +148 -0
  172. data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding.rb +5 -0
  173. data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding/client.rb +285 -0
  174. data/lib/vendor/xmpp4r/lib/xmpp4r/idgenerator.rb +37 -0
  175. data/lib/vendor/xmpp4r/lib/xmpp4r/iq.rb +221 -0
  176. data/lib/vendor/xmpp4r/lib/xmpp4r/jid.rb +167 -0
  177. data/lib/vendor/xmpp4r/lib/xmpp4r/message.rb +148 -0
  178. data/lib/vendor/xmpp4r/lib/xmpp4r/muc.rb +14 -0
  179. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
  180. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
  181. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
  182. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
  183. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
  184. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
  185. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/item.rb +143 -0
  186. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/muc.rb +70 -0
  187. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
  188. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
  189. data/lib/vendor/xmpp4r/lib/xmpp4r/presence.rb +232 -0
  190. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub.rb +8 -0
  191. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
  192. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/event.rb +49 -0
  193. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/item.rb +35 -0
  194. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/items.rb +44 -0
  195. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
  196. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/publish.rb +24 -0
  197. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
  198. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
  199. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
  200. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
  201. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
  202. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
  203. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
  204. data/lib/vendor/xmpp4r/lib/xmpp4r/query.rb +15 -0
  205. data/lib/vendor/xmpp4r/lib/xmpp4r/rexmladdons.rb +151 -0
  206. data/lib/vendor/xmpp4r/lib/xmpp4r/roster.rb +7 -0
  207. data/lib/vendor/xmpp4r/lib/xmpp4r/roster/helper/roster.rb +519 -0
  208. data/lib/vendor/xmpp4r/lib/xmpp4r/roster/iq/roster.rb +215 -0
  209. data/lib/vendor/xmpp4r/lib/xmpp4r/roster/x/roster.rb +138 -0
  210. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc.rb +2 -0
  211. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/client.rb +123 -0
  212. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/server.rb +74 -0
  213. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
  214. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
  215. data/lib/vendor/xmpp4r/lib/xmpp4r/sasl.rb +237 -0
  216. data/lib/vendor/xmpp4r/lib/xmpp4r/semaphore.rb +38 -0
  217. data/lib/vendor/xmpp4r/lib/xmpp4r/stream.rb +497 -0
  218. data/lib/vendor/xmpp4r/lib/xmpp4r/streamparser.rb +77 -0
  219. data/lib/vendor/xmpp4r/lib/xmpp4r/tune.rb +2 -0
  220. data/lib/vendor/xmpp4r/lib/xmpp4r/tune/helper/helper.rb +58 -0
  221. data/lib/vendor/xmpp4r/lib/xmpp4r/tune/tune.rb +113 -0
  222. data/lib/vendor/xmpp4r/lib/xmpp4r/vcard.rb +6 -0
  223. data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
  224. data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
  225. data/lib/vendor/xmpp4r/lib/xmpp4r/version.rb +7 -0
  226. data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/responder.rb +72 -0
  227. data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
  228. data/lib/vendor/xmpp4r/lib/xmpp4r/version/iq/version.rb +105 -0
  229. data/lib/vendor/xmpp4r/lib/xmpp4r/x.rb +37 -0
  230. data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml.rb +1 -0
  231. data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml/html.rb +115 -0
  232. data/lib/vendor/xmpp4r/lib/xmpp4r/xmpp4r.rb +18 -0
  233. data/lib/vendor/xmpp4r/lib/xmpp4r/xmppelement.rb +168 -0
  234. data/lib/vendor/xmpp4r/lib/xmpp4r/xmppstanza.rb +162 -0
  235. data/lib/vendor/xmpp4r/setup.rb +1586 -0
  236. data/lib/vendor/xmpp4r/test/bytestreams/tc_ibb.rb +186 -0
  237. data/lib/vendor/xmpp4r/test/bytestreams/tc_socks5bytestreams.rb +113 -0
  238. data/lib/vendor/xmpp4r/test/caps/tc_helper.rb +156 -0
  239. data/lib/vendor/xmpp4r/test/dataforms/tc_data.rb +81 -0
  240. data/lib/vendor/xmpp4r/test/delay/tc_xdelay.rb +51 -0
  241. data/lib/vendor/xmpp4r/test/discovery/tc_responder.rb +91 -0
  242. data/lib/vendor/xmpp4r/test/lib/assert_equal_xml.rb +14 -0
  243. data/lib/vendor/xmpp4r/test/lib/clienttester.rb +120 -0
  244. data/lib/vendor/xmpp4r/test/muc/tc_muc_mucclient.rb +830 -0
  245. data/lib/vendor/xmpp4r/test/muc/tc_muc_simplemucclient.rb +114 -0
  246. data/lib/vendor/xmpp4r/test/muc/tc_mucowner.rb +50 -0
  247. data/lib/vendor/xmpp4r/test/pubsub/tc_helper.rb +662 -0
  248. data/lib/vendor/xmpp4r/test/pubsub/tc_nodeconfig.rb +54 -0
  249. data/lib/vendor/xmpp4r/test/pubsub/tc_subscriptionconfig.rb +41 -0
  250. data/lib/vendor/xmpp4r/test/roster/tc_helper.rb +514 -0
  251. data/lib/vendor/xmpp4r/test/roster/tc_iqqueryroster.rb +173 -0
  252. data/lib/vendor/xmpp4r/test/roster/tc_xroster.rb +73 -0
  253. data/lib/vendor/xmpp4r/test/rpc/tc_helper.rb +96 -0
  254. data/lib/vendor/xmpp4r/test/tc_callbacks.rb +129 -0
  255. data/lib/vendor/xmpp4r/test/tc_class_names.rb +146 -0
  256. data/lib/vendor/xmpp4r/test/tc_client.rb +30 -0
  257. data/lib/vendor/xmpp4r/test/tc_errors.rb +146 -0
  258. data/lib/vendor/xmpp4r/test/tc_idgenerator.rb +30 -0
  259. data/lib/vendor/xmpp4r/test/tc_iq.rb +113 -0
  260. data/lib/vendor/xmpp4r/test/tc_iqquery.rb +31 -0
  261. data/lib/vendor/xmpp4r/test/tc_jid.rb +204 -0
  262. data/lib/vendor/xmpp4r/test/tc_message.rb +116 -0
  263. data/lib/vendor/xmpp4r/test/tc_presence.rb +150 -0
  264. data/lib/vendor/xmpp4r/test/tc_rexml.rb +139 -0
  265. data/lib/vendor/xmpp4r/test/tc_stream.rb +229 -0
  266. data/lib/vendor/xmpp4r/test/tc_streamComponent.rb +95 -0
  267. data/lib/vendor/xmpp4r/test/tc_streamError.rb +131 -0
  268. data/lib/vendor/xmpp4r/test/tc_streamSend.rb +59 -0
  269. data/lib/vendor/xmpp4r/test/tc_streamparser.rb +112 -0
  270. data/lib/vendor/xmpp4r/test/tc_xmppstanza.rb +135 -0
  271. data/lib/vendor/xmpp4r/test/ts_xmpp4r.rb +53 -0
  272. data/lib/vendor/xmpp4r/test/tune/tc_helper_recv.rb +84 -0
  273. data/lib/vendor/xmpp4r/test/tune/tc_helper_send.rb +74 -0
  274. data/lib/vendor/xmpp4r/test/tune/tc_tune.rb +79 -0
  275. data/lib/vendor/xmpp4r/test/vcard/tc_helper.rb +49 -0
  276. data/lib/vendor/xmpp4r/test/vcard/tc_iqvcard.rb +62 -0
  277. data/lib/vendor/xmpp4r/test/version/tc_helper.rb +60 -0
  278. data/lib/vendor/xmpp4r/test/version/tc_iqqueryversion.rb +97 -0
  279. data/lib/vendor/xmpp4r/test/xhtml/tc_html.rb +41 -0
  280. data/lib/vendor/xmpp4r/tools/gen_requires.bash +31 -0
  281. data/lib/vendor/xmpp4r/tools/xmpp4r-gemspec-test.rb +11 -0
  282. data/lib/vendor/xmpp4r/xmpp4r.gemspec +291 -0
  283. data/test/jabber_publisher_test.rb +1 -1
  284. data/test/mail_publisher_test.rb +2 -2
  285. data/test/mock/twitter.rb +0 -1
  286. data/test/rspec_builder_test.rb +39 -2
  287. data/test/rss_publisher_test.rb +1 -1
  288. data/test/twitter_publisher_test.rb +1 -1
  289. metadata +268 -53
  290. data/lib/cerberus/publisher/gmailer.rb +0 -17
@@ -0,0 +1,257 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ require 'xmpp4r/base64'
6
+
7
+ module Jabber
8
+ module Bytestreams
9
+ ##
10
+ # In-Band Bytestreams (JEP-0047) implementation
11
+ #
12
+ # Don't use directly, use IBBInitiator and IBBTarget
13
+ #
14
+ # In-Band Bytestreams should only be used when transferring
15
+ # very small amounts of binary data, because it is slow and
16
+ # increases server load drastically.
17
+ #
18
+ # Note that the constructor takes a lot of arguments. In-Band
19
+ # Bytestreams do not specify a way to initiate the stream,
20
+ # this should be done via Stream Initiation.
21
+ class IBB
22
+ NS_IBB = 'http://jabber.org/protocol/ibb'
23
+
24
+ ##
25
+ # Create a new bytestream
26
+ #
27
+ # Will register a <message/> callback to intercept data
28
+ # of this stream. This data will be buffered, you can retrieve
29
+ # it with receive
30
+ def initialize(stream, session_id, my_jid, peer_jid)
31
+ @stream = stream
32
+ @session_id = session_id
33
+ @my_jid = (my_jid.kind_of?(String) ? JID.new(my_jid) : my_jid)
34
+ @peer_jid = (peer_jid.kind_of?(String) ? JID.new(peer_jid) : peer_jid)
35
+
36
+ @active = false
37
+ @seq_send = 0
38
+ @seq_recv = 0
39
+ @queue = []
40
+ @queue_lock = Mutex.new
41
+ @pending = Semaphore.new
42
+ @sendbuf = ''
43
+ @sendbuf_lock = Mutex.new
44
+
45
+ @block_size = 4096 # Recommended by JEP0047
46
+ end
47
+
48
+ def active?
49
+ @active
50
+ end
51
+
52
+ ##
53
+ # Send data
54
+ #
55
+ # Data is buffered to match block_size in each packet.
56
+ # If you need the data to be sent immediately, use
57
+ # flush afterwards.
58
+ # buf:: [String]
59
+ def write(buf)
60
+ @sendbuf_lock.synchronize {
61
+ @sendbuf += buf
62
+
63
+ while @sendbuf.size >= @block_size
64
+ send_data(@sendbuf[0..@block_size-1])
65
+ @sendbuf = @sendbuf[@block_size..-1].to_s
66
+ end
67
+ }
68
+ end
69
+
70
+ ##
71
+ # Empty the send-buffer by sending remaining data
72
+ def flush
73
+ @sendbuf_lock.synchronize {
74
+ while @sendbuf.size > 0
75
+ send_data(@sendbuf[0..@block_size-1])
76
+ @sendbuf = @sendbuf[@block_size..-1].to_s
77
+ end
78
+ }
79
+ end
80
+
81
+ ##
82
+ # Receive data
83
+ #
84
+ # Will wait until the Message with the next sequence number
85
+ # is in the stanza queue.
86
+ def read
87
+ if active?
88
+ res = nil
89
+
90
+ while res.nil?
91
+ @queue_lock.synchronize {
92
+ @queue.each { |item|
93
+ # Find next data
94
+ if item.type == :data and item.seq == @seq_recv.to_s
95
+ res = item
96
+ break
97
+ # No data? Find close
98
+ elsif item.type == :close and res.nil?
99
+ res = item
100
+ end
101
+ }
102
+
103
+ @queue.delete_if { |item| item == res }
104
+ }
105
+
106
+ # No data? Wait for next to arrive...
107
+ @pending.wait unless res
108
+ end
109
+
110
+ if res.type == :data
111
+ @seq_recv += 1
112
+ @seq_recv = 0 if @seq_recv > 65535
113
+ res.data
114
+ elsif res.type == :close
115
+ deactivate
116
+ nil # Closed
117
+ end
118
+ else
119
+ nil
120
+ end
121
+ end
122
+
123
+ ##
124
+ # Close the stream
125
+ #
126
+ # Waits for acknowledge from peer,
127
+ # may throw ServerError
128
+ def close
129
+ if active?
130
+ flush
131
+ deactivate
132
+
133
+ iq = Iq.new(:set, @peer_jid)
134
+ close = iq.add REXML::Element.new('close')
135
+ close.add_namespace IBB::NS_IBB
136
+ close.attributes['sid'] = @session_id
137
+
138
+ @stream.send_with_id(iq)
139
+ end
140
+ end
141
+
142
+ private
143
+
144
+ ##
145
+ # Send data directly
146
+ # data:: [String]
147
+ def send_data(databuf)
148
+ if active?
149
+ msg = Message.new
150
+ msg.from = @my_jid
151
+ msg.to = @peer_jid
152
+
153
+ data = msg.add REXML::Element.new('data')
154
+ data.add_namespace NS_IBB
155
+ data.attributes['sid'] = @session_id
156
+ data.attributes['seq'] = @seq_send.to_s
157
+ data.text = Base64::encode64(databuf)
158
+
159
+ # TODO: Implement AMP correctly
160
+ amp = msg.add REXML::Element.new('amp')
161
+ amp.add_namespace 'http://jabber.org/protocol/amp'
162
+ deliver_at = amp.add REXML::Element.new('rule')
163
+ deliver_at.attributes['condition'] = 'deliver-at'
164
+ deliver_at.attributes['value'] = 'stored'
165
+ deliver_at.attributes['action'] = 'error'
166
+ match_resource = amp.add REXML::Element.new('rule')
167
+ match_resource.attributes['condition'] = 'match-resource'
168
+ match_resource.attributes['value'] = 'exact'
169
+ match_resource.attributes['action'] = 'error'
170
+
171
+ @stream.send(msg)
172
+
173
+ @seq_send += 1
174
+ @seq_send = 0 if @seq_send > 65535
175
+ else
176
+ raise 'Attempt to send data when not activated'
177
+ end
178
+ end
179
+
180
+ def activate
181
+ unless active?
182
+ @stream.add_message_callback(200, self) { |msg|
183
+ data = msg.first_element('data')
184
+ if msg.from == @peer_jid and msg.to == @my_jid and data and data.attributes['sid'] == @session_id
185
+ if msg.type == nil
186
+ @queue_lock.synchronize {
187
+ @queue.push IBBQueueItem.new(:data, data.attributes['seq'], data.text.to_s)
188
+ @pending.run
189
+ }
190
+ elsif msg.type == :error
191
+ @queue_lock.synchronize {
192
+ @queue << IBBQueueItem.new(:close)
193
+ @pending.run
194
+ }
195
+ end
196
+ true
197
+ else
198
+ false
199
+ end
200
+ }
201
+
202
+ @stream.add_iq_callback(200, self) { |iq|
203
+ close = iq.first_element('close')
204
+ if iq.type == :set and close and close.attributes['sid'] == @session_id
205
+ answer = iq.answer(false)
206
+ answer.type = :result
207
+ @stream.send(answer)
208
+
209
+ @queue_lock.synchronize {
210
+ @queue << IBBQueueItem.new(:close)
211
+ @pending.run
212
+ }
213
+ true
214
+ else
215
+ false
216
+ end
217
+ }
218
+
219
+ @active = true
220
+ end
221
+ end
222
+
223
+ def deactivate
224
+ if active?
225
+ @stream.delete_message_callback(self)
226
+ @stream.delete_iq_callback(self)
227
+
228
+ @active = false
229
+ end
230
+ end
231
+ end
232
+
233
+ ##
234
+ # Represents an item in the internal data queue
235
+ class IBBQueueItem
236
+ attr_reader :type, :seq
237
+ def initialize(type, seq=nil, data_text='')
238
+ unless [:data, :close].include? type
239
+ raise "Unknown IBBQueueItem type: #{type}"
240
+ end
241
+
242
+ @type = type
243
+ @seq = seq
244
+ @data = data_text
245
+ end
246
+
247
+ ##
248
+ # Return the Base64-*decoded* data
249
+ #
250
+ # There's no need to catch Exceptions here,
251
+ # as none are thrown.
252
+ def data
253
+ Base64::decode64(@data)
254
+ end
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,31 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ module Jabber
6
+ module Bytestreams
7
+ ##
8
+ # Implementation of IBB at the initiator side
9
+ class IBBInitiator < IBB
10
+ # You may set the block-size before open
11
+ attr_accessor :block_size
12
+
13
+ ##
14
+ # Open the stream to the peer,
15
+ # waits for successful result
16
+ #
17
+ # May throw ServerError
18
+ def open
19
+ iq = Iq.new(:set, @peer_jid)
20
+ open = iq.add REXML::Element.new('open')
21
+ open.add_namespace IBB::NS_IBB
22
+ open.attributes['sid'] = @session_id
23
+ open.attributes['block-size'] = @block_size.to_s
24
+
25
+ @stream.send_with_id(iq)
26
+
27
+ activate
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ module Jabber
6
+ module Bytestreams
7
+ ##
8
+ # Implementation of IBB at the target side
9
+ class IBBTarget < IBB
10
+ # You may read the block-size after accept
11
+ attr_reader :block_size
12
+
13
+ def initialize(stream, session_id, initiator_jid, target_jid)
14
+ # Target and Initiator are swapped here, because we're the target
15
+ super(stream, session_id, target_jid, initiator_jid)
16
+ end
17
+
18
+ ##
19
+ # Wait for the initiator side to start
20
+ # the stream.
21
+ def accept
22
+ connect_sem = Semaphore.new
23
+
24
+ @stream.add_iq_callback(200, self) { |iq|
25
+ open = iq.first_element('open')
26
+ if iq.type == :set and iq.from == @peer_jid and iq.to == @my_jid and open and open.attributes['sid'] == @session_id
27
+ @stream.delete_iq_callback(self)
28
+ activate
29
+ @block_size = (open.attributes['block-size'] || 4096).to_i
30
+
31
+ reply = iq.answer(false)
32
+ reply.type = :result
33
+ @stream.send(reply)
34
+
35
+ connect_sem.run
36
+ true
37
+ else
38
+ false
39
+ end
40
+ }
41
+
42
+ connect_sem.wait
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,152 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ require 'socket'
6
+ require 'thread'
7
+ require 'timeout'
8
+ require 'digest/sha1'
9
+
10
+ require 'xmpp4r/callbacks'
11
+
12
+ module Jabber
13
+ module Bytestreams
14
+ ##
15
+ # SOCKS5 Bytestreams (JEP-0065) implementation
16
+ #
17
+ # Don't use directly, use SOCKS5BytestreamsInitiator
18
+ # and SOCKS5BytestreamsTarget
19
+ class SOCKS5Bytestreams
20
+ ##
21
+ # [StreamHost] the SOCKS connection is using
22
+ attr_reader :streamhost_used
23
+
24
+ ##
25
+ # SOCKS connection timeout (for trying multiple streamhosts)
26
+ #
27
+ # default: nil, use the OS' default timeout
28
+ attr_accessor :connect_timeout
29
+
30
+ def initialize(stream, session_id, initiator_jid, target_jid)
31
+ @stream = stream
32
+ @session_id = session_id
33
+ @initiator_jid = (initiator_jid.kind_of?(String) ? JID.new(initiator_jid) : initiator_jid)
34
+ @target_jid = (target_jid.kind_of?(String) ? JID.new(target_jid) : target_jid)
35
+ @socks = nil
36
+ @connect_timeout = nil
37
+ @streamhost_used = nil
38
+ @streamhost_cbs = CallbackList.new
39
+ end
40
+
41
+ ##
42
+ # Add a callback that will be called when there is action regarding
43
+ # SOCKS stream-hosts
44
+ #
45
+ # Usage of this callback is optional and serves informational purposes only.
46
+ #
47
+ # block takes three arguments:
48
+ # * The StreamHost instance that is currently being tried
49
+ # * State information (is either :connecting, :authenticating, :success or :failure)
50
+ # * The exception value for the state :failure, else nil
51
+ def add_streamhost_callback(priority = 0, ref = nil, &block)
52
+ @streamhost_cbs.add(priority, ref, block)
53
+ end
54
+
55
+ ##
56
+ # Receive from the stream-host
57
+ # length:: [Fixnum] Amount of bytes (Will be passed to TCPSocket#read for the underlying SOCKS5 connection)
58
+ # result:: [String] (or [nil] if finished)
59
+ def read(length=nil)
60
+ @socks.read(length)
61
+ end
62
+
63
+ ##
64
+ # Flush the SOCKS5 socket
65
+ def flush
66
+ @socks.flush
67
+ end
68
+
69
+ ##
70
+ # Send to the stream-host
71
+ # buf:: [String] Data
72
+ # result:: [Fixnum] Amount of bytes sent
73
+ def write(buf)
74
+ @socks.write(buf)
75
+ # FIXME: On FreeBSD this throws Errno::EPERM after it has already written a few
76
+ # kilobytes, and when there are multiple sockets. ktrace told, that this originates
77
+ # from the syscall, not ruby.
78
+ end
79
+
80
+ ##
81
+ # Close the stream-host connection
82
+ def close
83
+ @socks.close
84
+ end
85
+
86
+ ##
87
+ # Query a JID for its stream-host information
88
+ #
89
+ # SOCKS5BytestreamsInitiator#add_streamhost can do this for you.
90
+ # Use this method if you plan to do multiple transfers, so
91
+ # you can cache the result.
92
+ # stream:: [Stream] to operate on
93
+ # streamhost:: [JID] of the proxy
94
+ # my_jid:: [JID] Optional sender JID for Component operation
95
+ def self.query_streamhost(stream, streamhost, my_jid=nil)
96
+ res = nil
97
+
98
+ iq = Iq.new(:get, streamhost)
99
+ iq.from = my_jid
100
+ iq.add(IqQueryBytestreams.new)
101
+ stream.send_with_id(iq) { |reply|
102
+ reply.query.each_element { |e|
103
+ if e.kind_of?(StreamHost)
104
+ e.jid = reply.from # Help misconfigured proxys
105
+ res = e
106
+ end
107
+ }
108
+ }
109
+
110
+ if res and res.jid and res.host and res.port
111
+ res
112
+ else
113
+ nil
114
+ end
115
+ end
116
+
117
+ private
118
+
119
+ ##
120
+ # The address the stream-host expects from us.
121
+ # According to JEP-0096 this is the SHA1 hash
122
+ # of the concatenation of session_id,
123
+ # initiator_jid and target_jid.
124
+ # result:: [String] SHA1 hash
125
+ def stream_address
126
+ Digest::SHA1.hexdigest("#{@session_id}#{@initiator_jid}#{@target_jid}")
127
+ end
128
+
129
+ ##
130
+ # Try a streamhost
131
+ # result:: [SOCKS5Socket]
132
+ def connect_socks(streamhost)
133
+ Timeout::timeout(@connect_timeout, Errno::ETIMEDOUT) {
134
+ Jabber::debuglog("SOCKS5 Bytestreams: connecting to proxy #{streamhost.jid} (#{streamhost.host}:#{streamhost.port})")
135
+ @streamhost_cbs.process(streamhost, :connecting, nil)
136
+ socks = SOCKS5Socket.new(streamhost.host, streamhost.port)
137
+
138
+ Jabber::debuglog("SOCKS5 Bytestreams: connected, authenticating")
139
+ @streamhost_cbs.process(streamhost, :authenticating, nil)
140
+ socks.auth
141
+
142
+ socks.connect_domain(stream_address, 0)
143
+
144
+ Jabber::debuglog("SOCKS5 Bytestreams: connected")
145
+ @streamhost_cbs.process(streamhost, :success, nil)
146
+
147
+ socks
148
+ }
149
+ end
150
+ end
151
+ end
152
+ end