Mercurial > prosody-modules
annotate mod_sms_clickatell/mod_sms_clickatell.lua @ 735:c1b0f0c33c6a
mod_archive: Fix hour offset in stored message date
os.date expect a timestamp in local time, that is subject to daylight saving.
But since we pass an UTC timestamp to os.date one hour is (wrongly) added in
the summer.
The only sensible thing is to call the os.date only once with the ! parametter.
And then parsing this sting to get the utc_timestamp.
Calling os.date with an UTC timestamp is not possible, and calling os.date
twice without timestamp could give different results.
author | Olivier Goffart <ogoffart@woboq.com> |
---|---|
date | Wed, 04 Jul 2012 13:49:57 +0200 |
parents | cd838419a85d |
children | ac9bf3fcbcfe |
rev | line source |
---|---|
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
1 -- mod_sms_clickatell |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
2 -- |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
3 -- A Prosody module for sending SMS text messages from XMPP using the |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
4 -- Clickatell gateway's HTTP API |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
5 -- |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
6 -- Hacked from mod_twitter by Phil Stewart, March 2011. Anything from |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
7 -- mod_twitter copyright The Guy Who Wrote mod_twitter. Everything else |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
8 -- copyright 2011 Phil Stewart. Licensed under the same terms as Prosody |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
9 -- (MIT license, as per below) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
10 -- |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
11 --[[ |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
12 Permission is hereby granted, free of charge, to any person obtaining a copy |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
13 of this software and associated documentation files (the "Software"), to deal |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
14 in the Software without restriction, including without limitation the rights |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
15 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
16 copies of the Software, and to permit persons to whom the Software is |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
17 furnished to do so, subject to the following conditions: |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
18 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
19 The above copyright notice and this permission notice shall be included in |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
20 all copies or substantial portions of the Software. |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
21 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
23 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
24 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
25 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
26 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
27 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
28 THE SOFTWARE. |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
29 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
30 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
31 -- Raise an error if the modules hasn't been loaded as a component in prosody's config |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
32 if module:get_host_type() ~= "component" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
33 error(module.name.." should be loaded as a component, check out http://prosody.im/doc/components", 0); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
34 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
35 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
36 local jid_split = require "util.jid".split; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
37 local st = require "util.stanza"; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
38 local componentmanager = require "core.componentmanager"; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
39 local datamanager = require "util.datamanager"; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
40 local timer = require "util.timer"; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
41 local config_get = require "core.configmanager".get; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
42 local http = require "net.http"; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
43 local base64 = require "util.encodings".base64; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
44 local serialize = require "util.serialization".serialize; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
45 local pairs, ipairs = pairs, ipairs; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
46 local setmetatable = setmetatable; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
47 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
48 local component_host = module:get_host(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
49 local component_name = module.name; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
50 local data_cache = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
51 |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
52 --local clickatell_api_id = module:get_option_string("clickatell_api_id"); |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
53 local sms_message_prefix = module:get_option_string("sms_message_prefix") or ""; |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
54 --local sms_source_number = module:get_option_string("sms_source_number") or ""; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
55 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
56 --local users = setmetatable({}, {__mode="k"}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
57 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
58 -- User data is held in smsuser objects |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
59 local smsuser = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
60 smsuser.__index = smsuser; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
61 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
62 -- Users table is used to store user data in the form of smsuser objects. |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
63 -- It is indexed by the base jid of the user, so when a non-extant entry in the |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
64 -- table is referenced, we pass the jid to smsuser:register to load the user |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
65 local users = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
66 setmetatable(users, { __index = function (table, key) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
67 return smsuser:register(key); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
68 end }); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
69 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
70 -- Create a new smsuser object |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
71 function smsuser:new() |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
72 newuser = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
73 setmetatable(newuser, self); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
74 return newuser; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
75 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
76 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
77 -- Store (save) the user object |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
78 function smsuser:store() |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
79 datamanager.store(self.jid, component_host, "data", self.data); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
80 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
81 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
82 -- For debug |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
83 function smsuser:logjid() |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
84 module:log("logjid: ", self.jid); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
85 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
86 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
87 -- Register a user against the base jid of the client. If a user entry for the |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
88 -- bjid is already stored in the Prosody data manager, retrieve its data |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
89 function smsuser:register(bjid) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
90 reguser = smsuser:new(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
91 reguser.jid = bjid; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
92 reguser.data = datamanager.load(bjid, component_host, "data") or {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
93 return reguser; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
94 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
95 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
96 -- Add a roster entry for the user |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
97 -- SMS users must me of the form number@component_host |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
98 function smsuser:roster_add(sms_number) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
99 if self.data.roster == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
100 self.data.roster = {} |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
101 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
102 if self.data.roster[sms_number] == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
103 self.data.roster[sms_number] = {screen_name=sms_number, subscription=nil}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
104 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
105 self:store(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
106 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
107 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
108 -- Update the roster entry of sms_number with new screen name |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
109 function smsuser:roster_update_screen_name(sms_number, screen_name) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
110 if self.data.roster[sms_number] == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
111 smsuser:roster_add(sms_number); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
112 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
113 self.data.roster[sms_number].screen_name = screen_name; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
114 self:store(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
115 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
116 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
117 -- Update the roster entry of sms_number with new subscription detail |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
118 function smsuser:roster_update_subscription(sms_number, subscription) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
119 if self.data.roster[sms_number] == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
120 smsuser:roster_add(sms_number); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
121 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
122 self.data.roster[sms_number].subscription = subscription; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
123 self:store(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
124 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
125 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
126 -- Delete an entry from the roster |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
127 function smsuser:roster_delete(sms_number) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
128 self.data.roster[sms_number] = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
129 self:store(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
130 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
131 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
132 -- |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
133 function smsuser:roster_stanza_args(sms_number) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
134 if self.data.roster[sms_number] == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
135 return nil |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
136 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
137 local args = {jid=sms_number.."@"..component_host, name=self.data.roster[sms_number].screen_name} |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
138 if self.data.roster[sms_number].subscription ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
139 args.subscription = self.data.roster[sms_number].subscription |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
140 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
141 return args |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
142 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
143 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
144 --[[ From mod_twitter, keeping 'cos I might use it later :-) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
145 function send_stanza(stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
146 if stanza ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
147 core_route_stanza(prosody.hosts[component_host], stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
148 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
149 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
150 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
151 function dmsg(jid, msg) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
152 module:log("debug", msg or "nil"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
153 if jid ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
154 send_stanza(st.message({to=jid, from=component_host, type='chat'}):tag("body"):text(msg or "nil"):up()); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
155 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
156 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
157 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
158 function substring(string, start_string, ending_string) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
159 local s_value_start, s_value_finish = nil, nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
160 if start_string ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
161 _, s_value_start = string:find(start_string); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
162 if s_value_start == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
163 -- error |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
164 return nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
165 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
166 else |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
167 return nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
168 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
169 if ending_string ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
170 _, s_value_finish = string:find(ending_string, s_value_start+1); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
171 if s_value_finish == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
172 -- error |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
173 return nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
174 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
175 else |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
176 s_value_finish = string:len()+1; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
177 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
178 return string:sub(s_value_start+1, s_value_finish-1); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
179 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
180 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
181 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
182 local http_timeout = 30; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
183 local http_queue = setmetatable({}, { __mode = "k" }); -- auto-cleaning nil elements |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
184 data_cache['prosody_os'] = prosody.platform; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
185 data_cache['prosody_version'] = prosody.version; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
186 local http_headers = { |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
187 ["user-Agent"] = "Prosody ("..data_cache['prosody_version'].."; "..data_cache['prosody_os']..")" --"ELinks (0.4pre5; Linux 2.4.27 i686; 80x25)", |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
188 }; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
189 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
190 function http_action_callback(response, code, request, xcallback) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
191 if http_queue == nil or http_queue[request] == nil then return; end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
192 local id = http_queue[request]; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
193 http_queue[request] = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
194 if xcallback == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
195 dmsg(nil, "http_action_callback reports that xcallback is nil"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
196 else |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
197 xcallback(id, response, request); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
198 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
199 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
200 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
201 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
202 function http_add_action(tid, url, method, post, fcallback) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
203 local request = http.request(url, { headers = http_headers or {}, body = "", method = method or "GET" }, function(response, code, request) http_action_callback(response, code, request, fcallback) end); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
204 http_queue[request] = tid; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
205 timer.add_task(http_timeout, function() http.destroy_request(request); end); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
206 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
207 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
208 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
209 -- Clickatell SMS HTTP API interaction function |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
210 function clickatell_send_sms(user, number, message) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
211 module.log("info", "Clickatell API interaction function triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
212 -- Don't attempt to send an SMS with a null or empty message |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
213 if message == nil or message == "" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
214 return false; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
215 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
216 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
217 local sms_message = sms_message_prefix..message; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
218 local clickatell_base_url = "https://api.clickatell.com/http/sendmsg"; |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
219 local params = {user=user.data.username, password=user.data.password, api_id=user.data.api_id, from=user.data.source_number, to=number, text=sms_message}; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
220 local query_string = ""; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
221 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
222 for param, data in pairs(params) do |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
223 --module:log("info", "Inside query constructor: "..param..data); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
224 if query_string ~= "" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
225 query_string = query_string.."&"; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
226 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
227 query_string = query_string..param.."="..http.urlencode(data); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
228 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
229 local url = clickatell_base_url.."?"..query_string; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
230 module:log("info", "Clickatell SMS URL: "..url); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
231 http_add_action(message, url, "GET", params, nil); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
232 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
233 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
234 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
235 function iq_success(origin, stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
236 local reply = data_cache.success; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
237 if reply == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
238 reply = st.iq({type='result', from=stanza.attr.to or component_host}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
239 data_cache.success = reply; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
240 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
241 reply.attr.id = stanza.attr.id; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
242 reply.attr.to = stanza.attr.from; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
243 origin.send(reply); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
244 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
245 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
246 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
247 -- XMPP Service Discovery (disco) info callback |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
248 -- When a disco info query comes in, returns the identity and feature |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
249 -- information as per XEP-0030 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
250 function iq_disco_info(stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
251 module:log("info", "Disco info triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
252 local from = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
253 from.node, from.host, from.resource = jid_split(stanza.attr.from); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
254 local bjid = from.node.."@"..from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
255 local reply = data_cache.disco_info; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
256 if reply == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
257 --reply = st.iq({type='result', from=stanza.attr.to or component_host}):query("http://jabber.org/protocol/disco#info"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
258 reply = st.reply(stanza):query("http://jabber.org/protocol/disco#info"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
259 reply:tag("identity", {category='gateway', type='sms', name=component_name}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
260 reply:tag("feature", {var="urn:xmpp:receipts"}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
261 reply:tag("feature", {var="jabber:iq:register"}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
262 reply:tag("feature", {var="http://jabber.org/protocol/rosterx"}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
263 --reply = reply:tag("feature", {var="http://jabber.org/protocol/commands"}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
264 --reply = reply:tag("feature", {var="jabber:iq:time"}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
265 --reply = reply:tag("feature", {var="jabber:iq:version"}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
266 data_cache.disco_info = reply; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
267 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
268 reply.attr.id = stanza.attr.id; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
269 reply.attr.to = stanza.attr.from; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
270 return reply; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
271 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
272 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
273 -- XMPP Service Discovery (disco) items callback |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
274 -- When a disco info query comes in, returns the items |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
275 -- information as per XEP-0030 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
276 -- (Nothing much happening here at the moment) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
277 --[[ |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
278 function iq_disco_items(stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
279 module:log("info", "Disco items triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
280 local reply = data_cache.disco_items; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
281 if reply == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
282 reply = st.iq({type='result', from=stanza.attr.to or component_host}):query("http://jabber.org/protocol/disco#items") |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
283 :tag("item", {jid='testuser'..'@'..component_host, name='SMS Test Target'}):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
284 data_cache.disco_items = reply; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
285 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
286 reply.attr.id = stanza.attr.id; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
287 reply.attr.to = stanza.attr.from; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
288 return reply; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
289 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
290 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
291 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
292 -- XMPP Register callback |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
293 -- The client must register with the gateway. In this case, the gateway is |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
294 -- Clickatell's http api, so we |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
295 function iq_register(origin, stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
296 module:log("info", "Register event triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
297 if stanza.attr.type == "get" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
298 local reply = data_cache.registration_form; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
299 if reply == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
300 reply = st.iq({type='result', from=stanza.attr.to or component_host}) |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
301 :tag("query", {xmlns="jabber:iq:register"}) |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
302 :tag("instructions"):text("Use the enclosed form to register."):up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
303 reply:tag("x", {xmlns="jabber:x:data", type='form'}); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
304 reply:tag("title"):text('SMS Gateway Registration: Clickatell'):up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
305 reply:tag("instructions"):text("Enter your Clickatell username, password, API ID, and a source number for your text messages in international format (phone field)"):up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
306 reply:tag("field", {type='hidden', var='FORM_TYPE'}) |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
307 :tag("value"):text('jabber:iq:register'):up():up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
308 reply:tag("field", {type='text-single', label='Username', var='username'}) |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
309 :tag("required"):up():up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
310 reply:tag("field", {type='text-private', label='Password', var='password'}) |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
311 :tag("required"):up():up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
312 reply:tag("field", {type='text-single', label='API ID', var='api_id'}) |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
313 :tag("required"):up():up(); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
314 reply:tag("field", {type='text-single', label='Source Number', var='source_number'}) |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
315 :tag("required"):up():up(); |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
316 data_cache.registration_form = reply; |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
317 --module:log("info", "Register stanza to go: "..reply:pretty_print()); |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
318 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
319 reply.attr.id = stanza.attr.id; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
320 reply.attr.to = stanza.attr.from; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
321 origin.send(reply); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
322 elseif stanza.attr.type == "set" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
323 local from = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
324 from.node, from.host, from.resource = jid_split(stanza.attr.from); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
325 local bjid = from.node.."@"..from.host; |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
326 local username, password, api_id, source_number = "", "", "", ""; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
327 local reply; |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
328 for tag in stanza.tags[1].tags[1]:childtags() do |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
329 -- if tag.name == "remove" then |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
330 -- iq_success(origin, stanza); |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
331 -- return true; |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
332 -- end |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
333 if tag.attr.var == "username" then |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
334 username = tag.tags[1][1]; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
335 end |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
336 if tag.attr.var == "password" then |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
337 password = tag.tags[1][1]; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
338 end |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
339 if tag.attr.var == "api_id" then |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
340 api_id = tag.tags[1][1]; |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
341 end |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
342 if tag.attr.var == "source_number" then |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
343 source_number = tag.tags[1][1]; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
344 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
345 end |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
346 if username ~= nil and password ~= nil and api_id ~= nil then |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
347 users[bjid] = smsuser:register(bjid); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
348 users[bjid].data.username = username; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
349 users[bjid].data.password = password; |
347
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
350 users[bjid].data.api_id = api_id; |
cd838419a85d
mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
346
diff
changeset
|
351 users[bjid].data.source_number = source_number; |
346
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
352 users[bjid]:store(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
353 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
354 iq_success(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
355 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
356 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
357 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
358 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
359 -- XMPP Roster callback |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
360 -- When the client requests the roster associated with the gateway, returns |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
361 -- the users accessible via text to the client's roster |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
362 function iq_roster(stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
363 module:log("info", "Roster request triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
364 local from = {} |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
365 from.node, from.host, from.resource = jid_split(stanza.attr.from); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
366 local from_bjid = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
367 if from.node ~= nil and from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
368 from_bjid = from.node.."@"..from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
369 elseif from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
370 from_bjid = from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
371 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
372 local reply = st.iq({type='result', from=stanza.attr.to or component_host}):query("") |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
373 if users[from_bjid].data.roster ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
374 for sms_number, sms_data in pairs(users[from_bjid].data.roster) do |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
375 reply:tag("item", users[from_bjid]:roster_stanza_args(sms_number)):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
376 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
377 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
378 reply.attr.id = stanza.attr.id; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
379 reply.attr.to = stanza.attr.from; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
380 return reply; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
381 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
382 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
383 -- Roster Exchange: iq variant |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
384 -- Sends sms targets to client's roster |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
385 function iq_roster_push(origin, stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
386 module:log("info", "Sending Roster iq"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
387 local from = {} |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
388 from.node, from.host, from.resource = jid_split(stanza.attr.from); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
389 local from_bjid = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
390 if from.node ~= nil and from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
391 from_bjid = from.node.."@"..from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
392 elseif from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
393 from_bjid = from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
394 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
395 reply = st.iq({to=stanza.attr.from, type='set'}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
396 reply:tag("query", {xmlns="jabber:iq:roster"}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
397 if users[from_bjid].data.roster ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
398 for sms_number, sms_data in pairs(users[from_bjid].data.roster) do |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
399 reply:tag("item", users[from_bjid]:roster_stanza_args(sms_number)):up(); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
400 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
401 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
402 origin.send(reply); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
403 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
404 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
405 -- XMPP Presence handling |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
406 function presence_stanza_handler(origin, stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
407 module:log("info", "Presence handler triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
408 local to = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
409 local from = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
410 local pres = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
411 to.node, to.host, to.resource = jid_split(stanza.attr.to); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
412 from.node, from.host, from.resource = jid_split(stanza.attr.from); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
413 pres.type = stanza.attr.type; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
414 for _, tag in ipairs(stanza.tags) do pres[tag.name] = tag[1]; end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
415 local from_bjid = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
416 if from.node ~= nil and from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
417 from_bjid = from.node.."@"..from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
418 elseif from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
419 from_bjid = from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
420 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
421 local to_bjid = nil |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
422 if to.node ~= nil and to.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
423 to_bjid = to.node.."@"..to.host |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
424 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
425 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
426 if to.node == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
427 -- Component presence |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
428 -- If the client is subscribing, send a 'subscribed' presence |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
429 if pres.type == 'subscribe' then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
430 origin.send(st.presence({to=from_bjid, from=component_host, type='subscribed'})); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
431 --origin.send(st.presence{to=from_bjid, type='subscribed'}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
432 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
433 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
434 -- The component itself is online, so send component's presence |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
435 origin.send(st.presence({to=from_bjid, from=component_host})); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
436 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
437 -- Do roster item exchange: send roster items to client |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
438 iq_roster_push(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
439 else |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
440 -- SMS user presence |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
441 if pres.type == 'subscribe' then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
442 users[from_bjid]:roster_add(to.node); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
443 origin.send(st.presence({to=from_bjid, from=to_bjid, type='subscribed'})); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
444 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
445 if pres.type == 'unsubscribe' then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
446 users[from_bjid]:roster_update_subscription(to.node, 'none'); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
447 iq_roster_push(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
448 origin.send(st.presence({to=from_bjid, from=to_bjid, type='unsubscribed'})); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
449 users[from_bjid]:roster_delete(to.node) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
450 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
451 if users[from_bjid].data.roster[to.node] ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
452 origin.send(st.presence({to=from_bjid, from=to_bjid})); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
453 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
454 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
455 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
456 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
457 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
458 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
459 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
460 --[[ Not using this ATM |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
461 function confirm_message_delivery(event) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
462 local reply = st.message({id=event.stanza.attr.id, to=event.stanza.attr.from, from=event.stanza.attr.to or component_host}):tag("received", {xmlns = "urn:xmpp:receipts"}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
463 origin.send(reply); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
464 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
465 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
466 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
467 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
468 -- XMPP Message handler - this is the bit that Actually Does Things (TM) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
469 -- bjid = base JID i.e. without resource identifier |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
470 function message_stanza_handler(origin, stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
471 module:log("info", "Message handler triggered"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
472 local to = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
473 local from = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
474 local msg = {}; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
475 to.node, to.host, to.resource = jid_split(stanza.attr.to); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
476 from.node, from.host, from.resource = jid_split(stanza.attr.from); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
477 local bjid = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
478 if from.node ~= nil and from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
479 from_bjid = from.node.."@"..from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
480 elseif from.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
481 from_bjid = from.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
482 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
483 local to_bjid = nil; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
484 if to.node ~= nil and to.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
485 to_bjid = to.node.."@"..to.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
486 elseif to.host ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
487 to_bjid = to.host; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
488 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
489 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
490 -- This bit looks like it confirms message receipts to the client |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
491 for _, tag in ipairs(stanza.tags) do |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
492 msg[tag.name] = tag[1]; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
493 if tag.attr.xmlns == "urn:xmpp:receipts" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
494 confirm_message_delivery({origin=origin, stanza=stanza}); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
495 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
496 -- can handle more xmlns |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
497 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
498 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
499 -- Now parse the message |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
500 if stanza.attr.to == component_host then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
501 -- Messages directly to the component jget echoed |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
502 origin.send(st.message({to=stanza.attr.from, from=component_host, type='chat'}):tag("body"):text(msg.body):up()); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
503 elseif users[from_bjid].data.roster[to.node] ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
504 -- If message contains a body, send message to SMS Test User |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
505 if msg.body ~= nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
506 clickatell_send_sms(users[from_bjid], to.node, msg.body); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
507 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
508 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
509 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
510 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
511 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
512 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
513 -- Component event handler |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
514 function sms_event_handler(origin, stanza) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
515 module:log("debug", "Received stanza: "..stanza:pretty_print()); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
516 local to_node, to_host, to_resource = jid_split(stanza.attr.to); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
517 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
518 -- Handle component internals (stanzas directed to component host, mainly iq stanzas) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
519 if to_node == nil then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
520 local type = stanza.attr.type; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
521 if type == "error" or type == "result" then return; end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
522 if stanza.name == "presence" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
523 presence_stanza_handler(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
524 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
525 if stanza.name == "iq" and type == "get" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
526 local xmlns = stanza.tags[1].attr.xmlns |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
527 if xmlns == "http://jabber.org/protocol/disco#info" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
528 origin.send(iq_disco_info(stanza)); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
529 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
530 --[[ |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
531 elseif xmlns == "http://jabber.org/protocol/disco#items" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
532 origin.send(iq_disco_items(stanza)); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
533 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
534 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
535 elseif xmlns == "jabber:iq:register" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
536 iq_register(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
537 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
538 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
539 elseif stanza.name == "iq" and type == "set" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
540 local xmlns = stanza.tags[1].attr.xmlns |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
541 if xmlns == "jabber:iq:roster" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
542 origin.send(iq_roster(stanza)); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
543 elseif xmlns == "jabber:iq:register" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
544 iq_register(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
545 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
546 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
547 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
548 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
549 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
550 -- Handle presence (both component and SMS users) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
551 if stanza.name == "presence" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
552 presence_stanza_handler(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
553 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
554 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
555 -- Handle messages (both component and SMS users) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
556 if stanza.name == "message" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
557 message_stanza_handler(origin, stanza); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
558 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
559 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
560 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
561 -- Prosody hooks: links our handler functions with the relevant events |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
562 --module:hook("presence/host", presence_stanza_handler); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
563 --module:hook("message/host", message_stanza_handler); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
564 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
565 --module:hook("iq/host/jabber:iq:register:query", iq_register); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
566 module:add_feature("http://jabber.org/protocol/disco#info"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
567 module:add_feature("http://jabber.org/protocol/disco#items"); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
568 --module:hook("iq/self/http://jabber.org/protocol/disco#info:query", iq_disco_info); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
569 --module:hook("iq/host/http://jabber.org/protocol/disco#items:query", iq_disco_items); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
570 --module:hook("account-disco-info", iq_disco_info); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
571 --module:hook("account-disco-items", iq_disco_items); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
572 --[[ |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
573 module:hook("iq/host", function(data) |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
574 -- IQ to a local host recieved |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
575 local origin, stanza = data.origin, data.stanza; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
576 if stanza.attr.type == "get" or stanza.attr.type == "set" then |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
577 return module:fire_event("iq/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
578 else |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
579 module:fire_event("iq/host/"..stanza.attr.id, data); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
580 return true; |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
581 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
582 end); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
583 --]] |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
584 |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
585 -- Component registration hooks: these hook in with the Prosody component |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
586 -- manager |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
587 module.unload = function() |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
588 componentmanager.deregister_component(component_host); |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
589 end |
2e6a74842c00
mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff
changeset
|
590 component = componentmanager.register_component(component_host, sms_event_handler); |