mirror of
https://github.com/Amsterdam/openstad-headless.git
synced 2026-10-19 19:38:31 +00:00
No description
- TypeScript 52.8%
- JavaScript 32.3%
- CSS 8.9%
- SCSS 2.6%
- HTML 1.9%
- Other 1.5%
* fix(api): scope user updates and auth server identity writes per project - User.canUpdate/canDelete only act across projects for superusers or the person themselves - Only send email/password to the auth server when the caller may update every record of that identity - Run identity data through authorizeData before syncing; drop twoFactor fields from the user PUT - Require the same check for two-factor reset - Check all linked users before anonymize-all writes anything - Only honour admin/editor role on create when the caller holds that role - Do not demote a user when a requested role is not allowed * fix(api): restrict project auth config to superusers - Non-superusers may only change the auth provider settings used by the admin UI - Hide client secrets in project config from non-superusers * fix(api): keep records and their relations within the project - authorizeData drops projectId/resourceId changes on update - Only attach own-project (or global) tags and own-project statuses when creating a resource * fix: resolve notification recipients from widget config - Submission admin confirmation and comment confirmation recipients come from the widget config instead of the request body - Comments and document-map widgets send their widgetId * fix(auth): scope admin API to the authenticated client - Non-admin clients may only set roles for, read and update their own client - Unique and access codes are scoped to the authenticated client - Listing clients requires the admin client - Never return password hash, hashed phone number or 2FA token from the admin API * fix(api): write identity fields with the admin client and reject partial updates - Email/password changes without rights on the whole identity return 403 instead of being half applied - Email, password and 2FA reset are sent with the admin client credentials; profile and role with the project client - Password follows the email rule (editor or owner) - Linked record sync errors are logged again instead of returning 500 - Comment confirmations are not sent to the resource owner when a configured address cannot be resolved * fix(auth): restrict identity writes, user delete and client creation in admin API - Non-admin clients may not change email, password or 2FA of, or delete, users with roles on other clients - Creating a client requires the admin client - Roles for other clients return 403 instead of being ignored - Strip resetPasswordToken from admin API user output - Unknown access code returns 404 * fix(api): only use the admin client for identity writes by superusers Non-superusers write email, password and 2FA through the project client, so the auth server can still reject identities with roles on other clients that the api does not know about. * fix(api): treat name and phone number as identity fields and write them first - Name and phone number follow the email/password rules for users in multiple projects - The person themselves also writes identity fields with the admin client - Identity fields are written before the profile, so a refusal saves nothing - A 403 from the auth server is returned as 403 instead of 500 * fix(api): compare auth provider when matching a user to their identity Identifiers are only unique per auth provider. Owner checks in User.canUpdate, authorizeData and the user routes (which may use the admin client) now also compare the provider. * fix(auth): treat name and phone numbers as identity fields Non-admin clients may not change name, phoneNumber or hashedPhoneNumber (the SMS login key) of users with roles on other clients. |
||
|---|---|---|
| .github | ||
| .husky | ||
| apps | ||
| charts/openstad-headless | ||
| cypress | ||
| doc | ||
| img | ||
| operations | ||
| otel-collector | ||
| packages | ||
| scripts | ||
| vendor | ||
| .dockerignore | ||
| .env.example | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| .npmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| .testing.env | ||
| CALENDAR.md | ||
| CHANGELOG.md | ||
| CONTRIBUTING-PILOT-2026.md | ||
| CONTRIBUTING.md | ||
| cypress.config.ts | ||
| docker-compose.e2e.init.yml | ||
| docker-compose.e2e.yml | ||
| docker-compose.release.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| GOVERNANCE.md | ||
| LICENSE.md | ||
| package-lock.json | ||
| package.json | ||
| publiccode.yml | ||
| README.md | ||
| vitest.config.ts | ||
| vitest.setup.ts | ||
OpenStad
This is the monorepo for the OpenStad headless project. To read more about OpenStad visit the website.
Docs
Currently the following elements have been documented:
All
Development
Code formatting
This project uses Prettier for code formatting. A pre-commit hook automatically formats staged files on commit.
Setup after cloning:
npm install
This sets up the Git hooks via Husky's prepare script.
Manual formatting:
npm run format # format all files
npm run format:check # check without modifying (used in CI)
API