Mercurial > prosody-modules
comparison mod_pubsub_feeds/mod_pubsub_feeds.lua @ 3047:7c55f05327a2
mod_pubsub_feeds: Use ETag instead of problematic If-Modified-Since
Because it set If-Modified-Since to the last poll time instead of the
exact value of Last-Modified in the last response, it would not work
with some HTTP servers.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 27 May 2018 15:51:05 +0200 |
| parents | cae371544ff5 |
| children | fe4194f10c75 |
comparison
equal
deleted
inserted
replaced
| 3046:d0db28768980 | 3047:7c55f05327a2 |
|---|---|
| 13 -- Reference | 13 -- Reference |
| 14 -- http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.4.html | 14 -- http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.4.html |
| 15 | 15 |
| 16 local pubsub = module:depends"pubsub"; | 16 local pubsub = module:depends"pubsub"; |
| 17 | 17 |
| 18 local date, time = os.date, os.time; | 18 local time = os.time; |
| 19 local dt_parse, dt_datetime = require "util.datetime".parse, require "util.datetime".datetime; | 19 local dt_parse, dt_datetime = require "util.datetime".parse, require "util.datetime".datetime; |
| 20 local uuid = require "util.uuid".generate; | 20 local uuid = require "util.uuid".generate; |
| 21 local hmac_sha1 = require "util.hashes".hmac_sha1; | 21 local hmac_sha1 = require "util.hashes".hmac_sha1; |
| 22 local parse_xml = require "util.xml".parse; | 22 local parse_xml = require "util.xml".parse; |
| 23 local st = require "util.stanza"; | 23 local st = require "util.stanza"; |
| 145 end | 145 end |
| 146 end | 146 end |
| 147 | 147 |
| 148 function fetch(item, callback) -- HTTP Pull | 148 function fetch(item, callback) -- HTTP Pull |
| 149 local headers = { }; | 149 local headers = { }; |
| 150 if item.data and item.last_update then | 150 if item.data and item.etag then |
| 151 headers["If-Modified-Since"] = date("!%a, %d %b %Y %H:%M:%S %Z", item.last_update); | 151 headers["If-None-Match"] = item.etag; |
| 152 end | 152 end |
| 153 http.request(item.url, { headers = headers }, function(data, code) | 153 http.request(item.url, { headers = headers }, function(data, code, resp) |
| 154 if code == 200 then | 154 if code == 200 then |
| 155 item.data = data; | 155 item.data = data; |
| 156 if callback then callback(item) end | 156 if callback then callback(item) end |
| 157 item.last_update = time(); | 157 item.last_update = time(); |
| 158 if resp.headers then | |
| 159 item.etag = resp.headers.etag | |
| 160 end | |
| 158 elseif code == 304 then | 161 elseif code == 304 then |
| 159 item.last_update = time(); | 162 item.last_update = time(); |
| 160 end | 163 end |
| 161 end); | 164 end); |
| 162 end | 165 end |
