https://github.com/maxirmx/o-backend
O!Service backend server
https://github.com/maxirmx/o-backend
openvpn openvpn-configuration openvpn-installer vpn
Last synced: 3 months ago
JSON representation
O!Service backend server
- Host: GitHub
- URL: https://github.com/maxirmx/o-backend
- Owner: maxirmx
- License: mit
- Created: 2023-11-18T20:40:15.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-11-09T08:42:01.000Z (11 months ago)
- Last Synced: 2025-06-06T08:09:17.982Z (4 months ago)
- Topics: openvpn, openvpn-configuration, openvpn-installer, vpn
- Language: C#
- Homepage:
- Size: 981 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/maxirmx/trustvpn-backend/actions/workflows/build-and-push.yml)
# O!Service backend server API
## Установка
Приложение поставляется в виде трёх контейнеров докер.
В качестве примера развёртывания приведён файл ```docker-compose-ghrc.yml``````
services:
trustvpn-backend:
container_name: trustvpn-backend
image: ghcr.io/maxirmx/trustvpn-backend:latest
environment:
ConnectionStrings__DefaultConnection: "Host=trustvpn-db;Database=postgres;Username=postgres;Password=postgres"
ASPNETCORE_ENVIRONMENT: Production
ASPNETCORE_HTTP_PORTS: 8080
ASPNETCORE_HTTPS_PORTS: 8081
ASPNETCORE_Kestrel__Certificates__Default__Path: "/etc/certificate/sw_consulting.pfx"
ASPNETCORE_Kestrel__Certificates__Default__Password:
ports:
- "8080:8080"
- "8081:8081"
depends_on:
trustvpn-db:
condition: service_healthy
trustvpn-container:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "localhost:8080/api/auth/status"]
interval: 10s
timeout: 5s
retries: 2
volumes:
- /etc/nginx/certificate:/etc/certificate
- /var/run/docker.sock:/var/run/docker.sock
- /var/o-service/logs:/app/logstrustvpn-db:
container_name: trustvpn-db
image: postgres:16.2
environment:
- PGUSER=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- /var/o-service/pgdata:/var/lib/postgresql/datatrustvpn-container:
container_name: trustvpn-container
image: ghcr.io/maxirmx/trustvpn-container:latest
command: ["trustvpn-container-if-start", "-u", "o-service.sw.consulting"]
ports:
- "1194:1194/udp"
cap_add:
- NET_ADMIN
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
healthcheck:
test: ["CMD", "openvpn-check"]
interval: 10s
timeout: 5s
retries: 2
volumes:
- /var/o-service/ovpn:/etc/openvpn
```## Swagger
После установки документация swagger доступна по адресу :/swagger## Пример использования
### Захожу администратором```
POST :/api/auth/login
{
"Password": "... посылал отдельно ...",
"Email": "ivanov@example.com"
}
```
Ответ:
```
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjUiLCJuYmYiOjE3MDExOTUyMDYsImV4cCI6MTcwMTgwMDAwNiwiaWF0IjoxNzAxMTk1MjA2fQ.ZF21pHD4C-7bCZuyAuICcYGxxmOIOjGeg6F4n8zaxvU",
"id": 5,
"firstName": "Иван",
"lastName": "Иванов",
"patronimic": "Иванович",
"email": "ivanov@example.com",
"isAdmin": true,
"profileId": 2,
"config": ""
}
```
Токен - JSON Web Token (RFC 7519), используется для авторизации в следующих запросах. Нужно передавать в HTTP заголовке "Authorization". Всё остальноe - для справки.### Создаю пользователя
```
POST :/api/user/add
{
"FirstName": "Роман",
"LastName": "Ойра-Ойра",
"Password": "12345",
"Email": "oyra@example.com",
"IsAdmin": false,
"ProfileId": 2
}
```* profileId = 1 -- блокировка
* profileId = 2 -- профиль с ограничением пропускной способности
* profileId = 3 -- профиль без ограничения пропускной способностиОтвет:
```
{
"id": 12
}
```
Обязательные поля "Email", "IsAdmin", "ProfileId"
Отсутсвие поля трактуется как пустая строка, а не null### Получаю конфигурацию пользователя
```
GET :/api//user/12
```
Ответ:
```
{
"id": 12,
"firstName": "Роман",
"lastName": "Ойра-Ойра",
"patronimic": "",
"email": "oyra@example.com",
"isAdmin": false,
"profileId": 2,
"config": " ... "
}
```
В поле config будет содержимое конфигурацинного файла. Нужно просто сохранить с расширением 'openvpn'
Eсли поле config пустое, значит пользователь заблокирован (profileId=1). Это ошибка, конфиг будет выдаваться всегда.### Меняю профиль пользователя
```
PUT :/api//user/12
{
"ProfileId": 3
}
```
Нужно передавать те поля, которые хочется поменять. Можно поменять несколько полей одним запросом.