fec7d62acb
LibreSign had been silently broken since it was first deployed in January. Every step of the old before-starting hook ended in `|| echo`, so six months of failures logged nothing. LibreSign repair - Root cause was a stale config_path: a valid OpenSSL root CA existed at generation 1, a failed CFSSL attempt left an empty generation 2, and config_path was left pointing at the empty one. Regenerated as "Skudak LLP" (was the pre-rename "Skudak Rennsport LLP"). - Deleted the hook. Java/PDFtk/jSignPdf live under data/appdata_*, a persisted volume, so they only ever needed installing once. Install and verification are now explicit tasks that actually fail. - PHP_MEMORY_LIMIT 1024M -- the 512M image default fails opaquely mid-signature. LC_ALL/LANG so the JVM is not ANSI_X3.4-1968. - signature_render_mode=GRAPHIC_ONLY. Any other mode halves the stamp width and overlays a name/date block that collides with the drawn mark and duplicates what our documents already typeset. The value must be exactly GRAPHIC_ONLY; a bare "GRAPHIC" is accepted by occ, matches no radio in the UI, and silently reverts to default. - write_qrcode_on_footer=false, written with --type=boolean because FooterHandler reads it via getValueBool and the typed appconfig API does not coerce a string "0". The validation URL text is kept. - identification_documents=0 -- the default gates signing behind an ID upload plus admin approval, so signers saw no way to sign. - shareapi_restrict_user_enumeration_full_match=no, so an email owned by an existing account can be added as a signer. Root cause is in core (MailPlugin.php:163), not LibreSign. Do NOT set full_match_email=no -- that disables email signer search entirely. Mail branding (skudakmail app) - Two supported extension points, no core patch and no LibreSign fork: mail_template_class for layout, subjects, button labels and the footer LibreSign never adds; and a BeforeMessageSent listener to embed the wordmark as a cid: part so it survives remote-image blocking. - A third listener adds scoped CSS fixing the signing page being clipped on iOS Safari (100vh -> 100dvh). Patched upstream too. - skudakmail-verify.php.j2 asserts all of the above through the real useTemplate() path and fails the play on drift. Every assertion was proven to fail when deliberately regressed. Redis - memcache.locking was unset, so Nextcloud used DBLockingProvider and every file lock became a MariaDB write -- the contention behind the intermittent multi-second stalls. Verified after: db locks static, redis keys growing. - requirepass lives in a mounted 0640 conf, not --requirepass, which would leak it into podman inspect, the systemd unit and ps. The file is chowned to uid 999 because redis-server does not run as root and the :ro mount stops the image fixing it itself. - No maxmemory: cache is evictable, locks are NOT, and evicting a held lock permits concurrent writers to one file. No persistence either -- a restored RDB could reinstate locks whose owner is long dead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
45 lines
2.1 KiB
XML
45 lines
2.1 KiB
XML
<?xml version="1.0"?>
|
|
<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
|
|
<id>skudakmail</id>
|
|
<name>Skudak Customisations</name>
|
|
<summary>Skudak-branded email templates and UI overrides for Nextcloud and LibreSign</summary>
|
|
<description><![CDATA[
|
|
Restyles outgoing Nextcloud and LibreSign mail to match the Skudak design
|
|
system at ~/src/skudak/skudak-site. Two supported extension points, no core
|
|
patch and no LibreSign fork:
|
|
|
|
1. `OCA\Skudakmail\Mail\SkudakEMailTemplate` extends Nextcloud's EMailTemplate
|
|
and is wired in via the `mail_template_class` system config value, which
|
|
Nextcloud checks in `lib/private/Mail/Mailer.php::createEMailTemplate()`.
|
|
It owns layout, typography, subject rewriting, button labels and the
|
|
footer LibreSign never adds.
|
|
|
|
2. `OCA\Skudakmail\Listener\SkudakMailListener` listens on
|
|
`OCP\Mail\Events\BeforeMessageSent` to embed the wordmark as an inline
|
|
(cid:) MIME part, so the logo survives the remote-image blocking that
|
|
Apple Mail, Gmail and Outlook apply by default. This cannot be done from
|
|
the template class, which has no reference to the message.
|
|
|
|
3. `OCA\Skudakmail\Listener\SkudakStyleListener` listens on
|
|
`OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent` and adds
|
|
css/libresign-mobile.css, which fixes the LibreSign public signing page
|
|
being clipped at the bottom on iOS Safari. Serving it from here rather
|
|
than patching LibreSign keeps the app's integrity signature intact and
|
|
survives app updates, which wipe the app directory.
|
|
|
|
The app has no routes, no UI, no settings and no database tables. The id
|
|
remains `skudakmail` for historical reasons -- it is referenced by the
|
|
`mail_template_class` system config -- but its scope is Skudak-wide
|
|
customisation, not mail alone.
|
|
]]></description>
|
|
<version>1.0.0</version>
|
|
<licence>agpl</licence>
|
|
<author>Skudak LLP</author>
|
|
<namespace>Skudakmail</namespace>
|
|
<category>customization</category>
|
|
<dependencies>
|
|
<nextcloud min-version="34" max-version="34"/>
|
|
</dependencies>
|
|
</info>
|