Skip to content

maintainer64/matrix-widget-security

Repository files navigation

Matrix Devices Widget

Веб-виджет для управления устройствами пользователя через Matrix.

Возможности

  • Добавление устройств пользователя
  • Просмотр списка устройств
  • Удаление устройств
  • Шифрованная SQLite база данных
  • Поддержка кастомного prefix (URL path)
  • Работа как виджет в Matrix

Конфигурация

Создайте файл .env:

DEBUG=true
HOST=0.0.0.0
PORT=8080
PREFIX=/bulka
TRUSTED_SERVERS=matrix.test.site
DATABASE_TYPE=mysql
DATABASE_URL=matrix_widget_security:matrix_widget_security@tcp(localhost:3306)/matrix_widget_security?charset=utf8mb4&parseTime=True&loc=Local

Запуск

Локальная разработка

# Установите зависимости
go mod download
cd frontend && npm install

# Соберите и запустите
make build
make run

Docker

docker build -t matrix-devices-widget .
docker run -p 8080:8080 -v $(pwd)/data:/data -e matrix-devices-widget

С prefix

PREFIX=/myapp ./server
# API: /myapp/api/devices
# UI: /myapp/

Интеграция с Matrix

Добавление виджета

  1. Создайте комнату в Matrix (или используйте существующую)

  2. Добавьте виджет через команду:

    /addwidget https://YOUR_SERVER:3000/PREFIX?widgetId=$matrix_widget_id&userId=$matrix_user_id
    

    Пример:

    /addwidget https://localhost:3000?widgetId=$matrix_widget_id&userId=$matrix_user_id
    

HTTPS в разработке

Для работы виджета нужен HTTPS. Запустите:

# Терминал 1: Сгенерировать сертификаты и запустить с HTTPS
make dev-https

# Или отдельно:
make certs          # Создаст key.pem и cert.pem
make dev            # Запустит dev сервер с HTTPS если есть сертификаты

Бэкенд и фронтенд автоматически используют HTTPS если найдут key.pem и cert.pem в корне проекта.

ngrok (альтернатива)

ngrok http 3000
# Получите HTTPS URL и используйте его в /addwidget

API

Метод Путь Описание
GET /prefix/api/devices Список устройств
POST /prefix/api/devices Добавить устройство
DELETE /prefix/api/devices/:id Удалить устройство
GET /prefix/health Health check

Заголовки

Все API запросы требуют заголовок X-Matrix-User-ID с ID пользователя Matrix (например @user:example.com)

Структура проекта

.
├── main.go           # Точка входа
├── config/           # Конфигурация
├── handlers/         # HTTP обработчики
├── storage/          # Слой данных (encrypted SQLite)
├── frontend/         # React приложение
│   └── src/
│       ├── backendApi.js    # API клиент
│       └── components/
├── static/           # Собранный фронтенд
└── data/             # База данных

Требования

  • Go 1.25+
  • Node.js 18+
  • CGO (для SQLite)
  • OpenSSL (для генерации сертификатов)

Лицензия

MIT