Commit Graph

1371 Commits

Author SHA1 Message Date
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
749dbdff66 case 4492 2023-03-21 23:23:54 +00:00
7223cf0006 2023-03-16 23:25:52 +00:00
e35c64115d 2023-03-08 22:38:19 +00:00