Compare commits

38 Commits

Author SHA1 Message Date
Aine
8680dbc268 wrap MakeAdmin button with ReferenceField in user's rooms table, fixes #321 2025-01-30 18:35:35 +02:00
Aine
ea2b84c5dc Merge pull request #320 from etkecc/broken-upgrade
Broken upgrade (now fixed)
2025-01-30 09:12:07 +00:00
Borislav Pantaleev
45c7027d3c Fix tests 2025-01-30 09:43:46 +02:00
Aine
62017d4f4e Merge branch 'main' into broken-upgrade 2025-01-28 11:51:26 +02:00
Aine
0d7dcdc284 revisit traefik labels in readme, fixes #303 2025-01-28 11:46:19 +02:00
Aine
0eb3b77bc5 fix translations; fix tests 2025-01-27 13:09:37 +02:00
dependabot[bot]
e2fba4bbdd Bump @types/node from 22.10.7 to 22.10.10 (#304)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.7 to 22.10.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:49:05 +02:00
dependabot[bot]
6425a6bfc4 Bump vite from 6.0.9 to 6.0.11 (#307)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.9 to 6.0.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:48:52 +02:00
dependabot[bot]
42925e8a7c Bump eslint from 9.18.0 to 9.19.0 (#311)
Bumps [eslint](https://github.com/eslint/eslint) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.18.0...v9.19.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:48:32 +02:00
dependabot[bot]
75e89fe628 Bump ra-language-french from 5.4.4 to 5.5.2 (#305)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.4 to 5.5.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.4...v5.5.2)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:30:36 +02:00
dependabot[bot]
f9c806d292 Bump @testing-library/user-event from 14.6.0 to 14.6.1 (#308)
Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.6.0 to 14.6.1.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.6...v14.6.1)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:30:11 +02:00
dependabot[bot]
3f5022d515 Bump typescript-eslint from 8.20.0 to 8.21.0 (#312)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.20.0 to 8.21.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.21.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:29:51 +02:00
Aine
0748f98d47 revisit traefik labels in readme, fixes #303 2025-01-27 12:29:34 +02:00
dependabot[bot]
3c8fd351a1 Bump @eslint/js from 9.18.0 to 9.19.0 (#313)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.19.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:29:19 +02:00
dependabot[bot]
40e6d80c35 Bump react-admin from 5.4.4 to 5.5.2 (#317)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.4 to 5.5.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.4...v5.5.2)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:06:48 +02:00
dependabot[bot]
243cc40da4 Bump vite from 6.0.7 to 6.0.9 in the npm_and_yarn group (#302)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.0.7 to 6.0.9
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.9/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-22 06:37:53 +00:00
dependabot[bot]
3bcc51d12c Bump react-admin from 5.4.3 to 5.4.4 (#280)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:58:51 +02:00
dependabot[bot]
2afd7d6737 Bump react-router-dom from 6.28.1 to 6.28.2 (#282)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.28.1 to 6.28.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.28.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:48:36 +02:00
dependabot[bot]
2357d63120 Bump @testing-library/user-event from 14.5.2 to 14.6.0 (#285)
Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.5.2 to 14.6.0.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.5.2...v14.6)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:48:23 +02:00
dependabot[bot]
e28d07ebd3 Bump eslint-plugin-prettier from 5.2.1 to 5.2.3 (#281)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.1 to 5.2.3.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.1...v5.2.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:46:26 +02:00
dependabot[bot]
33f960579c Bump ra-language-english from 5.4.3 to 5.4.4 (#283)
Bumps [ra-language-english](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-language-english
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:46:05 +02:00
dependabot[bot]
6e14bd7959 Bump ra-language-french from 5.4.3 to 5.4.4 (#284)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:45:52 +02:00
dependabot[bot]
bdbc0df95b Bump react-router from 6.28.1 to 6.28.2 (#286)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 6.28.1 to 6.28.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@6.28.2/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:45:29 +02:00
dependabot[bot]
5e10d94e5f Bump @testing-library/react from 16.1.0 to 16.2.0 (#287)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 16.1.0 to 16.2.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.1.0...v16.2.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:45:15 +02:00
dependabot[bot]
a934942bf6 Bump @tanstack/react-query from 5.62.15 to 5.64.2 (#290)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.62.15 to 5.64.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.64.2/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:44:58 +02:00
dependabot[bot]
c440e88806 Bump typescript from 5.7.2 to 5.7.3 (#292)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.2 to 5.7.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.2...v5.7.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:44:42 +02:00
dependabot[bot]
45b7ec005b Bump papaparse from 5.4.1 to 5.5.1 (#293)
Bumps [papaparse](https://github.com/mholt/PapaParse) from 5.4.1 to 5.5.1.
- [Release notes](https://github.com/mholt/PapaParse/releases)
- [Commits](https://github.com/mholt/PapaParse/commits)

---
updated-dependencies:
- dependency-name: papaparse
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:44:28 +02:00
dependabot[bot]
c748523dbc Bump @types/node from 22.10.5 to 22.10.7 (#294)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.5 to 22.10.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:43:45 +02:00
dependabot[bot]
34eea8dff4 Bump eslint-config-prettier from 9.1.0 to 10.0.1 (#295)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.0.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.0.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:43:28 +02:00
dependabot[bot]
87408c0e6d Bump @mui/material from 6.3.1 to 6.4.0 (#296)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.3.1 to 6.4.0.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.0/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:43:02 +02:00
dependabot[bot]
5ad787075c Bump ra-i18n-polyglot from 5.4.3 to 5.4.4 (#298)
Bumps [ra-i18n-polyglot](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-i18n-polyglot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:42:49 +02:00
dependabot[bot]
01ae5a411f Bump eslint from 9.17.0 to 9.18.0 (#297)
Bumps [eslint](https://github.com/eslint/eslint) from 9.17.0 to 9.18.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.17.0...v9.18.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:46:18 +02:00
dependabot[bot]
cde60a2aba Bump @mui/utils from 5.16.13 to 5.16.14 (#299)
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 5.16.13 to 5.16.14.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v5.16.14/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v5.16.14/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:45:56 +02:00
dependabot[bot]
3f5808c67b Bump ra-core from 5.4.3 to 5.4.4 (#300)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:45:44 +02:00
dependabot[bot]
2c697b40dd Bump typescript-eslint from 8.19.0 to 8.20.0 (#301)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.19.0 to 8.20.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.20.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:45:12 +02:00
Aine
9453490bca update docker instructions, fixes #278 2025-01-18 09:21:58 +02:00
Aine
0baf6ad94d try a different approach to #277 2025-01-17 10:38:40 +02:00
Aine
df911c9e97 safer decodeURIComponent(), fixes #277 2025-01-17 09:42:21 +02:00
16 changed files with 1732 additions and 1630 deletions

1
.dockerignore Normal file
View File

@@ -0,0 +1 @@
/testdata

11
Dockerfile.build Normal file
View File

@@ -0,0 +1,11 @@
FROM node:lts AS builder
ARG BASE_PATH=./
WORKDIR /src
COPY . /src
RUN yarn config set enableTelemetry 0 && \
yarn install --immutable --network-timeout=300000 && \
yarn build --base=$BASE_PATH
FROM ghcr.io/static-web-server/static-web-server:2
ENV SERVER_ROOT=/app
COPY --from=builder /src/dist /app

View File

@@ -261,6 +261,7 @@ You have three options:
hostname: synapse-admin
build:
context: https://github.com/etkecc/synapse-admin.git
dockerfile: Dockerfile.build
args:
- BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
# - NODE_OPTIONS="--max_old_space_size=1024"
@@ -289,7 +290,7 @@ Example for Traefik:
```yml
services:
traefik:
image: traefik:mimolette
image: traefik:v3
restart: unless-stopped
ports:
- 80:80
@@ -302,11 +303,12 @@ services:
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.synapse-admin.rule=Host(`example.com`)&&PathPrefix(`/admin`)"
- "traefik.http.routers.synapse-admin.middlewares=admin,admin_path"
- "traefik.http.middlewares.admin.redirectregex.regex=^(.*)/admin/?"
- "traefik.http.middlewares.admin.redirectregex.replacement=$${1}/admin/"
- "traefik.http.middlewares.admin_path.stripprefix.prefixes=/admin"
- "traefik.http.routers.admin.rule=Host(`example.com`) && PathPrefix(`/admin`)"
- "traefik.http.services.admin.loadbalancer.server.port=80"
- "traefik.http.middlewares.admin-slashless-redirect.redirectregex.regex=(/admin)$$"
- "traefik.http.middlewares.admin-slashless-redirect.redirectregex.replacement=$${1}/"
- "traefik.http.middlewares.admin-strip-prefix.stripprefix.prefixes=/admin"
- "traefik.http.routers.admin.middlewares=admin-slashless-redirect,admin-strip-prefix"
```
## Development

View File

@@ -5,6 +5,7 @@ services:
image: ghcr.io/etkecc/synapse-admin:latest
# build:
# context: .
# dockerfile: Dockerfile.build
# to use the docker-compose as standalone without a local repo clone,
# replace the context definition with this:

View File

@@ -2,7 +2,7 @@ import type { JestConfigWithTsJest } from "ts-jest";
const config: JestConfigWithTsJest = {
preset: "ts-jest",
testEnvironment: "jsdom",
testEnvironment: "jest-fixed-jsdom",
collectCoverage: true,
coveragePathIgnorePatterns: ["node_modules", "dist"],
coverageDirectory: "<rootDir>/coverage/",

View File

@@ -11,24 +11,24 @@
"url": "https://github.com/etkecc/synapse-admin"
},
"devDependencies": {
"@eslint/js": "^9.17.0",
"@eslint/js": "^9.19.0",
"@testing-library/dom": "^10.0.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.1.0",
"@testing-library/user-event": "^14.5.2",
"@testing-library/react": "^16.2.0",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.17.14",
"@types/node": "^22.10.5",
"@types/node": "^22.10.10",
"@types/papaparse": "^5.3.15",
"@types/react": "^18.3.12",
"@typescript-eslint/eslint-plugin": "^8.18.2",
"@typescript-eslint/parser": "^8.19.0",
"@vitejs/plugin-react": "^4.3.4",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
"eslint": "^9.19.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-unused-imports": "^4.1.4",
"eslint-plugin-yaml": "^1.0.3",
"jest": "^29.7.0",
@@ -38,9 +38,9 @@
"react-test-renderer": "^18.3.1",
"ts-jest": "^29.2.5",
"ts-node": "^10.9.2",
"typescript": "^5.7.2",
"typescript-eslint": "^8.19.0",
"vite": "^6.0.7",
"typescript": "^5.7.3",
"typescript-eslint": "^8.21.0",
"vite": "^6.0.11",
"vite-plugin-version-mark": "^0.1.4"
},
"dependencies": {
@@ -49,26 +49,25 @@
"@haleos/ra-language-german": "^1.0.0",
"@haxqer/ra-language-chinese": "^4.16.2",
"@mui/icons-material": "^6.3.1",
"@mui/material": "^6.3.1",
"@mui/utils": "^5.16.13",
"@tanstack/react-query": "^5.62.15",
"@mui/material": "^6.4.0",
"@mui/utils": "^5.16.14",
"@tanstack/react-query": "^5.64.2",
"history": "^5.3.0",
"jest-fixed-jsdom": "^0.0.9",
"lodash": "^4.17.21",
"papaparse": "^5.4.1",
"ra-core": "^5.4.1",
"ra-i18n-polyglot": "^5.3.4",
"ra-language-english": "^5.3.4",
"papaparse": "^5.5.1",
"ra-core": "^5.4.4",
"ra-i18n-polyglot": "^5.4.4",
"ra-language-english": "^5.4.4",
"ra-language-farsi": "^5.1.0",
"ra-language-french": "^5.4.3",
"ra-language-french": "^5.5.2",
"ra-language-italian": "^3.13.1",
"ra-language-russian": "^4.14.2",
"react": "^18.3.1",
"react-admin": "^5.4.3",
"react-admin": "^5.5.2",
"react-dom": "^18.3.1",
"react-hook-form": "^7.54.2",
"react-is": "^18.3.1",
"react-router": "^6.28.1",
"react-router-dom": "^6.28.1",
"ts-jest-mock-import-meta": "^1.2.1"
},
"scripts": {

View File

@@ -1,12 +1,32 @@
import { render, screen } from "@testing-library/react";
import { BrowserRouter } from "react-router-dom";
import fetchMock from "jest-fetch-mock";
fetchMock.enableMocks();
jest.mock("./synapse/authProvider", () => ({
__esModule: true,
default: {
logout: jest.fn().mockResolvedValue(undefined),
},
}));
import App from "./App";
describe("App", () => {
beforeEach(() => {
// Reset all mocks before each test
fetchMock.resetMocks();
// Mock any fetch call to return empty JSON immediately
fetchMock.mockResponseOnce(JSON.stringify({}));
});
it("renders", async () => {
render(<App />);
render(
<BrowserRouter>
<App />
</BrowserRouter>
);
await screen.findAllByText("Welcome to Synapse Admin");
});
});

View File

@@ -35,6 +35,7 @@ import { useMutation } from "@tanstack/react-query";
import { dateParser } from "../utils/date";
import { DeleteMediaParams, SynapseDataProvider } from "../synapse/dataProvider";
import { fetchAuthenticatedMedia } from "../utils/fetchMedia";
import decodeURLComponent from "../utils/decodeURLComponent";
const DeleteMediaDialog = ({ open, onClose, onSubmit }) => {
const translate = useTranslate();
@@ -481,7 +482,7 @@ export const MediaIDField = ({ source }) => {
let uploadName = mediaID;
if (get(record, "upload_name")) {
uploadName = decodeURIComponent(get(record, "upload_name")?.toString());
uploadName = decodeURLComponent(get(record, "upload_name")?.toString());
}
let mxcURL = mediaID;
@@ -504,7 +505,10 @@ export const ReportMediaContent = ({ source }) => {
return null;
}
const uploadName = decodeURIComponent(get(record, "event_json.content.body")?.toString());
let uploadName = "";
if (get(record, "event_json.content.body")) {
uploadName = decodeURLComponent(get(record, "event_json.content.body")?.toString());
}
return <ViewMediaButton mxcURL={mxcURL} label={mxcURL} uploadName={uploadName} mimetype={record.media_type}/>;
};

View File

@@ -15,6 +15,7 @@ const fixedGermanMessages = {
action: {
...formalGermanMessages.ra.action,
update_application: "Anwendung aktualisieren",
select_all_button: "Alle auswählen",
},
page: {
...formalGermanMessages.ra.page,
@@ -28,6 +29,7 @@ const fixedGermanMessages = {
"Sie haben nicht die erforderlichen Berechtigungen um auf diese Seite zuzugreifen.",
authentication_error:
"Der Authentifizierungsserver hat einen Fehler zurückgegeben und Ihre Anmeldedaten konnten nicht überprüft werden.",
select_all_limit_reached: "Es gibt zu viele Elemente, um sie alle auszuwählen. Es wurden nur die ersten %{max} Elemente ausgewählt.",
},
},
}

View File

@@ -11,6 +11,10 @@ const fixedRussianMessages = {
no_filtered_results: "Нет результатов",
clear_filters: "Все фильтры сбросить",
},
action: {
...russianMessages.ra.action,
select_all_button: "Выбрать все",
},
page: {
...russianMessages.ra.page,
empty: "Пусто",
@@ -23,6 +27,7 @@ const fixedRussianMessages = {
"У вас нет прав доступа к этой странице.",
authentication_error:
"Сервер аутентификации вернул ошибку и не смог проверить ваши учетные данные.",
select_all_limit_reached: "Слишком много элементов для выбора. Были выбраны только первые %{max} элементов.",
},
},
}

View File

@@ -13,7 +13,8 @@ const fixedChineseMessages = {
},
action: {
...chineseMessages.ra.action,
update_application: "Anwendung aktualisieren",
update_application: "更新应用",
select_all_button: "全部选择",
},
page: {
...chineseMessages.ra.page,
@@ -26,6 +27,7 @@ const fixedChineseMessages = {
"您没有访问此页面的权限。",
authentication_error:
"身份验证服务器返回错误,无法验证您的凭据。",
select_all_limit_reached: "选择的元素太多。只选择了前 %{max} 个元素。",
},
},
}

View File

@@ -2,6 +2,7 @@ import polyglotI18nProvider from "ra-i18n-polyglot";
import { render, screen } from "@testing-library/react";
import { AdminContext } from "react-admin";
import { BrowserRouter } from "react-router-dom";
import LoginPage from "./LoginPage";
import { AppContext } from "../Context";
@@ -14,9 +15,11 @@ describe("LoginForm", () => {
it("renders with no restriction to homeserver", async () => {
await act(async () => {
render(
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
</AdminContext>
<BrowserRouter>
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
</AdminContext>
</BrowserRouter>
);
});
@@ -33,13 +36,15 @@ describe("LoginForm", () => {
it("renders with single restricted homeserver", () => {
render(
<AppContext.Provider
value={{ restrictBaseUrl: "https://matrix.example.com", asManagedUsers: [], menu: [] }}
>
<BrowserRouter>
<AppContext.Provider
value={{ restrictBaseUrl: "https://matrix.example.com", asManagedUsers: [], menu: [] }}
>
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
</AdminContext>
</AppContext.Provider>
</AdminContext>
</AppContext.Provider>
</BrowserRouter>
);
screen.getByText(englishMessages.synapseadmin.auth.welcome);
@@ -56,14 +61,16 @@ describe("LoginForm", () => {
it("renders with multiple restricted homeservers", async () => {
render(
<AppContext.Provider
value={{
restrictBaseUrl: ["https://matrix.example.com", "https://matrix.example.org"],
asManagedUsers: [],
value={{
restrictBaseUrl: ["https://matrix.example.com", "https://matrix.example.org"],
asManagedUsers: [],
menu: [],
}}
>
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
<BrowserRouter>
<LoginPage />
</BrowserRouter>
</AdminContext>
</AppContext.Provider>
);

View File

@@ -83,6 +83,7 @@ import UserRateLimits from "../components/UserRateLimits";
import { User, UsernameAvailabilityResult } from "../synapse/dataProvider";
import { MakeAdminBtn } from "./rooms";
import UserAccountData from "../components/UserAccountData";
import decodeURLComponent from "../utils/decodeURLComponent";
const choices_medium = [
{ id: "email", name: "resources.users.email" },
@@ -505,7 +506,7 @@ export const UserEdit = (props: EditProps) => {
<DateField source="last_access_ts" showTime options={DATE_FORMAT} />
<NumberField source="media_length" />
<TextField source="media_type" sx={{ display: "block", width: 200, wordBreak: "break-word" }} />
<FunctionField source="upload_name" render={record => decodeURIComponent(record.upload_name)} />
<FunctionField source="upload_name" render={record => record.upload_name ? decodeURLComponent(record.upload_name) : ""} />
<TextField source="quarantined_by" />
<QuarantineMediaButton label="resources.quarantine_media.action.name" />
<ProtectMediaButton label="resources.users_media.fields.safe_from_quarantine" />
@@ -527,7 +528,9 @@ export const UserEdit = (props: EditProps) => {
<ReferenceField reference="rooms" source="id" label="resources.rooms.fields.joined_members" link={false} sortable={false}>
<TextField source="joined_members" sortable={false} />
</ReferenceField>
<ReferenceField reference="rooms" source="id" label={false} link={false} sortable={false}>
<MakeAdminBtn />
</ReferenceField>
</Datagrid>
</ReferenceManyField>
</FormTab>

View File

@@ -3,6 +3,7 @@ import { AuthProvider, HttpError, Options, fetchUtils } from "react-admin";
import { MatrixError, displayError } from "../utils/error";
import { fetchAuthenticatedMedia } from "../utils/fetchMedia";
import { FetchConfig, ClearConfig } from "../utils/config";
import decodeURLComponent from "../utils/decodeURLComponent";
const authProvider: AuthProvider = {
// called when the user attempts to log in
@@ -57,7 +58,7 @@ const authProvider: AuthProvider = {
base_url = base_url.replace(/\/+$/g, "");
localStorage.setItem("base_url", base_url);
const decoded_base_url = window.decodeURIComponent(base_url);
const decoded_base_url = decodeURLComponent(base_url);
let login_api_url = decoded_base_url + (accessToken ? "/_matrix/client/v3/account/whoami" : "/_matrix/client/v3/login");
let response;

View File

@@ -0,0 +1,15 @@
/**
* Decode a URI component, and if it fails, return the original string.
* @param str The string to decode.
* @returns The decoded string, or the original string if decoding fails.
* @example decodeURIComponent("Hello%20World") // "Hello World"
*/
const decodeURLComponent = (str: any): any => {
try {
return decodeURIComponent(str);
} catch (e) {
return str;
}
}
export default decodeURLComponent;

3197
yarn.lock

File diff suppressed because it is too large Load Diff