Commit Graph

268 Commits

Author SHA1 Message Date
1ccbd7745c case 4727 - safe security headers on every response
Every response carries X-Content-Type-Options: nosniff, X-Frame-Options:
SAMEORIGIN and Referrer-Policy: strict-origin, so self-hosted installs
get them too (the hosted nginx sends the same values). F35 (4727 step 6).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:01:38 -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
ee59efff48 case 4713 - customer contacts hold and act with customer roles only
Users who may edit contacts but not users (Service, Sales, Accounting) could
give a contact login any role, BizAdmin and OpsAdmin included, and roles are
what every check uses (security review F28). Now:
- saving a Customer or HeadOffice user with any role other than Customer or
  CustomerRestricted is refused (error on Roles);
- UserBiz.EffectiveRoles masks a contact's roles to the customer roles wherever
  they are applied: the token middleware, download-key routes, and the
  notification subscriber check, so contacts that already have staff roles
  stored act without them.

Checked: Service creating a contact with BizAdmin refused, with Customer works;
a contact with OpsAdmin stored in the database gets 403 downloading a log file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 15:59:35 -07:00
2b1adaa496 case 4712 - customer contacts limited to the routes the customer screens use
Customer contacts had the Customer role's Select and read rights on most record
types and could call any route whose staff role check they passed, including
several with no role check (security review F13 to F17). Step 1 of 4712: the
token middleware now answers 403 (same body as other 403s) to Customer and
HeadOffice users for any route not in CustomerContactRoutes, the routes the
customer screens use (read from raven-client). Anonymous routes are always
allowed. New routes stay closed to contacts unless added on purpose.
Ownership of the records these routes return follows in the next steps.

Checked: full integration suite 103 passed, 5 skipped, the same 2 known
failures as the baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 13:44:02 -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
76dab8d865 case 4690 - remove MiniProfiler (never used): packages, wiring, profiler auth workaround, credits entry
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 18:49:28 -07:00
e55e0d6707 case 4690 - Asp.Versioning 10.2.1 with explicit AddMvc()
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 18:45:40 -07:00
4098cd4922 case 4690 - Swashbuckle 10.3.1 / OpenAPI.NET 2: namespace and security requirement changes; drop explicit Microsoft.OpenApi
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 16:46:49 -07:00
880f4802a4 case 4642 2026-02-13 09:13:54 -08:00
d96942a296 case 4640 2025-11-24 14:19:27 +00:00
87a4946500 case 4586 - fuck it, everything is interdependent, just went for it, mostly buildable just reporting to fixup then testing after this 2024-05-09 22:56:53 +00:00
ad5db64b65 case 4586 2024-05-07 19:54:41 +00:00
86001b029d case 4586 CHECKPOINT commit prior to making dependency upgrades to back end including .net8 2024-05-07 19:00:12 +00:00
dd26188ef6 case 4359 2023-01-04 19:51:41 +00:00
62b8449bb6 2023-01-04 19:39:29 +00:00
c14cbbfcd2 case 4217 2022-10-25 19:54:35 +00:00
d3d06766c4 licensing system change, all internal active, no more scheduleable resources / tech licensing 2022-09-12 21:57:31 +00:00
56af1db7e7 2022-09-10 21:21:43 +00:00
3d6758c1d0 More subscription license work allow logins addition 2022-08-23 22:42:05 +00:00
0016204582 2022-08-23 16:56:20 +00:00
03d26ddc41 2022-08-23 03:02:34 +00:00
028e7b8818 More subscription license work 2022-08-23 03:00:17 +00:00
b9d33ff036 subscription license code additions 2022-08-17 03:03:48 +00:00
467c0acc59 case 4170 2022-08-15 21:02:01 +00:00
ad61269560 Final release candidate 8.0.1 - holy shit commit! 2022-08-05 23:55:49 +00:00
d95510cf48 maintenance expiration vs build date checking code 2022-08-05 23:31:37 +00:00
1daec7ce6d 2022-04-05 17:42:20 +00:00
1f3f52b41e customer docs 2022-03-31 22:35:14 +00:00
d86931b0ee customer docs 2022-03-31 21:14:59 +00:00
cebaa3548a 2022-03-27 18:19:55 +00:00
47cc22a181 2022-03-15 23:47:24 +00:00
62a2f6d7bc added append password and forceemail options to seeder 2022-03-15 23:26:06 +00:00
e0c0768c31 2022-03-09 19:04:17 +00:00
353a6072be 2022-03-04 20:24:42 +00:00
e17effed2e 2022-03-04 19:06:46 +00:00
9f02542244 2022-03-04 19:03:57 +00:00
1e7369382e 2022-03-04 18:41:49 +00:00
0a5c722f2e 2022-02-14 23:12:05 +00:00
9bcf2b2799 2022-01-23 20:31:22 +00:00
81f23420e6 Put all AYANOVA_SERVER_TEST_MODE stuff in a DEBUG build only block in prep for release 2022-01-05 19:39:54 +00:00
f78ce69473 2022-01-03 19:45:28 +00:00
71fa9e5ef5 2021-12-24 22:57:45 +00:00
e698554a6c 2021-12-24 16:24:18 +00:00
70471c1f2b 2021-12-02 23:23:10 +00:00
b6deb38cae 2021-11-26 20:08:04 +00:00
000b53ea1e Adjusted jwt access token exp expiry value to 5 days from seven, also confirmed it works and an expired token loses access and adjusted the skew to 0 2021-11-12 18:10:39 +00:00
dee6f80894 2021-10-19 19:47:10 +00:00
177b8d3863 2021-10-19 16:20:10 +00:00
b32c53da93 2021-09-10 20:34:51 +00:00
8cf8188ff9 2021-09-10 19:22:18 +00:00