Commit Graph

1374 Commits

Author SHA1 Message Date
a807693187 case 4719 - report templates no longer hold the renderer's token or download key
The report page gets placeholders for the token and download key; request
interception (ReportApiRelay, now in every kind of install) puts the real
values only on the page's requests to ayApiUrl, then relays them (IIS) or
lets the browser continue. Requests to other addresses go out unchanged,
without credentials. Notification reports keep their rights. Report
scripting manual and changelog updated. F20 fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 20:04:55 -07:00
a6447ecb37 case 4632 - reports render under IIS: the report page's API calls are relayed by the server
Inside IIS (in-process) AyaNova has no port of its own, so the report page
could not reach the API: user reports called http://127.0.0.1:<request port>
(reset on https), notification reports 127.0.0.1:7575 (refused). Under IIS the
page's requests under the API URL are now intercepted and made by the server
(util/ReportApiRelay.cs) to the local address and port a user's request
arrived on, with its host name and scheme; notification reports use the
latest signed-in request, else the override. Outside IIS nothing changes.
The notification token check requires a request from this machine, no longer
host 127.0.0.1. Manual (IIS install, override page) and changelog updated.
Deferred: emailed PDF content type application/pdf/pdf.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:04:24 -07:00
c04de33af2 case 4732 - trusted reverse proxies setting
New config setting AYANOVA_TRUSTED_PROXIES (IP addresses or CIDR networks)
for reverse proxies on another computer: their X-Forwarded-For is used, a
chain of trusted proxies is followed, invalid entries are warned at boot.
X-Forwarded-For from a proxy that is not trusted logs one warning per server
start naming the proxy's address. Without the setting nothing changes (only
a loopback proxy is trusted). Shown in server info; manual page, Linux install
note, changelog. F6 follow-up recorded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:58:01 -07:00
d8be701bcd case 4726 - login lockout per login name and per address
Failed logins are counted in memory (util/LoginThrottle.cs): 10 per login
name or 50 per client address within 15 minutes, then attempts are refused
with 429 for the rest of the window without checking the password. A
correct password clears the login's count; loopback is not counted per
address. Each lockout is logged. F6 fixed (2FA part in case 4710).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:12:26 -07:00
80f81aea0f case 4725 - sessions end on password reset and login disabled, exact login route, default SuperUser limited when licensed
A password set by someone else (reset code, administrator) or a disabled
login replaces the user's session token and download key; changing one's
own password keeps the session. PasswordResetCodeExpire is cleared (was
DlKeyExpire). The token middleware exempts only the exact login and
notify/hello routes and refuses inactive users and users who may not log
in. With a purchased licence, notify/hello no longer offers the default
SuperUser login and a SuperUser with the default password may only change
it (SuperUserDefaultPasswordRoutes). F7, F8 and F9 fixed. Manual and
changelog updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 19:54:03 -07:00
4141217c04 case 4724 - SMTP certificate checked, password never returned
Mailer checks the SMTP server's certificate (trust and name; no revocation
check). New config setting AYANOVA_SMTP_ACCEPT_ANY_CERTIFICATE accepts any
certificate (boot warning, shown in server info, manual page).
The notification settings GET returns ******** instead of the SMTP
password; a PUT with ******** or empty keeps the stored password.
F30 and F31 fixed. Changelog and manual updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 19:09:02 -07:00
e58ab2c100 case 4715 - download file names checked
report/download and export/download (any download key), the log-file routes and
backup download built a path from the file name in the URL with Path.Combine
and no check, so on Windows a name with a folder part or an absolute path could
reach files outside the folder (security review F21). New helper
FileUtil.FullPathInFolderOrNull accepts only a bare file name that resolves
directly inside the folder; TemporaryFileExists and BackupFileExists use it
(the download routes already call them first), and so do both log routes.
A refused name gets the same 404 as a missing file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 12:20:25 -07:00
a843bd3132 case 4711 - JWT signing key generated by the server; AYANOVA_JWT_SECRET removed
The LAN/IIS and Linux templates shipped a placeholder secret printed in the
manual, and installs that kept it signed logins with a public key; any setting
also invited short or reused values (security review F1). The setting is now
ignored (one warning at boot if still present): the server generates a key once
(48 random bytes) into jwt-signing.key in the data folder (beside the app if
there is none; owner-only on Linux) and reuses it, so sign-ins also survive a
restart where the server used to make a new key each boot (standalone, Linux
desktop). If the file cannot be used, a temporary key is used for that run.

Templates and dev launch configs drop the setting; manual updated (key page
rewritten, setting steps removed from install pages); changelog line.

Checked locally: token forged with the old placeholder 401; key file created
and reused after restart (old token 200); auth and 2FA tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 12:01:08 -07:00
a34e012eee case 4690 - report browser downloads under the data path, not beside the app; manual updated
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:25:00 -07:00
e8e7a2ec40 case 4690 - erase database: check CREATEDB before dropping, so a failed create can't leave no database
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:15:13 -07:00
78f5863947 case 4690 - backup: run pg_dump without a shell, password in PGPASSWORD, failures detected by exit code
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:00:52 -07:00
77b825a064 case 4690 - CA2022: read the PE header with ReadAtLeast for the licence build date
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 19:39:11 -07:00
ab1a636ecb case 4690 - AdminConnectionString: swap only the database via NpgsqlConnectionStringBuilder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:43:03 -07:00
c2f2f92236 case 4690 - version bump and confirmation of choices for net10-port 2026-10-22 12:38:37 -07:00
2077ac445f reverted to non local sockeye server for testing against destination sockeye droplet 2026-10-19 18:35:21 -07:00
b41de9a57a case 4670 2026-09-22 12:10:21 -07:00
d96942a296 case 4640 2025-11-24 14:19:27 +00:00
ff1ce4d483 prepare for next release 2025-02-18 21:50:30 +00:00
9d7c575dd1 case 4632 2025-02-18 21:08:56 +00:00
2efbd2e428 prepare for next release 2024-10-24 00:29:57 +00:00
092059eefe Prepare for next release 2024-08-29 00:54:46 +00:00
2548ba53d3 case 4610 2024-08-28 23:00:00 +00:00
e0f57fb1ee case 4610 2024-08-28 22:44:54 +00:00
b9a29a23bc 2024-08-28 21:58:30 +00:00
985baef4f5 2024-08-28 21:51:00 +00:00
6e60c3becb case 4610 2024-08-28 21:48:19 +00:00
210df92358 case 4610 2024-08-28 21:45:38 +00:00
97574f837e case 4610 2024-08-28 21:15:30 +00:00
d502787c37 prepare for next release 2024-06-03 18:32:08 +00:00
7cd16e460f case 4586 - bouncycastle and also had to do mailkit as it was providing an old version of bounceycastle causing conflict 2024-05-09 19:53:39 +00:00
5c4d5681ba Updated MINOR version number for prep for new release 2024-05-07 19:10:32 +00:00
14b6207894 prepare for next release 2024-05-03 22:41:31 +00:00
2c06d70843 prepare for next release 2024-04-29 21:58:19 +00:00
b714131dc4 prepare for next release 2024-04-08 22:07:10 +00:00
176007864a case 4578 (note, prior commit same case forgot to tag it with this message) 2024-04-08 21:05:43 +00:00
5f094510d9 case 4578 2024-04-08 19:10:49 +00:00
83e092f61a Prepare for next release 2024-03-20 23:32:26 +00:00
6513b5659c prepare for next release 2024-01-26 23:11:14 +00:00
064d2c9b75 Prepare for next release 2023-11-22 20:36:36 +00:00
03374556b4 2023-05-11 22:04:07 +00:00
82fa744de5 case 4173 2023-05-09 22:23:54 +00:00
ca82375bca case 4173 2023-05-08 22:54:18 +00:00
2116534503 case 4522 2023-05-04 00:49:19 +00:00
07659f1fe3 case 4491 2023-04-26 23:05:49 +00:00
99dfbfbb98 case 4491 2023-04-25 00:03:57 +00:00
22e9153b0c 2023-04-06 22:37:32 +00:00
1ef6f0c4c6 case 4503 2023-04-06 00:37:41 +00:00
e1f5f9d87f No case made, internal not documented publicly, better error display when trial request fails, 2023-04-04 21:30:04 +00:00
1834af50fc 2023-03-24 23:19:44 +00:00
e0b889974c 2023-03-23 23:55:41 +00:00