Software /
code /
prosody-modules
File
mod_http_avatar/mod_http_avatar.lua @ 5585:5b316088bef5
mod_rest: Use logger of HTTP request in trunk
In Prosody trunk rev c975dafa4303 each HTTP request gained its own log
sink, to make it easy to log things related to each request and group
those messages. Especially where async is used, spreading the request
and response apart as mod_rest does with iq stanzas, this grouped
logging should help find related messages.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 07 Jul 2023 00:10:37 +0200 |
parent | 3084:5b4e7db5943c |
child | 5743:0f103a6e9ba4 |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2018 Emmanuel Gil Peyrot -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. local base64 = require"util.encodings".base64; local sha1 = require"util.hashes".sha1; local st = require"util.stanza"; module:depends"http"; local vcard_storage = module:open_store"vcard"; local default_avatar = [[<svg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 150 150'> <rect width='150' height='150' fill='#888' stroke-width='1' stroke='#000'/> <text x='75' y='100' text-anchor='middle' font-size='100'>?</text> </svg>]]; local function get_avatar(event, path) local request, response = event.request, event.response; local photo_type, binval; local vcard, err = vcard_storage:get(path); if vcard then vcard = st.deserialize(vcard); local photo = vcard:get_child("PHOTO", "vcard-temp"); if photo then photo_type = photo:get_child_text("TYPE", "vcard-temp"); binval = photo:get_child_text("BINVAL", "vcard-temp"); end end if not photo_type or not binval then response.status_code = 404; response.headers.content_type = "image/svg+xml"; return default_avatar; end local avatar = base64.decode(binval); local hash = sha1(avatar, true); if request.headers.if_none_match == hash then return 304; end response.headers.content_type = photo_type; response.headers.etag = hash; return avatar; end module:provides("http", { route = { ["GET /*"] = get_avatar; }; });