2024-10-24 13:44:12 +03:00
< p align = "center" >
< img alt = "Synapse Admin Logo" src = "./public/images/logo.webp" height = "140" / >
2024-10-24 14:11:23 +03:00
< h3 align = "center" >
Synapse Admin< br >
< a href = "https://matrix.to/#/#synapse-admin:etke.cc" >
< img alt = "Community room" src = "https://img.shields.io/badge/room-community_room-green?logo=matrix&label=%23synapse-admin%3Aetke.cc" >
2024-10-24 14:11:59 +03:00
< / a > < br >
< img alt = "License" src = "https://img.shields.io/github/license/etkecc/synapse-admin" >
2024-10-24 14:11:23 +03:00
< / h3 >
2024-10-24 13:44:12 +03:00
< p align = "center" > Manager your Synapse homeserver with ease< / p >
< / p >
---
2020-01-27 16:57:27 +03:00
2024-09-25 19:26:26 +03:00
![Screenshots ](./screenshots.jpg )
2020-01-27 16:57:27 +03:00
This project is built using [react-admin ](https://marmelab.com/react-admin/ ).
2024-09-25 19:26:26 +03:00
<!-- vim - markdown - toc GFM -->
* [Fork differences ](#fork-differences )
2024-10-10 22:13:50 +03:00
* [Availability ](#availability )
2024-09-25 19:26:26 +03:00
* [Changes ](#changes )
* [Development ](#development )
* [Configuration ](#configuration )
* [Restricting available homeserver ](#restricting-available-homeserver )
* [Protecting appservice managed users ](#protecting-appservice-managed-users )
2024-10-21 23:33:51 +03:00
* [Adding custom menu items ](#adding-custom-menu-items )
2024-09-25 19:26:26 +03:00
* [Providing support URL ](#providing-support-url )
* [Usage ](#usage )
* [Supported Synapse ](#supported-synapse )
* [Prerequisites ](#prerequisites )
* [Use without install ](#use-without-install )
* [Step-By-Step install ](#step-by-step-install )
* [Steps for 1) ](#steps-for-1 )
* [Steps for 2) ](#steps-for-2 )
* [Steps for 3) ](#steps-for-3 )
2024-10-24 21:49:00 +03:00
* [Serving Synapse Admin on a different path ](#serving-synapse-admin-on-a-different-path )
2024-09-25 19:26:26 +03:00
* [Development ](#development-1 )
<!-- vim - markdown - toc -->
2024-08-31 14:47:33 +03:00
## Fork differences
2024-09-17 23:06:12 +03:00
With [Awesome-Technologies/synapse-admin ](https://github.com/Awesome-Technologies/synapse-admin ) as the upstream, this
fork is intended to be a more feature-rich version of the original project. The main goal is to provide a more
user-friendly interface for managing Synapse homeservers.
2024-10-10 22:13:50 +03:00
### Availability
2024-08-31 20:27:36 +03:00
2024-10-10 22:13:50 +03:00
* As a core/default component on [etke.cc ](https://etke.cc/?utm_source=github&utm_medium=readme&utm_campaign=synapse-admin )
* Via CDN on [admin.etke.cc ](https://admin.etke.cc )
* As a component in [Matrix-Docker-Ansible-Deploy Playbook ](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook-synapse-admin.md )
2024-08-31 20:27:36 +03:00
### Changes
2024-08-31 14:47:33 +03:00
The following changes are already implemented:
* [Prevent admins from deleting themselves ](https://github.com/etkecc/synapse-admin/pull/1 )
2024-09-03 07:12:36 +03:00
* [Fix user's default tab not being shown ](https://github.com/etkecc/synapse-admin/pull/8 )
2024-09-03 10:40:27 +03:00
* [Add identifier when authorizing with password ](https://github.com/Awesome-Technologies/synapse-admin/pull/601 )
2024-09-03 11:09:46 +03:00
* [Add ability to toggle whether to show locked users ](https://github.com/Awesome-Technologies/synapse-admin/pull/573 )
2024-09-03 11:50:14 +03:00
* [Fix user's display name in header on user's page ](https://github.com/etkecc/synapse-admin/pull/9 )
2024-09-03 13:46:31 +03:00
* [Fix footer overlapping content ](https://github.com/Awesome-Technologies/synapse-admin/issues/574 )
2024-09-03 15:50:11 +03:00
* Switch from nginx to [SWS ](https://static-web-server.net/ ) for serving the app, reducing the size of the Docker image
2024-09-05 09:02:29 +03:00
* [Fix redirect URL after user creation ](https://github.com/etkecc/synapse-admin/pull/16 )
2024-09-05 21:39:39 +03:00
* [Display actual Synapse errors ](https://github.com/etkecc/synapse-admin/pull/17 )
2024-09-05 23:23:17 +03:00
* [Fix base_url being undefined on unsuccessful login ](https://github.com/etkecc/synapse-admin/pull/18 )
2024-10-30 19:49:32 +03:00
* [Put the version into manifest.json ](https://github.com/Awesome-Technologies/synapse-admin/issues/507 ) (later replaced
with a proper manifest.json generation on build)
2024-10-24 21:49:00 +03:00
* [Federation page improvements ](https://github.com/Awesome-Technologies/synapse-admin/pull/583 ) (using icons)
2024-09-14 11:03:51 +03:00
* [Add UI option to block deleted rooms from being rejoined ](https://github.com/etkecc/synapse-admin/pull/26 )
2024-09-17 13:17:07 +03:00
* [Fix required fields check on Bulk registration CSV upload ](https://github.com/etkecc/synapse-admin/pull/32 )
2024-09-17 14:02:41 +03:00
* [Fix requests with invalid MXIDs on Bulk registration ](https://github.com/etkecc/synapse-admin/pull/33 )
2024-09-17 23:06:12 +03:00
* [Expose user avatar URL field in the UI ](https://github.com/etkecc/synapse-admin/pull/27 )
2024-09-24 10:02:47 +03:00
* [Upgrade react-admin to v5 ](https://github.com/etkecc/synapse-admin/pull/40 )
2024-09-24 13:25:29 +03:00
* [Restrict actions on specific users ](https://github.com/etkecc/synapse-admin/pull/42 )
2024-09-25 19:10:43 +03:00
* [Add `Contact support` menu item ](https://github.com/etkecc/synapse-admin/pull/45 )
2024-09-29 00:16:44 +03:00
* [Provide options to delete media and redact events on user erase ](https://github.com/etkecc/synapse-admin/pull/49 )
2024-10-03 00:38:35 +03:00
* [Authenticated Media support ](https://github.com/etkecc/synapse-admin/pull/51 )
2024-10-03 11:23:51 +03:00
* [Better media preview/download ](https://github.com/etkecc/synapse-admin/pull/53 )
2024-10-17 18:34:20 +03:00
* [Login with access token ](https://github.com/etkecc/synapse-admin/pull/58 )
2024-10-19 15:57:12 +03:00
* [Fix footer causing vertical scrollbar ](https://github.com/etkecc/synapse-admin/pull/60 )
2024-10-21 23:33:51 +03:00
* [Custom Menu Items ](https://github.com/etkecc/synapse-admin/pull/79 )
2024-10-22 12:18:55 +03:00
* [Add user profile to the top menu ](https://github.com/etkecc/synapse-admin/pull/80 )
2024-10-23 00:03:06 +03:00
* [Enable visual customization ](https://github.com/etkecc/synapse-admin/pull/81 )
2024-10-23 13:48:21 +03:00
* [Fix room state events display ](https://github.com/etkecc/synapse-admin/pull/100 )
2024-10-25 11:52:26 +03:00
* [Sanitize CSV on import ](https://github.com/etkecc/synapse-admin/pull/101 )
2024-10-31 18:18:28 +03:00
* Allow setting version using `SYNAPSE_ADMIN_VERSION` environment variable on build (if git is not available)
2024-11-06 12:25:47 +03:00
* [Add option to control user's experimental features ](https://github.com/etkecc/synapse-admin/pull/111 )
2024-08-31 14:47:33 +03:00
_the list will be updated as new changes are added_
2024-09-17 12:54:29 +03:00
### Development
`just run-dev` to start the development stack (depending on your system speed, you may want to re-run this command if
user creation fails)
After that open `http://localhost:5173` in your browser, login using the following credentials:
* Login: admin
* Password: admin
* Homeserver URL: http://localhost:8008
2024-09-25 19:26:26 +03:00
## Configuration
You can use `config.json` file to configure synapse-admin
The `config.json` can be injected into a Docker container using a bind mount.
```yml
services:
synapse-admin:
...
volumes:
./config.json:/app/config.json:ro
...
```
### Restricting available homeserver
You can restrict the homeserver(s), so that the user can no longer define it himself.
Edit `config.json` to restrict either to a single homeserver:
```json
{
"restrictBaseUrl": "https://your-matrixs-erver.example.com"
}
```
or to a list of homeservers:
```json
{
"restrictBaseUrl": ["https://your-first-matrix-server.example.com", "https://your-second-matrix-server.example.com"]
}
```
### Protecting appservice managed users
To avoid accidental adjustments of appservice-managed users (e.g., puppets created by a bridge) and breaking the bridge,
you can specify the list of MXIDs (regexp) that should be prohibited from any changes, except display name and avatar.
Example for [mautrix-telegram ](https://github.com/mautrix/telegram )
```json
{
"asManagedUsers": ["^@telegram_[a-zA-Z0-9]+:example\\.com$"]
}
```
2024-10-21 23:33:51 +03:00
### Adding custom menu items
You can add custom menu items to the main menu by providing a `menu` array in the `config.json` .
```json
{
"menu": [
{
"label": "Contact support",
"icon": "SupportAgent",
"url": "https://github.com/etkecc/synapse-admin/issues"
}
]
}
```
Where `icon` is one of the [preloaded icons ](./src/components/icons.ts )
2024-09-25 19:26:26 +03:00
### Providing support URL
2024-10-21 23:33:51 +03:00
**Deprecated**: use `menu` config option described above. Automatically migrated to the `menu` if the `supportURL` is present.
2024-10-24 21:49:00 +03:00
~~Synapse Admin provides a support link in the main menu - `Contact support` . By default, the link points to the GitHub issues page of the project. You can change this link by providing a `supportURL` in the `config.json` .~~
2024-09-25 19:26:26 +03:00
```json
{
"supportURL": "https://example.com/support"
}
```
2022-04-20 11:46:19 +03:00
## Usage
### Supported Synapse
2024-09-29 00:16:44 +03:00
It needs at least [Synapse ](https://github.com/element-hq/synapse ) v1.116.0 for all functions to work as expected!
2020-07-04 20:32:45 +03:00
2020-10-26 12:08:33 +03:00
You get your server version with the request `/_synapse/admin/v1/server_version` .
2024-02-07 13:14:25 +03:00
See also [Synapse version API ](https://element-hq.github.io/synapse/latest/admin_api/version_api.html ).
2020-10-26 12:08:33 +03:00
After entering the URL on the login page of synapse-admin the server version appears below the input field.
2022-04-20 11:46:19 +03:00
### Prerequisites
2020-10-26 12:08:33 +03:00
You need access to the following endpoints:
2020-11-12 18:16:32 +03:00
2020-10-26 12:08:33 +03:00
- `/_matrix`
- `/_synapse/admin`
2024-02-07 13:14:25 +03:00
See also [Synapse administration endpoints ](https://element-hq.github.io/synapse/latest/reverse_proxy.html#synapse-administration-endpoints )
2020-10-26 12:08:33 +03:00
2022-04-20 11:46:19 +03:00
### Use without install
You can use the current version of Synapse Admin without own installation direct
2024-09-25 19:26:26 +03:00
via [admin.etke.cc ](https://admin.etke.cc ).
2022-04-20 11:46:19 +03:00
**Note:**
2022-05-09 14:46:00 +03:00
If you want to use the deployment, you have to make sure that the admin endpoints (`/_synapse/admin`) are accessible for your browser.
**Remember: You have no need to expose these endpoints to the internet but to your network.**
If you want your own deployment, follow the [Step-By-Step Install Guide ](#step-by-step-install ) below.
2022-04-20 11:46:19 +03:00
### Step-By-Step install
2020-07-04 20:32:45 +03:00
2021-08-19 13:12:27 +03:00
You have three options:
2020-07-04 20:32:45 +03:00
2022-01-31 19:39:18 +03:00
1. [Download the tarball and serve with any webserver ](#steps-for-1 )
2. [Download the source code from github and run using nodejs ](#steps-for-2 )
3. [Run the Docker container ](#steps-for-3 )
2020-07-04 20:32:45 +03:00
2022-04-20 11:46:19 +03:00
#### Steps for 1)
2020-07-04 20:32:45 +03:00
2021-08-19 13:12:27 +03:00
- make sure you have a webserver installed that can serve static files (any webserver like nginx or apache will do)
- configure a vhost for synapse admin on your webserver
2024-09-25 19:26:26 +03:00
- download the .tar.gz [from the latest release ](https://github.com/etkecc/synapse-admin/releases/latest )
2021-08-19 13:12:27 +03:00
- unpack the .tar.gz
2024-09-25 19:26:26 +03:00
- move or symlink the `synapse-admin` into your vhosts root dir
2021-08-19 13:12:27 +03:00
- open the url of the vhost in your browser
2022-04-20 11:46:19 +03:00
#### Steps for 2)
2021-08-19 13:12:27 +03:00
2020-07-04 20:32:45 +03:00
- make sure you have installed the following: git, yarn, nodejs
2024-09-25 19:26:26 +03:00
- download the source code: `git clone https://github.com/etkecc/synapse-admin.git`
2020-07-04 20:32:45 +03:00
- change into downloaded directory: `cd synapse-admin`
- download dependencies: `yarn install`
- start web server: `yarn start`
2022-04-20 11:46:19 +03:00
#### Steps for 3)
2020-07-04 20:32:45 +03:00
2024-09-25 19:26:26 +03:00
- run the Docker container from the public docker registry: `docker run -p 8080:80 ghcr.io/etkecc/synapse-admin` or use the [docker-compose.yml ](docker-compose.yml ): `docker-compose up -d`
2021-01-23 15:38:39 +03:00
> note: if you're building on an architecture other than amd64 (for example a raspberry pi), make sure to define a maximum ram for node. otherwise the build will fail.
```yml
services:
synapse-admin:
container_name: synapse-admin
hostname: synapse-admin
build:
2024-09-25 19:26:26 +03:00
context: https://github.com/etkecc/synapse-admin.git
2024-04-24 16:29:06 +03:00
args:
- BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
2021-01-23 15:38:39 +03:00
# - NODE_OPTIONS="--max_old_space_size=1024"
2024-04-24 17:00:55 +03:00
# - BASE_PATH="/synapse-admin"
2021-01-23 15:38:39 +03:00
ports:
- "8080:80"
restart: unless-stopped
```
2020-07-04 20:32:45 +03:00
- browse to http://localhost:8080
2024-10-24 21:49:00 +03:00
### Serving Synapse Admin on a different path
2024-04-18 18:48:53 +03:00
2024-04-24 17:00:55 +03:00
The path prefix where synapse-admin is served can only be changed during the build step.
If you downloaded the source code, use `yarn build --base=/my-prefix` to set a path prefix.
If you want to build your own Docker container, use the `BASE_PATH` argument.
2024-10-24 21:49:00 +03:00
We do not support directly changing the path where Synapse Admin is served in the pre-built Docker container. Instead please use a reverse proxy if you need to move Synapse Admin to a different base path. If you want to serve multiple applications with different paths on the same domain, you need a reverse proxy anyway.
2024-04-18 18:48:53 +03:00
Example for Traefik:
`docker-compose.yml`
```yml
services:
traefik:
image: traefik:mimolette
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
synapse-admin:
2024-09-25 19:26:26 +03:00
image: etkecc/synapse-admin:latest
2024-04-18 18:48:53 +03:00
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"
2024-04-24 17:00:55 +03:00
- "traefik.http.middlewares.admin.redirectregex.regex=^(.*)/admin/?"
- "traefik.http.middlewares.admin.redirectregex.replacement=$${1}/admin/"
- "traefik.http.middlewares.admin_path.stripprefix.prefixes=/admin"
2024-04-18 18:48:53 +03:00
```
2020-07-29 18:49:00 +03:00
## Development
2024-04-18 20:05:07 +03:00
- See https://yarnpkg.com/getting-started/editor-sdks how to setup your IDE
2024-04-22 16:36:13 +03:00
- Use `yarn lint` to run all style and linter checks
- Use `yarn test` to run all unit tests
2020-07-29 18:49:00 +03:00
- Use `yarn fix` to fix the coding style