Software / code / prosody
Comparison
plugins/mod_external_services.lua @ 11755:ae565e49289a
mod_external_services: Factor out public function returning current services
This way you get the _prepared_ services and don't have to do that mapping
yourself.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 30 Aug 2021 00:11:58 +0200 |
| parent | 11754:21a9b3f2a728 |
| child | 11756:a0e17b7c8b05 |
comparison
equal
deleted
inserted
replaced
| 11754:21a9b3f2a728 | 11755:ae565e49289a |
|---|---|
| 120 __newindex = function (self, i, v) | 120 __newindex = function (self, i, v) |
| 121 rawset(self, i, assert(prepare(v), "Invalid service entry added")); | 121 rawset(self, i, assert(prepare(v), "Invalid service entry added")); |
| 122 end; | 122 end; |
| 123 } | 123 } |
| 124 | 124 |
| 125 function get_services() | |
| 126 local extras = module:get_host_items("external_service"); | |
| 127 local services = ( configured_services + extras ) / prepare; | |
| 128 | |
| 129 setmetatable(services, services_mt); | |
| 130 | |
| 131 return services; | |
| 132 end | |
| 133 | |
| 125 local function handle_services(event) | 134 local function handle_services(event) |
| 126 local origin, stanza = event.origin, event.stanza; | 135 local origin, stanza = event.origin, event.stanza; |
| 127 local action = stanza.tags[1]; | 136 local action = stanza.tags[1]; |
| 128 | 137 |
| 129 local user_bare = jid.bare(stanza.attr.from); | 138 local user_bare = jid.bare(stanza.attr.from); |
| 132 origin.send(st.error_reply(stanza, "auth", "forbidden")); | 141 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
| 133 return true; | 142 return true; |
| 134 end | 143 end |
| 135 | 144 |
| 136 local reply = st.reply(stanza):tag("services", { xmlns = action.attr.xmlns }); | 145 local reply = st.reply(stanza):tag("services", { xmlns = action.attr.xmlns }); |
| 137 local extras = module:get_host_items("external_service"); | 146 local services = get_services(); |
| 138 local services = ( configured_services + extras ) / prepare; | |
| 139 | 147 |
| 140 local requested_type = action.attr.type; | 148 local requested_type = action.attr.type; |
| 141 if requested_type then | 149 if requested_type then |
| 142 services:filter(function(item) | 150 services:filter(function(item) |
| 143 return item.type == requested_type; | 151 return item.type == requested_type; |
| 144 end); | 152 end); |
| 145 end | 153 end |
| 146 | |
| 147 setmetatable(services, services_mt); | |
| 148 | 154 |
| 149 module:fire_event("external_service/services", { | 155 module:fire_event("external_service/services", { |
| 150 origin = origin; | 156 origin = origin; |
| 151 stanza = stanza; | 157 stanza = stanza; |
| 152 reply = reply; | 158 reply = reply; |
| 179 origin.send(st.error_reply(stanza, "auth", "forbidden", "The 'port' and 'type' attributes are required.")); | 185 origin.send(st.error_reply(stanza, "auth", "forbidden", "The 'port' and 'type' attributes are required.")); |
| 180 return true; | 186 return true; |
| 181 end | 187 end |
| 182 | 188 |
| 183 local reply = st.reply(stanza):tag("credentials", { xmlns = action.attr.xmlns }); | 189 local reply = st.reply(stanza):tag("credentials", { xmlns = action.attr.xmlns }); |
| 184 local extras = module:get_host_items("external_service"); | 190 local services = get_services(); |
| 185 local services = ( configured_services + extras ) / prepare; | |
| 186 services:filter(function (item) | 191 services:filter(function (item) |
| 187 return item.restricted; | 192 return item.restricted; |
| 188 end) | 193 end) |
| 189 | 194 |
| 190 local requested_credentials = set.new(); | 195 local requested_credentials = set.new(); |
| 195 end | 200 end |
| 196 | 201 |
| 197 requested_credentials:add(string.format("%s:%s:%d", service.attr.type, service.attr.host, | 202 requested_credentials:add(string.format("%s:%s:%d", service.attr.type, service.attr.host, |
| 198 tonumber(service.attr.port) or 0)); | 203 tonumber(service.attr.port) or 0)); |
| 199 end | 204 end |
| 200 | |
| 201 setmetatable(services, services_mt); | |
| 202 | 205 |
| 203 module:fire_event("external_service/credentials", { | 206 module:fire_event("external_service/credentials", { |
| 204 origin = origin; | 207 origin = origin; |
| 205 stanza = stanza; | 208 stanza = stanza; |
| 206 reply = reply; | 209 reply = reply; |