xmppify 0.0.12

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 (120) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/javascripts/xmpp/index.js +0 -0
  8. data/app/assets/javascripts/xmpp/scripts/checkplayer.js +12 -0
  9. data/app/assets/javascripts/xmpp/scripts/crossdomain.xml +7 -0
  10. data/app/assets/javascripts/xmpp/scripts/flXHR.js +2 -0
  11. data/app/assets/javascripts/xmpp/scripts/flXHR.swf +0 -0
  12. data/app/assets/javascripts/xmpp/scripts/flXHR.vbs +44 -0
  13. data/app/assets/javascripts/xmpp/scripts/flensed.js +12 -0
  14. data/app/assets/javascripts/xmpp/scripts/strophe.flxhr.js +31 -0
  15. data/app/assets/javascripts/xmpp/scripts/strophe.js +3538 -0
  16. data/app/assets/javascripts/xmpp/scripts/swfobject.js +5 -0
  17. data/app/assets/javascripts/xmpp/scripts/updateplayer.swf +0 -0
  18. data/app/assets/javascripts/xmpp/scripts/xmpp.js.coffee +386 -0
  19. data/app/assets/javascripts/xmpp/strophejs-plugins/LICENSE.txt +19 -0
  20. data/app/assets/javascripts/xmpp/strophejs-plugins/README.markdown +95 -0
  21. data/app/assets/javascripts/xmpp/strophejs-plugins/archive/README.markdown +14 -0
  22. data/app/assets/javascripts/xmpp/strophejs-plugins/archive/iso8601_support.js +32 -0
  23. data/app/assets/javascripts/xmpp/strophejs-plugins/archive/strophe.archive.js +88 -0
  24. data/app/assets/javascripts/xmpp/strophejs-plugins/caps/README.markdown +53 -0
  25. data/app/assets/javascripts/xmpp/strophejs-plugins/caps/sha1.js +202 -0
  26. data/app/assets/javascripts/xmpp/strophejs-plugins/caps/strophe.CAPS.coffee +153 -0
  27. data/app/assets/javascripts/xmpp/strophejs-plugins/caps/strophe.CAPS.js +88 -0
  28. data/app/assets/javascripts/xmpp/strophejs-plugins/caps/strophe.caps.jsonly.js +240 -0
  29. data/app/assets/javascripts/xmpp/strophejs-plugins/chatstates/strophe.chatstates.js +80 -0
  30. data/app/assets/javascripts/xmpp/strophejs-plugins/cmds/README.markdown +47 -0
  31. data/app/assets/javascripts/xmpp/strophejs-plugins/cmds/spec/GetUrlComamndSpec.js +66 -0
  32. data/app/assets/javascripts/xmpp/strophejs-plugins/cmds/spec/strophe.cmds.spec.coffee +145 -0
  33. data/app/assets/javascripts/xmpp/strophejs-plugins/cmds/spec/support/jasmine.json +16 -0
  34. data/app/assets/javascripts/xmpp/strophejs-plugins/cmds/src/strophe.cmds.coffee +265 -0
  35. data/app/assets/javascripts/xmpp/strophejs-plugins/cmds/src/strophe.cmds.js +403 -0
  36. data/app/assets/javascripts/xmpp/strophejs-plugins/dataforms/README.markdown +82 -0
  37. data/app/assets/javascripts/xmpp/strophejs-plugins/dataforms/spec/strophe.x.coffee +715 -0
  38. data/app/assets/javascripts/xmpp/strophejs-plugins/dataforms/src/strophe.x.coffee +443 -0
  39. data/app/assets/javascripts/xmpp/strophejs-plugins/dataforms/src/strophe.x.js +854 -0
  40. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/.gitignore +1 -0
  41. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/README.markdown +0 -0
  42. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/convert.js +13 -0
  43. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/jasmine.json +11 -0
  44. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/lib/strophe.disco.js +137 -0
  45. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/public/javascript/strophe.disco.js +137 -0
  46. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/01_querying_information.xml +6 -0
  47. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/02_result_set_for_information_request.xml +22 -0
  48. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/03_target_entity_does_not_exist.xml +10 -0
  49. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/04_service_unavailable.xml +11 -0
  50. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/09_querying_specific_jid_and_node_combination.xml +7 -0
  51. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/10_jid_and_node_result.xml +12 -0
  52. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/11_requesting_all_items.xml +6 -0
  53. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/12_result_set_for_all_items.xml +23 -0
  54. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/13_empty_result_set.xml +7 -0
  55. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/17_service_returns_nodes.xml +16 -0
  56. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/18_requesting_further_nodes.xml +7 -0
  57. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/24_jid_and_node_error.xml +11 -0
  58. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/DiscoNodeSpec.js +50 -0
  59. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/SpecHelper.js +51 -0
  60. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/Stanzas.js +0 -0
  61. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/strophe.disco.spec.helper.js +54 -0
  62. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/strophe.disco.spec.js +0 -0
  63. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/spec/support/jasmine.json +13 -0
  64. data/app/assets/javascripts/xmpp/strophejs-plugins/disco/strophe.disco.js +232 -0
  65. data/app/assets/javascripts/xmpp/strophejs-plugins/epic/public/javascript/jquery.epic.js +61 -0
  66. data/app/assets/javascripts/xmpp/strophejs-plugins/epic/spec/SpecHelper.js +9 -0
  67. data/app/assets/javascripts/xmpp/strophejs-plugins/epic/spec/jquery.epic.js +39 -0
  68. data/app/assets/javascripts/xmpp/strophejs-plugins/epic/spec/support/jasmine.json +22 -0
  69. data/app/assets/javascripts/xmpp/strophejs-plugins/iexdomain/iexdomain.js +36 -0
  70. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/README.markdown +117 -0
  71. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/buster.js +23 -0
  72. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/jid.coffee +64 -0
  73. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/jid.js +92 -0
  74. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/spec/browserSetup.coffee +1 -0
  75. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/spec/jid.spec.coffee +96 -0
  76. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/spec/strophe.joap.spec.coffee +461 -0
  77. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/strophe.joap.coffee +304 -0
  78. data/app/assets/javascripts/xmpp/strophejs-plugins/joap/strophe.joap.js +522 -0
  79. data/app/assets/javascripts/xmpp/strophejs-plugins/mam/LICENSE.txt +19 -0
  80. data/app/assets/javascripts/xmpp/strophejs-plugins/mam/README.markdown +52 -0
  81. data/app/assets/javascripts/xmpp/strophejs-plugins/mam/strophe.mam.js +62 -0
  82. data/app/assets/javascripts/xmpp/strophejs-plugins/muc/LICENSE.txt +20 -0
  83. data/app/assets/javascripts/xmpp/strophejs-plugins/muc/strophe.muc.js +1003 -0
  84. data/app/assets/javascripts/xmpp/strophejs-plugins/ping/README.markdown +28 -0
  85. data/app/assets/javascripts/xmpp/strophejs-plugins/ping/strophe.ping.js +68 -0
  86. data/app/assets/javascripts/xmpp/strophejs-plugins/private/README.markdown +16 -0
  87. data/app/assets/javascripts/xmpp/strophejs-plugins/private/strophe.private.js +192 -0
  88. data/app/assets/javascripts/xmpp/strophejs-plugins/pubsub/strophe.pubsub.js +555 -0
  89. data/app/assets/javascripts/xmpp/strophejs-plugins/receipts/strophe.receipts.js +155 -0
  90. data/app/assets/javascripts/xmpp/strophejs-plugins/register/README.markdown +44 -0
  91. data/app/assets/javascripts/xmpp/strophejs-plugins/register/strophe.register.js +431 -0
  92. data/app/assets/javascripts/xmpp/strophejs-plugins/roster/public/javascript/strophe.roster.js +40 -0
  93. data/app/assets/javascripts/xmpp/strophejs-plugins/roster/spec/strophe.roster.spec.js +65 -0
  94. data/app/assets/javascripts/xmpp/strophejs-plugins/roster/spec/support/jasmine.json +15 -0
  95. data/app/assets/javascripts/xmpp/strophejs-plugins/roster/strophe.roster.js +438 -0
  96. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/.gitignore +6 -0
  97. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/README.md +113 -0
  98. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/buster.js +11 -0
  99. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/lib/strophe.js +4198 -0
  100. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/spec/strophe.rpc.spec.helper.js +38 -0
  101. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/spec/strophe.rpc.spec.js +262 -0
  102. data/app/assets/javascripts/xmpp/strophejs-plugins/rpc/strophe.rpc.js +464 -0
  103. data/app/assets/javascripts/xmpp/strophejs-plugins/rsm/strophe.rsm.js +52 -0
  104. data/app/assets/javascripts/xmpp/strophejs-plugins/serverdate/strophe.serverdate.js +58 -0
  105. data/app/assets/javascripts/xmpp/strophejs-plugins/vcard/examples/index.html +17 -0
  106. data/app/assets/javascripts/xmpp/strophejs-plugins/vcard/examples/strophevcard.js +0 -0
  107. data/app/assets/javascripts/xmpp/strophejs-plugins/vcard/strophe.vcard.coffee +44 -0
  108. data/app/assets/javascripts/xmpp/strophejs-plugins/vcard/strophe.vcard.js +66 -0
  109. data/app/assets/stylesheets/xmpp/index.css +0 -0
  110. data/app/controllers/omniauth_callbacks_controller.rb +15 -0
  111. data/app/controllers/ruby_bosh.rb +221 -0
  112. data/app/models/identity.rb +3 -0
  113. data/app/models/user.rb +40 -0
  114. data/bin/rails +8 -0
  115. data/db/migrate/20140329065635_create_users.rb +10 -0
  116. data/db/migrate/20140329070238_create_identities.rb +11 -0
  117. data/lib/xmppify/version.rb +3 -0
  118. data/lib/xmppify.rb +6 -0
  119. data/xmppify.gemspec +23 -0
  120. metadata +197 -0
@@ -0,0 +1,304 @@
1
+ ###
2
+ This program is distributed under the terms of the MIT license.
3
+ Copyright 2012 - 2013 (c) Markus Kohlhase <mail@markus-kohlhase.de>
4
+ ###
5
+
6
+ JOAP_NS = "jabber:iq:joap"
7
+ RPC_NS = "jabber:iq:rpc"
8
+
9
+ # Private static members
10
+
11
+ conn = null
12
+
13
+ onError = (cb=->) -> (iq) ->
14
+ err = iq.getElementsByTagName("error")[0]
15
+ if err?
16
+ code = err.getAttribute("code") * 1
17
+ msg = err.textContent
18
+ msg = "JOAP server is unavailable" if code is 503
19
+ cb iq, new JOAPError msg, code
20
+ else
21
+ cb iq, new JOAPError "Unknown error"
22
+
23
+ addXMLAttributes = (iq, attrs) ->
24
+ return if not attrs?
25
+ if attrs instanceof Array
26
+ return console?.warn? "No attributes added: attribute parameter is not an object"
27
+ else if typeof attrs is "object"
28
+ for k,v of attrs
29
+ iq.c("attribute")
30
+ .c("name").t(k).up()
31
+ .cnode(conn.rpc._convertToXML v).up().up()
32
+
33
+ addRPCElements = (iq, method, params=[]) ->
34
+ throw new TypeError unless typeof method is "string"
35
+ iq.c("methodCall").c("methodName").t(method).up()
36
+ if not (params instanceof Array)
37
+ console?.warn? "No parameters added: parameter is not an array"
38
+ return
39
+ if params.length > 0
40
+ iq.c("params")
41
+ for p in params
42
+ iq.c("param")
43
+ .cnode(conn.rpc._convertToXML p).up().up()
44
+
45
+ parseAttributes = (iq) ->
46
+ attrs = iq.getElementsByTagName("attribute")
47
+ data = {}
48
+ for a in attrs
49
+ key = a.getElementsByTagName("name")[0].textContent
50
+ data[key] = conn.rpc._convertFromXML a.getElementsByTagName("value")[0]
51
+ data
52
+
53
+ parseRPCParams = (iq) ->
54
+ conn.rpc._convertFromXML iq
55
+ .getElementsByTagName("param")[0]
56
+ .getElementsByTagName("value")[0]
57
+
58
+ parseNewAddress = (iq) ->
59
+ address = new JID(iq.getElementsByTagName("newAddress")[0].textContent).toString()
60
+
61
+ parseSearch = (iq) ->
62
+ items = iq.getElementsByTagName("item")
63
+ (new JID(i.textContent).toString() for i in items)
64
+
65
+ parseAttributeDescription = (d) ->
66
+ name: d.getElementsByTagName("name")[0]?.textContent
67
+ type: d.getElementsByTagName("type")[0]?.textContent
68
+ desc: parseDesc d.getElementsByTagName("desc")
69
+
70
+ parseMethodDescription = (d) ->
71
+ name: d.getElementsByTagName("name")[0]?.textContent
72
+ returnType: d.getElementsByTagName("returnType")[0]?.textContent
73
+ desc: parseDesc d.getElementsByTagName("desc")
74
+
75
+ parseDesc = (desc) ->
76
+ res = {}
77
+ if desc instanceof NodeList
78
+ for c in desc
79
+ res[c.getAttribute "xml:lang"] = c.textContent
80
+ else
81
+ res.desc[desc.getAttribute "xml:lang"] = desc.textContent
82
+ res
83
+
84
+ parseDescription = (iq) ->
85
+ result = desc: {}, attributes: {}, methods: {}, classes: []
86
+ describe = iq.getElementsByTagName("describe")[0]
87
+ for c in describe.childNodes
88
+ switch c.tagName.toLowerCase()
89
+ when "desc"
90
+ result.desc[c.getAttribute "xml:lang"] = c.textContent
91
+ when "attributedescription"
92
+ ad = parseAttributeDescription c
93
+ result.attributes[ad.name] = ad
94
+ when "methoddescription"
95
+ md = parseMethodDescription c
96
+ result.methods[md.name] = md
97
+ when "superclass"
98
+ result.superclass = new JID(c.textContent).toString()
99
+ when "timestamp"
100
+ result.timestamp = c.textContent
101
+ when "class"
102
+ classes.push = c.textContent
103
+ result
104
+
105
+ getAddress = (clazz, service, instance) ->
106
+ (new JID clazz, service, instance).toString()
107
+
108
+ createIq = (type, to) ->
109
+ iqType = if (type in ["read", "search", "describe"]) then "get" else "set"
110
+ xmlns = if type is "query" then RPC_NS else JOAP_NS
111
+ $iq(to: to, type: iqType)
112
+ .c(type, xmlns: xmlns)
113
+
114
+ sendRequest = (type, to, cb, opt={}) ->
115
+ iq = createIq type, to
116
+ opt.beforeSend? iq
117
+ success = (res) -> cb? res, null, opt.onResult?(res)
118
+ conn.sendIQ iq, success, onError(cb)
119
+
120
+ describe = (id, cb) ->
121
+ sendRequest "describe", id, cb,
122
+ onResult: parseDescription
123
+
124
+ read = (instance, limits, cb) ->
125
+ if typeof limits is "function"
126
+ cb = limits; limits = null
127
+ sendRequest "read", instance, cb,
128
+ beforeSend: (iq) -> if limits instanceof Array
129
+ iq.c("name").t(l).up() for l in limits
130
+ onResult: parseAttributes
131
+
132
+ add = (clazz, attrs, cb) ->
133
+ cb = attrs if typeof attrs is "function"
134
+ sendRequest "add", clazz, cb,
135
+ beforeSend: (iq) -> addXMLAttributes iq, attrs
136
+ onResult: parseNewAddress
137
+
138
+ edit = (instance, attrs, cb) ->
139
+ sendRequest "edit", instance, cb,
140
+ beforeSend: (iq) -> addXMLAttributes iq, attrs
141
+ onResult: parseAttributes
142
+
143
+ search = (clazz, attrs, cb) ->
144
+ if typeof attrs is "function"
145
+ cb = attrs; attrs=null
146
+ sendRequest "search", clazz, cb,
147
+ beforeSend: (iq) -> addXMLAttributes iq, attrs
148
+ onResult: parseSearch
149
+
150
+ searchAndRead = (clazz, attrs, limits, cb) ->
151
+ if typeof limits is "function"
152
+ cb = limits; limits = null
153
+ if typeof attrs is "function" and not limits?
154
+ cb = attrs; attrs = null
155
+ else if attrs instanceof Array and not limits?
156
+ limits = attrs; attrs = null
157
+ search clazz, attrs, (iq, err, res) ->
158
+ if err?
159
+ cb err
160
+ else
161
+ objects = []
162
+ count = res.length
163
+ if count > 0
164
+ readCB = (iq, err, o) ->
165
+ if err?
166
+ cb err
167
+ else
168
+ count--
169
+ objects.push o
170
+ cb null, objects if count is 0
171
+ for id in res then do (id) -> read id, limits, readCB
172
+ else
173
+ cb null, objects
174
+
175
+ del = (instance, cb) ->
176
+ sendRequest "delete", instance, cb
177
+
178
+ methodCall = (method, address, params, cb) ->
179
+ sendRequest "query", address, cb,
180
+ beforeSend: (iq) -> addRPCElements iq, method, params
181
+ onResult: parseRPCParams
182
+
183
+ class JOAPError extends Error
184
+
185
+ constructor: (@message, @code)->
186
+ @name = "JOAPError"
187
+
188
+ class JOAPServer
189
+
190
+ constructor: (service) ->
191
+ @jid = new JID service
192
+
193
+ describe: (clazz, instance, cb) ->
194
+ if typeof clazz is "function"
195
+ cb = clazz; clazz = instance = null
196
+ else if typeof instance is "function"
197
+ cb = instance; instance = null
198
+ describe getAddress(clazz, @jid.domain, instance), cb
199
+
200
+ add: (clazz, attrs, cb) ->
201
+ add getAddress(clazz, @jid.domain), attrs, cb
202
+
203
+ read: (clazz, instance, limits, cb) ->
204
+ read getAddress(clazz, @jid.domain, instance), limits, cb
205
+
206
+ edit: (clazz, instance, attrs, cb) ->
207
+ edit getAddress(clazz, @jid.domain, instance), attrs, cb
208
+
209
+ delete: (clazz, instance, cb) ->
210
+ del getAddress(clazz, @jid.domain, instance), cb
211
+
212
+ search: (clazz, attrs, cb) ->
213
+ search getAddress(clazz, @jid.domain), attrs, cb
214
+
215
+ searchAndRead: (clazz, attrs, limits, cb) ->
216
+ searchAndRead getAddress(clazz, @jid.domain), attrs, limits, cb
217
+
218
+ methodCall: (method, clazz, instance, params, cb) ->
219
+ if typeof clazz is "function"
220
+ cb = clazz; clazz = instance = params = null
221
+ else if typeof instance is "function"
222
+ cb = instance; instance = params = null
223
+ else if typeof params is "function"
224
+ cb = params; params = null
225
+ methodCall method, getAddress(clazz, @jid.domain, instance), params, cb
226
+
227
+ class JOAPObject
228
+
229
+ constructor: (id) ->
230
+ @jid = new JID id
231
+
232
+ read: (limits, cb) -> read @jid.toString(), limits, cb
233
+
234
+ edit: (attrs, cb) -> edit @jid.toString(), attrs, cb
235
+
236
+ describe: (cb) -> describe @jid.toString(), cb
237
+
238
+ methodCall: (method, params, cb) ->
239
+ if typeof params is "function"
240
+ cb = params; params = null
241
+ methodCall method, @jid.toString(), params, cb
242
+
243
+ class JOAPClass
244
+
245
+ constructor: (id) ->
246
+ @jid = new JID id
247
+
248
+ describe: (instance, cb) ->
249
+ if typeof instance is "function"
250
+ cb = instance
251
+ instance = null
252
+ describe getAddress(@jid.user, @jid.domain, instance), cb
253
+
254
+ add: (attrs, cb) ->
255
+ add getAddress(@jid.user, @jid.domain), attrs, cb
256
+
257
+ read: (instance, limits, cb) ->
258
+ read getAddress(@jid.user, @jid.domain, instance), limits, cb
259
+
260
+ edit: (instance, attrs, cb) ->
261
+ edit getAddress(@jid.user, @jid.domain, instance), attrs, cb
262
+
263
+ delete: (instance, cb) ->
264
+ del getAddress(@jid.user, @jid.domain, instance), cb
265
+
266
+ search: (attrs, cb) ->
267
+ search getAddress(@jid.user, @jid.domain), attrs, cb
268
+
269
+ searchAndRead: (attrs, limits, cb) ->
270
+ searchAndRead getAddress(@jid.user, @jid.domain), attrs, limits, cb
271
+
272
+ methodCall: (method, instance, params, cb) ->
273
+ if typeof instance is "function"
274
+ cb = instance; instance = params = null
275
+ else if typeof params is "function"
276
+ cb = params; params = null
277
+ methodCall method, getAddress(@jid.user, @jid.domain, instance), params, cb
278
+
279
+ Strophe.addConnectionPlugin 'joap', do ->
280
+
281
+ init = (c) ->
282
+ conn = c
283
+ Strophe.addNamespace "JOAP", JOAP_NS
284
+
285
+ if not conn.hasOwnProperty "disco"
286
+ Strophe.warn "You need the discovery plugin to have JOAP fully implemented."
287
+ else
288
+ conn.disco.addIdentity "automation", "joap"
289
+ conn.disco.addFeature Strophe.NS.JOAP
290
+
291
+ # public API
292
+ init: init
293
+ describe: describe
294
+ add: add
295
+ read: read
296
+ edit: edit
297
+ delete: del
298
+ search: search
299
+ searchAndRead: searchAndRead
300
+ methodCall: methodCall
301
+ JOAPError: JOAPError
302
+ JOAPServer: JOAPServer
303
+ JOAPObject: JOAPObject
304
+ JOAPClass: JOAPClass