Skip to content
This repository has been archived by the owner on Aug 31, 2023. It is now read-only.

Commit

Permalink
Импорт изменений для стабильной версии 0.1.0 (#150)
Browse files Browse the repository at this point in the history
* Updating Python to version 3.10 (#122) also updated uvicorn, fastapi, jinja2, websockets
* Переход на python 3.10 (замена If-Else на Match-Case) и переделка системы генерации ошибок (#123)
* Изменения для выполнения тикетов #98 #50 (#124)
* Исправления в системе тестирования кода, закрытие тикетов #125 #126 #101 #100 (#127)
* Добавлена панель администратора (#129)
* Добавление дополнительной абстракции для работы с бд #128 (#136)
* Реализация единой точки обработки конфигурационного файла (#137)
* Разделение кода протокола и контроллера #139 (#141)
* Небольшие правки кода перед переносов в мастер и релизом версии 0.1.0 (#143)


Co-authored-by: NekrodNIK <60639354+NekrodNIK@users.noreply.github.com>
  • Loading branch information
stepanskryabin and NekrodNIK authored Jan 22, 2022
1 parent f7c714d commit 59bd6ed
Show file tree
Hide file tree
Showing 69 changed files with 5,266 additions and 2,337 deletions.
19 changes: 12 additions & 7 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,21 @@ pycodestyle = "*"
mccabe = "*"

[packages]
uvicorn = "==0.14.0"
fastapi = "==0.66.0"
jinja2 = "==3.0.1"
fastapi = "==0.71.0"
uvicorn = "==0.16.0"
jinja2 = "==3.0.3"
aiofiles = "==0.7.0"
email-validator = "==1.1.3"
sqlobject = "==3.9.1"
loguru = "==0.5.3"
websockets = "==9.1"
pydantic = "==1.8.2"
websocket-client = "*"
websockets = "==10.1"
pydantic = "==1.9.0"
fastapi-login = "==1.7.3"
python-multipart = "==0.0.5"
websocket-client = "==1.2.3"
coverage = "==6.2"
requests = "==2.27.1"
win32-setctime = "*"

[requires]
python_version = "3.9"
python_version = "3.10"
397 changes: 291 additions & 106 deletions Pipfile.lock

Large diffs are not rendered by default.

68 changes: 38 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,62 @@ Language [EN](./README_ENG.md), [RU](./README.md)

## В репозитории 2 бранча ##

[master](https://github.com/MoreliaTalk/morelia_server/tree/master) - стабильная ветка.
[Master](https://github.com/MoreliaTalk/morelia_server/tree/master) - стабильная ветка.

[develop](https://github.com/MoreliaTalk/morelia_server/tree/develop) - ветка для добавления нового функционала.
[Develop](https://github.com/MoreliaTalk/morelia_server/tree/develop) - ветка для добавления нового функционала.

## В разработке применяется ##

* [Python 3.9](https://www.python.org/) - язык программирования
* [Python 3.10](https://www.python.org/) - язык программирования

* [FastAPI](https://fastapi.tiangolo.com) - основной фреймворк

* [SQLObject](http://sqlobject.org) - ORM для работы с базой данный

* [Pydantic](https://pydantic-docs.helpmanual.io) - валидация данных

* [Starlette](https://www.starlette.io) - лёгковесный ASGI фреймворк/тулкит
* [Starlette](https://www.starlette.io) - легковесный ASGI фреймворк/тулкит

* [websockets](https://pypi.org/project/websockets/) - реализация протокола Websockets в Python (RFC 6455 & 7692)

## Описание репозитория ##

* /admin
* /templates - шаблоны страниц админки
* admin.py
* control.py
* login.py
* logs.py
* /mod
* api.py - модуль отвечает за описание API, а так же валидацию данных.
* error.py - модуль отвечает за хранение кодов ошибок.
* controller.py - модуль отвечает за реализацию методов описанных в [Morelia Protocol](https://github.com/MoreliaTalk/morelia_protocol/blob/master/README.md).
* lib.py - модуль отвечает за хэширования пароля, сравнения пароля с его хэш-суммой, создание хэша для auth_id.
* models.py - модуль отвечает за описание таблиц БД для работы через ОРМ.
* logging.py - модуль настройки логирования.
* /templates - шаблоны для вывода статистики сервера в браузере.
* base.html - базовый шаблон с основными элементами меню, он имплементируется в каждый рабочий шаблон.
* index.html - рабочий шаблон главной страницы.
* status.thml - рабочий шаблон страницы со статусом работы сервера.
* /db
* dbhandler.py - модуль предназначен для выполнения запросов к БД
* models.py - модуль отвечает за описание таблиц БД для работы через ОРМ.
* /protocol
* /matrix
* api.py - модуль отвечает за описание API, а так же валидацию данных.
* worker.py - реализация протокола
* /mtp
* api.py - модуль отвечает за описание API, а так же валидацию данных.
* worker.py - модуль отвечает за реализацию методов описанных в [Morelia Protocol](https://github.com/MoreliaTalk/morelia_protocol/blob/master/README.md).
* error.py - модуль отвечает за проверку и генерацию ответов с кодами ошибок.
* controller.py - модуль обрабатывает запрос в соответствии с типом протокола
* lib.py - модуль отвечает за хеширование пароля, сравнения пароля с его хэш-суммой, создание хеша для auth_id.
* logging.py - модуль настройки логирования.
* config.py - модуль читает настройки из config.ini
* /static -
* server.py - основной код сервера
* manage.py - менеджер миграции для БД (создание и удаление таблиц базы данных)
* /tests
* fixtures/
* api.json - json-файл с заранее подготовленными данными, для провдедения тестов.
* test_api.py - тесты для проверки валидации.
* test_controller.py - тесты для проверки класса который отвечает за обработкуметодов протокола.
* test_lib.py - тесты хэш-функции.
* fixtures/ - json-файлы с заранее подготовленными данными, для проведения тестов.
* config.ini - конфиг сервера для проведения тестов
* test_*.py - тесты
* debug_server.py - обёртка для server.py для дебага через утилиту `pdb`.
* example_config.ini - файл содержащий пример настроек сервера, перед запуском сервера просто переименуйте в `config.ini`.
* client.py - мини-клиент для проверки работы сервера.

## Установка ##

Установить [Python](https://www.python.org/downloads/) версией 3.8 или выше.
Установить [Python](https://www.python.org/downloads/) версией 3.10 или выше.

Загрузить и установить последнюю версию [git](https://git-scm.com/downloads).

Expand Down Expand Up @@ -138,7 +148,7 @@ pipenv run pipenv run python ./manage.py --db delete
Добавляем администратора в созданную БД:

```cmd
python ./manage.py --table superuser
python ./manage.py superuser-create
```

Дополнительно можно создать `flow` с типом группа:
Expand Down Expand Up @@ -169,7 +179,7 @@ uvicorn server:app --host 0.0.0.0 --port 8000 --reload --use-colors --http h11 -

`--loop <str>` - Set the event loop implementation. The uvloop implementation provides greater performance, but is not compatible with Windows or PyPy. Options: 'auto', 'asyncio', 'uvloop'. Default: 'auto'.

`--http <str>` - Set the HTTP protocol implementation. The httptools implementation provides greater performance, but it not compatible with PyPy, and requires compilation on Windows. Options: 'auto', 'h11', 'httptools'. Default: 'auto'.
`--http <str>` - Set the HTTP protocol implementation. The httptools implementation provides greater performance, but it is not compatible with PyPy, and requires compilation on Windows. Options: 'auto', 'h11', 'httptools'. Default: 'auto'.

`--ws <str>` - Set the WebSockets protocol implementation. Either of the websockets and wsproto packages are supported. Use 'none' to deny all websocket requests. Options: 'auto', 'none', 'websockets', 'wsproto'. Default: 'auto'.

Expand Down Expand Up @@ -223,9 +233,9 @@ pipenv run python -i ./client.py

Если в функцию не передать ни одного аргумента, по умолчанию будет отправлено сообщение AUTH на LOCALHOST.

## Создание пулл-реквеста для внесенния изменений в develop-ветку Morelia Server ##
## Создание пулл-реквеста для внесения изменений в develop-ветку Morelia Server ##

Получение последних изменнений из develop-ветки Morelia Server
Получение последних изменений из develop-ветки Morelia Server

```cmd
git pull upstream develop
Expand All @@ -237,7 +247,7 @@ git pull upstream develop
git push
```

Для создания пулл-реквеста, необходимо перейти на [GitHub](https://www.github.com), выбрать свой форк и в правом меню нажать на `New pull request`, после чего выбрать бранч из которого будет производится перенос изменений в develop-ветку Morelia Server и нажать `Create pull request`.
Для создания пулл-реквеста, необходимо перейти на [GitHub](https://www.github.com), выбрать свой форк и в правом меню нажать на `New pull request`, после чего выбрать бранч из которого будет производиться перенос изменений в develop-ветку Morelia Server и нажать `Create pull request`.

## Требования к стилю кода ##

Expand All @@ -249,7 +259,7 @@ git push

Уровни логирования которыми можно пользоваться в коде:

```py
```
Level name | Logger method
DEBUG | logger.debug()
Expand All @@ -271,9 +281,9 @@ CRITICAL | logger.critical()
pipenv run python -v ./tests/test_*.py
```

## Запуск дебаггера ##
## Запуск дебагера ##

Для запуска дебаггера в полевых условиях, через консоль
Для запуска дебагера в полевых условиях, через консоль

```cmd
python -m pdb ./debug_server.py
Expand All @@ -289,8 +299,6 @@ python -m pdb ./debug_server.py

[Telegram](https://t.me/joinchat/LImHShzAmIWvpMxDTr5Vxw) - группа где обсуждаются насущные вопросы.

[Trello](https://trello.com/b/qXjJFTP3/develop) - kanban-доска для проекта.

[Slack](www.moreliatalk.slack.com) - альтернативный вариант обсуждения проекта.

## Лицензия ##
Expand Down
64 changes: 38 additions & 26 deletions README_ENG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,34 +24,46 @@ Language [EN](./README_ENG.md), [RU](./README.md)

## Repository description ##

* /mod
* api.py - module is responsible for description of API, as well as validation of data.
* error.py - module is responsible for storing error codes.
* controller.py - module is responsible for implementing methods described in [Morelia Protocol](https://github.com/MoreliaTalk/morelia_protocol/blob/master/README.md).
* lib.py - module is responsible for hashing password, comparing password with its hash sum, and creating a hash for auth_id.
* models.py - module is responsible for describing database tables to work through ORM.
* logging.py - logging configuration module.
* /templates - templates for displaying server statistics in browser.
* base.html - base template with basic elements of menu, it is implemented in every working template.
* index.html - working homepage template.
* status.thml - working page template with status of server.
* server.py - basic server code.
* manage.py - migration manager for database (creating and deleting database tables).
* /tests
* fixtures/
* api.json - json-file with pre-prepared data, to conduct tests.
* test_api.py - validation tests.
* test_controller.py - tests to check class that is responsible for processing protocol methods.
* test_lib.py - hash function tests.
* debug_server.py - A wrapper for server.py to debug through a utility `pdb`.
* example_config.ini - file containing the example server settings, just rename it to `config.ini` before starting the server.
* client.py - mini client to check the server operation.
*admin
* /templates - templates of admin pages
* admin.py
* control.py
* login.py
* logs.py
*mod
* /db
* dbhandler.py - module is designed to perform queries to the database
* models.py - module is responsible for the description of database tables to work through OPM.
*protocol
* /matrix
* api.py - module is responsible for the description of API, as well as the validation of data.
* worker.py - implementation of the protocol
*mtp
* api.py - module responsible for API description, as well as data validation.
* worker.py - module is responsible for implementing the methods described in [Morelia Protocol](https://github.com/MoreliaTalk/morelia_protocol/blob/master/README.md).
* error.py - module is responsible for checking and generating responses with error codes.
* controller.py - module is responsible for processing requests according to the protocol type.
* lib.py - module is responsible for password hashing, comparing password with its hash sum, creating hash for auth_id.
* logging.py - module configures logging.
* config.py - module reads settings from config.ini
* /static -
* server.py - main server code
* manage.py - database migration manager (creating and deleting database tables)
*tests
* fixtures/ - json-files with preliminarily prepared data for tests
* config.ini - server config for the tests
* test_*.py - tests
* debug_server.py - wrapper for server.py to debug through the `pdb` utility.
* example_config.ini - file containing example server settings, just rename it to `config.ini` before running the server.
* client.py - mini-customer to test the server.

Translated with www.DeepL.com/Translator (free version)

## Installing ##

Install [Python](https://www.python.org/downloads/) version 3.8 or higher.

Download and install latest version [git](https://git-scm.com/downloads).
Download and install the latest version [git](https://git-scm.com/downloads).

If you need a GUI, install [GitHub Desktop](https://desktop.github.com/).

Expand Down Expand Up @@ -166,7 +178,7 @@ Additional parameters that can be sent to server:

`--loop <str>` - Set the event loop implementation. The uvloop implementation provides greater performance, but is not compatible with Windows or PyPy. Options: 'auto', 'asyncio', 'uvloop'. Default: 'auto'.

`--http <str>` - Set the HTTP protocol implementation. The httptools implementation provides greater performance, but it not compatible with PyPy, and requires compilation on Windows. Options: 'auto', 'h11', 'httptools'. Default: 'auto'.
`--http <str>` - Set the HTTP protocol implementation. The httptools implementation provides greater performance, but it is not compatible with PyPy, and requires compilation on Windows. Options: 'auto', 'h11', 'httptools'. Default: 'auto'.

`--ws <str>` - Set the WebSockets protocol implementation. Either of the websockets and wsproto packages are supported. Use 'none' to deny all websocket requests. Options: 'auto', 'none', 'websockets', 'wsproto'. Default: 'auto'.

Expand Down Expand Up @@ -222,7 +234,7 @@ If no arguments are passed to the function, the default is to send an AUTH messa

## Creating a pool-request to make changes to development branch Morelia Server ##

Getting latest changes from development branch Morelia Server
Getting the latest changes from development branch Morelia Server

```cmd
git pull upstream develop
Expand All @@ -246,7 +258,7 @@ Library is used [loguru](https://github.com/Delgan/loguru)

Logging levels you can use in your code:

```py
```
Level name | Logger method
DEBUG | logger.debug()
Expand Down
95 changes: 95 additions & 0 deletions admin/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
"""
Copyright (c) 2020 - present NekrodNIK, Stepan Skriabin, rus-ai and other.
Look at the file AUTHORS.md(located at the root of the project) to get the
full list.
This file is part of Morelia Server.
Morelia Server is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Morelia Server is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with Morelia Server. If not, see <https://www.gnu.org/licenses/>.
"""
from fastapi import Depends
from fastapi.applications import FastAPI
from fastapi.requests import Request
from fastapi.templating import Jinja2Templates
from pathlib import Path
from starlette.responses import RedirectResponse

from mod.db.dbhandler import DBHandler
from mod.config import DATABASE
from . import login
from . import logs
from . import control as manage

app = FastAPI()

templates = Jinja2Templates(Path(__file__).parent / "templates")

app.include_router(login.router)
app.include_router(logs.router)
app.include_router(manage.router)

db_connect = DBHandler(DATABASE.get('URI'))


@app.exception_handler(login.NotAuthenticatedException)
def not_login_exception_handler(request: Request,
exc: login.NotAuthenticatedException):
return RedirectResponse(url="/admin/login")


@app.get("/login")
def login_admin(request: Request):
return templates.TemplateResponse("login.html", {
"request": request
})


@app.get("/")
def index_admin(request: Request,
user=Depends(login.login_manager)):
return templates.TemplateResponse("index_admin.html", {
"request": request
})


@app.get("/status")
def status_admin(request: Request,
user=Depends(login.login_manager)):
dbquery = db_connect.get_table_count()
return templates.TemplateResponse("status_admin.html",
{"request": request,
"Messages_count": dbquery.message_count,
"Flows_count": dbquery.flow_count,
"Users_count": dbquery.user_count
})


# TODO Полностью доделать(на данный момент управление сервером не работает)
# после того, как будут сделаны методы работы с бд
@app.get("/manage")
def manage_admin(request: Request,
user=Depends(login.login_manager)):
dbquery = db_connect.get_all_user()
return templates.TemplateResponse("manage_admin.html", {
"request": request,
"users": dbquery.count()
})


@app.get("/logs")
def manage_logs(request: Request,
user=Depends(login.login_manager)):
return templates.TemplateResponse("logs_admin.html", {
"request": request
})
Loading

0 comments on commit 59bd6ed

Please sign in to comment.