Mercurial > prosody-modules
annotate mod_voipms/mod_voipms.lua @ 6319:04c3273cb81f
mod_auth_cyrus: Add empty 'profile' table to SASL handler objects
This is for compatibility with Prosody's built-in util.sasl objects.
A SASL profile table usually includes methods supported by the backend, which
can be used by SASL mechanism handlers to perform operations (such as testing
the password). It also optionally contains a 'cb' field with channel binding
method handlers.
The Cyrus backend doesn't support channel binding, and doesn't have the same
concept of auth backend methods (it handles all that internally, and Prosody
has no insight or control over it).
Thus, we create an empty profile which informs Prosody that the SASL handler
does not support any of the auth or channel binding methods. Some features
will not work, but they didn't work anyway. This just makes it explicit.
This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to
always contain a 'profile' field.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 04 Sep 2025 10:14:46 +0100 |
| parents | 8f2de6652930 |
| children | fa976338928c |
| rev | line source |
|---|---|
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
1 local http = require "net.http" |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
2 local json = require "util.json" |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
3 local st = require "util.stanza" |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
4 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
5 local api_username = module:get_option_string("voipms_api_username") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
6 local api_password = module:get_option_string("voipms_api_password") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
7 local query_key = module:get_option("voipms_query_key") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
8 local jid_map = module:get_option("voipms_jid_map") or {} |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
9 local rest_endpoint = "https://voip.ms/api/v1/rest.php" |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
10 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
11 if not api_username or not api_password or not query_key then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
12 module:log("error", "Missing required config values (voipms_api_username, voipms_api_password, voipms_query_key)") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
13 return |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
14 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
15 |
| 6300 | 16 for jid, dids in pairs(jid_map) do |
| 17 if type(dids) ~= "table" then | |
| 18 module:log("error", "Invalid voipms_jid_map entry for %s: must be a list of DIDs", jid) | |
| 19 return | |
| 20 end | |
| 21 end | |
| 22 | |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
23 module:depends("http") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
24 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
25 local function normalize_number(num) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
26 if not num then return nil end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
27 if num:sub(1, 1) ~= "+" then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
28 return "+1" .. num |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
29 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
30 return num |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
31 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
32 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
33 local function extract_query_key(event) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
34 return (event.request.url.query or ""):match("key=([^&]+)") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
35 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
36 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
37 module:provides("http", { |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
38 route = { |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
39 ["POST"] = function(event) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
40 local req = event.request |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
41 local body = req.body or "" |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
42 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
43 if extract_query_key(event) ~= query_key then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
44 module:log("warn", "Unauthorized webhook: missing or invalid key") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
45 return { status_code = 403 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
46 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
47 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
48 local json_payload, err = json.decode(body) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
49 if not json_payload then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
50 module:log("warn", "Invalid JSON: %s", err or "unknown error") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
51 return { status_code = 400 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
52 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
53 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
54 local payload = json_payload.data and json_payload.data.payload |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
55 if not payload then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
56 module:log("warn", "Missing payload in JSON") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
57 return { status_code = 400 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
58 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
59 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
60 local from = payload.from and payload.from.phone_number |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
61 local to_list = payload.to or {} |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
62 local to = #to_list > 0 and to_list[1].phone_number or nil |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
63 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
64 if not from or not to then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
65 module:log("warn", "Missing phone numbers (from: %s, to: %s)", tostring(from), tostring(to)) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
66 return { status_code = 400 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
67 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
68 |
| 6300 | 69 local normalized_from = normalize_number(from) |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
70 local normalized_to = normalize_number(to) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
71 local target_jid = nil |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
72 |
| 6300 | 73 for jid, dids in pairs(jid_map) do |
| 74 for _, did in ipairs(dids) do | |
| 75 if normalize_number(did) == normalized_to then | |
| 76 target_jid = jid | |
| 77 break | |
| 78 end | |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
79 end |
| 6300 | 80 if target_jid then break end |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
81 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
82 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
83 if not target_jid then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
84 module:log("warn", "No JID mapping for DID %s", normalized_to) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
85 return { status_code = 404 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
86 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
87 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
88 local message_text = payload.text or "" |
| 6300 | 89 local from_jid = normalized_from .. "%" .. normalized_to .. "@" .. module.host |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
90 |
| 6300 | 91 if message_text ~= "" then |
| 92 local text_message = st.message({ | |
| 93 from = from_jid, | |
| 94 to = target_jid, | |
| 95 type = "chat" | |
| 96 }):tag("body"):text(message_text):up() | |
| 97 | |
| 98 module:send(text_message) | |
| 99 module:log("info", "Delivered text SMS from %s to %s", normalized_from, target_jid) | |
| 100 end | |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
101 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
102 if payload.media and #payload.media > 0 then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
103 for _, media_item in ipairs(payload.media) do |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
104 if media_item.url then |
| 6300 | 105 local media_message = st.message({ |
| 106 from = from_jid, | |
| 107 to = target_jid, | |
| 108 type = "chat" | |
| 109 }) | |
| 110 :tag("body"):text(media_item.url):up() | |
| 111 :tag("x", { xmlns = "jabber:x:oob" }) | |
| 112 :tag("url"):text(media_item.url):up() | |
| 113 :up() | |
| 114 | |
| 115 module:send(media_message) | |
| 116 module:log("info", "Delivered media URL from %s to %s: %s", normalized_from, target_jid, media_item.url) | |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
117 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
118 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
119 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
120 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
121 return { status_code = 204 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
122 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
123 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
124 }) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
125 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
126 module:hook("message/bare", function(event) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
127 local stanza = event.stanza |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
128 if stanza.attr.type ~= "chat" then return end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
129 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
130 local from_jid = stanza.attr.from |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
131 local to_jid = stanza.attr.to |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
132 local body = stanza:get_child_text("body") |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
133 if not body or body == "" then return end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
134 |
| 6300 | 135 local to_node = to_jid:match("^(.-)@") |
| 136 if not to_node then | |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
137 module:log("warn", "Malformed JID in message.to: %s", to_jid) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
138 return |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
139 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
140 |
| 6300 | 141 local dst_number, from_number = to_node:match("([^%%]+)%%(.+)") |
| 142 if not dst_number or not from_number then | |
| 143 module:log("warn", "Malformed to JID node: %s", to_node) | |
| 144 return | |
| 145 end | |
| 146 | |
| 147 dst_number = normalize_number(dst_number) | |
| 148 from_number = normalize_number(from_number) | |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
149 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
150 local media_urls = {} |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
151 for line in body:gmatch("[^\r\n]+") do |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
152 if line:match("^https?://") then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
153 table.insert(media_urls, line) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
154 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
155 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
156 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
157 local method = (#media_urls > 0) and "sendMMS" or "sendSMS" |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
158 local query = { |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
159 api_username = api_username, |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
160 api_password = api_password, |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
161 method = method, |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
162 did = from_number, |
| 6300 | 163 dst = dst_number, |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
164 message = body |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
165 } |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
166 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
167 if method == "sendMMS" then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
168 for i, url in ipairs(media_urls) do |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
169 query["media_url[" .. (i - 1) .. "]"] = url |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
170 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
171 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
172 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
173 local query_str = http.formencode(query) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
174 |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
175 http.request(rest_endpoint .. "?" .. query_str, { |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
176 method = "GET"; |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
177 }, function(response_body, code) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
178 if code == 200 then |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
179 local resp, err = json.decode(response_body) |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
180 if not resp or resp.status ~= "success" then |
|
6316
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
181 local err_msg = string.format("Failed to send %s: %s", method, err or (resp and resp.status) or "unknown") |
|
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
182 module:log("error", "%s", err_msg) |
|
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
183 local err_reply = st.error_reply(stanza, "cancel", "remote-server-error", err_msg) |
|
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
184 module:send(err_reply) |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
185 else |
| 6300 | 186 module:log("info", "Sent %s from %s to %s", method, from_number, dst_number) |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
187 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
188 else |
|
6316
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
189 local err_msg = string.format("HTTP error sending %s: code %s", method, tostring(code)) |
|
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
190 module:log("error", "%s", err_msg) |
|
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
191 local err_reply = st.error_reply(stanza, "cancel", "remote-server-error", err_msg) |
|
8f2de6652930
mod_voipms: Send client error messages in additon to logging
Chaz Kettleson <chaz@pyr3x.com>
parents:
6307
diff
changeset
|
192 module:send(err_reply) |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
193 end |
|
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
194 end) |
|
6307
c194bec4b56d
mod_voipms: Fix bug from not returning in message/bare hook
Chaz Kettleson <chaz@pyr3x.com>
parents:
6300
diff
changeset
|
195 |
|
c194bec4b56d
mod_voipms: Fix bug from not returning in message/bare hook
Chaz Kettleson <chaz@pyr3x.com>
parents:
6300
diff
changeset
|
196 return true |
|
6299
5cf5ee23b361
mod_voipms: New Module to send and receive SMS/MMS via VoIP.ms APIs.
Chaz <menel@snikket.de>
parents:
diff
changeset
|
197 end) |
