annotate mod_sms_clickatell/mod_sms_clickatell.lua @ 4651:8231774f5bfd

mod_cloud_notify_encrypted: Ensure body substring remains valid UTF-8 The `body:sub()` call risks splitting the string in the middle of a multi-byte UTF-8 sequence. This should have been caught by util.stanza validation, but that would have caused some havoc, at the very least causing the notification to not be sent. There have been no reports of this happening. Likely because this module isn't widely deployed among users with languages that use many longer UTF-8 sequences. The util.encodings.utf8.valid() function is O(n) where only the last sequence really needs to be checked, but it's in C and expected to be fast.
author Kim Alvefur <zash@zash.se>
date Sun, 22 Aug 2021 13:22:59 +0200
parents e8d6f602f382
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
4 -- Clickatell gateway's HTTP API
346
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 datamanager = require "util.datamanager";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
39 local timer = require "util.timer";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
40 local config_get = require "core.configmanager".get;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
41 local http = require "net.http";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
42 local base64 = require "util.encodings".base64;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
43 local serialize = require "util.serialization".serialize;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
44 local pairs, ipairs = pairs, ipairs;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
45 local setmetatable = setmetatable;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
46
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
47 local component_host = module:get_host();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
48 local component_name = module.name;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
49 local data_cache = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
50
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
51 --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
52 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
53 --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
54
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
55 --local users = setmetatable({}, {__mode="k"});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
56
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
57 -- User data is held in smsuser objects
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
58 local smsuser = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
59 smsuser.__index = smsuser;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
60
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
61 -- 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
62 -- 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
63 -- 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
64 local users = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
65 setmetatable(users, { __index = function (table, key)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
66 return smsuser:register(key);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
67 end });
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
68
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
69 -- Create a new smsuser object
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
70 function smsuser:new()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
71 newuser = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
72 setmetatable(newuser, self);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
73 return newuser;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
74 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
75
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
76 -- Store (save) the user object
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
77 function smsuser:store()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
78 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
79 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
80
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
81 -- For debug
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
82 function smsuser:logjid()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
83 module:log("logjid: ", self.jid);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
84 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
85
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
86 -- 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
87 -- 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
88 function smsuser:register(bjid)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
89 reguser = smsuser:new();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
90 reguser.jid = bjid;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
91 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
92 return reguser;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
93 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
94
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
95 -- Add a roster entry for the user
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
96 -- 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
97 function smsuser:roster_add(sms_number)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
98 if self.data.roster == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
99 self.data.roster = {}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
100 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
101 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
102 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
103 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
104 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
105 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
106
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
107 -- 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
108 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
109 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
110 smsuser:roster_add(sms_number);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
111 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
112 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
113 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
114 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
115
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
116 -- 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
117 function smsuser:roster_update_subscription(sms_number, subscription)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
118 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
119 smsuser:roster_add(sms_number);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
120 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
121 self.data.roster[sms_number].subscription = subscription;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
122 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
123 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
124
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
125 -- Delete an entry from the roster
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
126 function smsuser:roster_delete(sms_number)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
127 self.data.roster[sms_number] = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
128 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
129 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
130
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 function smsuser:roster_stanza_args(sms_number)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
133 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
134 return nil
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
135 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
136 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
137 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
138 args.subscription = self.data.roster[sms_number].subscription
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
139 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
140 return args
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
141 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
142
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
143 --[[ 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
144 function send_stanza(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
145 if stanza ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
146 core_route_stanza(prosody.hosts[component_host], stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
147 end
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
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
150 function dmsg(jid, msg)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
151 module:log("debug", msg or "nil");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
152 if jid ~= nil then
2887
65082d91950e Many modules: Simplify st.message(…):tag("body"):text(…):up() into st.message(…, …)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2874
diff changeset
153 send_stanza(st.message({to=jid, from=component_host, type='chat'}, msg or "nil"));
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
154 end
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
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
157 function substring(string, start_string, ending_string)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
158 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
159 if start_string ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
160 _, s_value_start = string:find(start_string);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
161 if s_value_start == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
162 -- error
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
163 return nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
164 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
165 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
166 return nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
167 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
168 if ending_string ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
169 _, 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
170 if s_value_finish == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
171 -- error
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
172 return nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
173 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
174 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
175 s_value_finish = string:len()+1;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
176 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
177 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
178 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
179 --]]
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 local http_timeout = 30;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
182 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
183 data_cache['prosody_os'] = prosody.platform;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
184 data_cache['prosody_version'] = prosody.version;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
185 local http_headers = {
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
186 ["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
187 };
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 function http_action_callback(response, code, request, xcallback)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
190 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
191 local id = http_queue[request];
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
192 http_queue[request] = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
193 if xcallback == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
194 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
195 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
196 xcallback(id, response, request);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
197 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
198 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
199 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
200
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
201 function http_add_action(tid, url, method, post, fcallback)
983
ac9bf3fcbcfe mod_pubsub_feeds, mod_sms_clickatell, mod_twitter: Update for net.http API change in prosody:e3b9dc9dd940
Matthew Wild <mwild1@gmail.com>
parents: 347
diff changeset
202 local request = http.request(url, { headers = http_headers or {}, body = "", method = method or "GET" }, function(response_body, code, response, request) http_action_callback(response_body, code, request, fcallback) end);
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
203 http_queue[request] = tid;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
204 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
205 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
206 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
207
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
208 -- Clickatell SMS HTTP API interaction function
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
209 function clickatell_send_sms(user, number, message)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
210 module.log("info", "Clickatell API interaction function triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
211 -- 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
212 if message == nil or message == "" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
213 return false;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
214 end
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
215
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
216 local sms_message = sms_message_prefix..message;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
217 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
218 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
219 local query_string = "";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
220
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
221 for param, data in pairs(params) do
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
222 --module:log("info", "Inside query constructor: "..param..data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
223 if query_string ~= "" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
224 query_string = query_string.."&";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
225 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
226 query_string = query_string..param.."="..http.urlencode(data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
227 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
228 local url = clickatell_base_url.."?"..query_string;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
229 module:log("info", "Clickatell SMS URL: "..url);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
230 http_add_action(message, url, "GET", params, nil);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
231 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
232 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
233
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
234 function iq_success(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
235 local reply = data_cache.success;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
236 if reply == nil then
3353
e8d6f602f382 mod_password_reset: Improve error reporting when setting a password fails
Matthew Wild <mwild1@gmail.com>
parents: 2887
diff changeset
237 reply = st.reply(stanza);
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
238 data_cache.success = reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
239 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
240 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
241 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
242 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
243 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
244 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
245
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
246 -- XMPP Service Discovery (disco) info callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
247 -- 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
248 -- information as per XEP-0030
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
249 function iq_disco_info(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
250 module:log("info", "Disco info triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
251 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
252 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
253 local bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
254 local reply = data_cache.disco_info;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
255 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
256 --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
257 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
258 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
259 reply:tag("feature", {var="urn:xmpp:receipts"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
260 reply:tag("feature", {var="jabber:iq:register"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
261 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
262 --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
263 --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
264 --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
265 data_cache.disco_info = reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
266 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
267 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
268 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
269 return reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
270 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
271
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
272 -- XMPP Service Discovery (disco) items callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
273 -- 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
274 -- information as per XEP-0030
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
275 -- (Nothing much happening here at the moment)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
276 --[[
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
277 function iq_disco_items(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
278 module:log("info", "Disco items triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
279 local reply = data_cache.disco_items;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
280 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
281 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
282 :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
283 data_cache.disco_items = reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
284 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
285 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
286 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
287 return reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
288 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
289 --]]
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 -- XMPP Register callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
292 -- The client must register with the gateway. In this case, the gateway is
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
293 -- Clickatell's http api, so we
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
294 function iq_register(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
295 module:log("info", "Register event triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
296 if stanza.attr.type == "get" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
297 local reply = data_cache.registration_form;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
298 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
299 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
300 :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
301 :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
302 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
303 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
304 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
305 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
306 :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
307 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
308 :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
309 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
310 :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
311 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
312 :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
313 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
314 :tag("required"):up():up();
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
315 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
316 --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
317 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
318 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
319 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
320 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
321 elseif stanza.attr.type == "set" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
322 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
323 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
324 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
325 local username, password, api_id, source_number = "", "", "", "";
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
326 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
327 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
328 -- 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
329 -- 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
330 -- 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
331 -- 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
332 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
333 username = tag.tags[1][1];
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
334 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
335 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
336 password = tag.tags[1][1];
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
337 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
338 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
339 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
340 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
341 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
342 source_number = tag.tags[1][1];
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
343 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
344 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
345 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
346 users[bjid] = smsuser:register(bjid);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
347 users[bjid].data.username = username;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
348 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
349 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
350 users[bjid].data.source_number = source_number;
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
351 users[bjid]:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
352 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
353 iq_success(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
354 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
355 end
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
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
358 -- XMPP Roster callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
359 -- 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
360 -- 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
361 function iq_roster(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
362 module:log("info", "Roster request triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
363 local from = {}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
364 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
365 local from_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
366 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
367 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
368 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
369 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
370 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
371 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
372 if users[from_bjid].data.roster ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
373 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
374 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
375 end
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 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
378 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
379 return reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
380 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
381
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
382 -- Roster Exchange: iq variant
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
383 -- Sends sms targets to client's roster
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
384 function iq_roster_push(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
385 module:log("info", "Sending Roster iq");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
386 local from = {}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
387 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
388 local from_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
389 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
390 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
391 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
392 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
393 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
394 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
395 reply:tag("query", {xmlns="jabber:iq:roster"});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
396 if users[from_bjid].data.roster ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
397 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
398 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
399 end
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 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
402 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
403
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
404 -- XMPP Presence handling
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
405 function presence_stanza_handler(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
406 module:log("info", "Presence handler triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
407 local to = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
408 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
409 local pres = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
410 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
411 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
412 pres.type = stanza.attr.type;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
413 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
414 local from_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
415 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
416 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
417 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
418 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
419 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
420 local to_bjid = nil
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
421 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
422 to_bjid = to.node.."@"..to.host
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
423 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
424
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
425 if to.node == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
426 -- Component presence
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
427 -- 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
428 if pres.type == 'subscribe' then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
429 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
430 --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
431 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
432
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
433 -- 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
434 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
435
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
436 -- 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
437 iq_roster_push(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
438 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
439 -- SMS user presence
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
440 if pres.type == 'subscribe' then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
441 users[from_bjid]:roster_add(to.node);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
442 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
443 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
444 if pres.type == 'unsubscribe' then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
445 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
446 iq_roster_push(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
447 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
448 users[from_bjid]:roster_delete(to.node)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
449 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
450 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
451 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
452 end
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
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
455
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
456 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
457 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
458
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
459 --[[ Not using this ATM
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
460 function confirm_message_delivery(event)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
461 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
462 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
463 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
464 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
465 --]]
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 -- 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
468 -- bjid = base JID i.e. without resource identifier
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
469 function message_stanza_handler(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
470 module:log("info", "Message handler triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
471 local to = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
472 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
473 local msg = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
474 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
475 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
476 local bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
477 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
478 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
479 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
480 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
481 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
482 local to_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
483 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
484 to_bjid = to.node.."@"..to.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
485 elseif to.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
486 to_bjid = to.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
487 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
488
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
489 -- 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
490 for _, tag in ipairs(stanza.tags) do
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
491 msg[tag.name] = tag[1];
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
492 if tag.attr.xmlns == "urn:xmpp:receipts" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
493 confirm_message_delivery({origin=origin, stanza=stanza});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
494 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
495 -- can handle more xmlns
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
496 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
497
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
498 -- Now parse the message
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
499 if stanza.attr.to == component_host then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
500 -- Messages directly to the component jget echoed
2887
65082d91950e Many modules: Simplify st.message(…):tag("body"):text(…):up() into st.message(…, …)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2874
diff changeset
501 origin.send(st.message({to=stanza.attr.from, from=component_host, type='chat'}, msg.body));
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
502 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
503 -- 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
504 if msg.body ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
505 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
506 end
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 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
509 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
510 --]]
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 -- Component event handler
2448
1f7f66272f73 mod_sms_clickatell: Fix event handler signature (fixes #814)
Kim Alvefur <zash@zash.se>
parents: 1343
diff changeset
513 function sms_event_handler(event)
1f7f66272f73 mod_sms_clickatell: Fix event handler signature (fixes #814)
Kim Alvefur <zash@zash.se>
parents: 1343
diff changeset
514 local origin, stanza = event.origin, event.stanza;
346
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);
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
517
346
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
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
549
346
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
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
554
346
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)
2874
178b8abf8283 mod_sms_clickatell: Fix typo in comment [codespell]
Kim Alvefur <zash@zash.se>
parents: 2448
diff changeset
574 -- IQ to a local host received
346
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
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1321
diff changeset
586 -- manager
1321
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
587 module:hook("iq/bare", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
588 module:hook("message/bare", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
589 module:hook("presence/bare", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
590 module:hook("iq/full", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
591 module:hook("message/full", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
592 module:hook("presence/full", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
593 module:hook("iq/host", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
594 module:hook("message/host", sms_event_handler);
3fd6579d60cc mod_sms_clickatell: Get rid of legacy componentmanager usage. Now uses stanza events.
Waqas Hussain <waqas20@gmail.com>
parents: 983
diff changeset
595 module:hook("presence/host", sms_event_handler);