A maintained fork of the admin console for (Matrix) Synapse homeservers, including additional features
Find a file
2024-10-30 18:00:05 +02:00
.github remove CI hack to include version into manifest.json (now generated on each build automatically) 2024-10-30 18:00:05 +02:00
.vscode Upgrade react-admin to version 5 (#40) 2024-09-24 10:02:47 +03:00
.yarn Migrate to yarn v4 2024-04-23 13:35:19 +02:00
public Generate extended manifest.json on build 2024-10-30 17:58:33 +02:00
src Sanitize CSV on import (#101) 2024-10-25 11:52:26 +03:00
testdata/synapse add dev stack 2024-09-17 12:54:29 +03:00
.editorconfig Update eslint for typescript 2024-05-06 08:33:32 +02:00
.gitattributes Migrate to yarn v4 2024-04-23 13:35:19 +02:00
.gitignore add dev stack 2024-09-17 12:54:29 +03:00
.prettierignore Update eslint for typescript 2024-05-06 08:33:32 +02:00
.watchmanconfig Authenticated Media Support (#51) 2024-10-03 00:38:35 +03:00
docker-compose-dev.yml add dev stack 2024-09-17 12:54:29 +03:00
docker-compose.yml update links, allow working without tags 2024-08-31 15:14:44 +03:00
Dockerfile enable docker action to see how it goes 2024-09-03 15:50:11 +03:00
index.html update naming 2024-10-24 21:49:00 +03:00
jest.config.ts Transform code base to typescript 2024-04-26 11:48:52 +02:00
justfile make avatar field sortable in the users list 2024-10-08 12:15:03 +03:00
LICENSE Create a base react-admin application 2020-02-07 21:20:57 +01:00
package.json Bump ra-language-english from 5.3.0 to 5.3.1 (#102) 2024-10-28 10:55:00 +02:00
README.md Sanitize CSV on import (#101) 2024-10-25 11:52:26 +03:00
screenshots.jpg Add screenshots and install instructions 2020-07-08 07:49:42 +00:00
tsconfig.eslint.json Transform code base to typescript 2024-04-26 11:48:52 +02:00
tsconfig.json Upgrade react-admin to version 5 (#40) 2024-09-24 10:02:47 +03:00
tsconfig.vite.json Transform code base to typescript 2024-04-26 11:48:52 +02:00
vite.config.ts Generate extended manifest.json on build 2024-10-30 17:58:33 +02:00
yarn.lock Generate extended manifest.json on build 2024-10-30 17:58:33 +02:00

Synapse Admin Logo

Synapse Admin
Community room
License

Manager your Synapse homeserver with ease


Screenshots

This project is built using react-admin.

Fork differences

With 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.

Availability

Changes

The following changes are already implemented:

the list will be updated as new changes are added

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:

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.

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:

{
  "restrictBaseUrl": "https://your-matrixs-erver.example.com"
}

or to a list of homeservers:

{
  "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

{
  "asManagedUsers": ["^@telegram_[a-zA-Z0-9]+:example\\.com$"]
}

Adding custom menu items

You can add custom menu items to the main menu by providing a menu array in the config.json.

{
  "menu": [
    {
      "label": "Contact support",
      "icon": "SupportAgent",
      "url": "https://github.com/etkecc/synapse-admin/issues"
    }
  ]
}

Where icon is one of the preloaded icons

Providing support URL

Deprecated: use menu config option described above. Automatically migrated to the menu if the supportURL is present.

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.

{
  "supportURL": "https://example.com/support"
}

Usage

Supported Synapse

It needs at least Synapse v1.116.0 for all functions to work as expected!

You get your server version with the request /_synapse/admin/v1/server_version. See also Synapse version API.

After entering the URL on the login page of synapse-admin the server version appears below the input field.

Prerequisites

You need access to the following endpoints:

  • /_matrix
  • /_synapse/admin

See also Synapse administration endpoints

Use without install

You can use the current version of Synapse Admin without own installation direct via admin.etke.cc.

Note: 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 below.

Step-By-Step install

You have three options:

  1. Download the tarball and serve with any webserver
  2. Download the source code from github and run using nodejs
  3. Run the Docker container

Steps for 1)

  • 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
  • download the .tar.gz from the latest release
  • unpack the .tar.gz
  • move or symlink the synapse-admin into your vhosts root dir
  • open the url of the vhost in your browser

Steps for 2)

  • make sure you have installed the following: git, yarn, nodejs
  • download the source code: git clone https://github.com/etkecc/synapse-admin.git
  • change into downloaded directory: cd synapse-admin
  • download dependencies: yarn install
  • start web server: yarn start

Steps for 3)

  • 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 up -d

    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.

    services:
      synapse-admin:
        container_name: synapse-admin
        hostname: synapse-admin
        build:
          context: https://github.com/etkecc/synapse-admin.git
          args:
            - BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
          #   - NODE_OPTIONS="--max_old_space_size=1024"
          #   - BASE_PATH="/synapse-admin"
        ports:
          - "8080:80"
        restart: unless-stopped
    
  • browse to http://localhost:8080

Serving Synapse Admin on a different path

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.

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.

Example for Traefik:

docker-compose.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:
    image: etkecc/synapse-admin:latest
    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"

Development