Электронное применение разрешения на здание для швейцарских кантонов.
Этот репозиторий содержит исходный код для веб -приложений, используемых для обработки разрешений на электронные здания и сопоставимых процессов в швейцарских кантонах Берна, Гризон, Швис, Солотурн и Ури.
Следующее изображение показывает обзор архитектуры высокого уровня:
ember-ebau-core
. ├── compose # docker-compose files
├── db # database Dockerfile and utils
├── django # backend code, containing both API and Caluma
├── document-merge-service # document generation templates and config
├── ember-caluma-portal # Caluma-based portal
├── ember-camac-ng # Ember.js app optimized for embedding in other applications
├── ember-ebau # Ember.js based application for internal area
├── ember-ebau-core # Ember.js addon for code sharing between multiple Ember.js apps
├── keycloak # Keycloak configuration for local development
├── proxy # Nginx configuration for local development
└── tools # miscellaneous utilities
Из-за продолжающейся работы по модернизации некоторые модули фронтала еще не интегрированы в ember-ebau
, а вместо этого все еще являются частью ember-camac-ng
. Немногие фронтальные модули еще не являются частью этого хранилища вообще. В следующей таблице перечислены наиболее важные модули в «внутренней» части приложения и их соответствующей полноте / состояния интеграции (в demo
конфигурации).
Модуль | Описание | Бэкэнд | Внешний интерфейс | Часть Эмбер-Эбау |
---|---|---|---|---|
Main NAV (ресурс) | ||||
Список досье | Показать список досье | ✔ | ✔ | ✔ |
Список задач | Показать список задач | ✔ | ✔ | ✔ |
Шаблоны | Управление шаблонами документов (DOCX) | ✔ | ✔ | ✔ |
Организация / разрешения | Управлять собственной организацией и разрешениями | ✔ | ✔ | ✔ |
Статическое содержание | Статический контент, редактор Markdown | ✔ | ✔ | ✔ |
Текстовые компоненты | Управление фрагментами для использования в текстовых полях | ✔ | ⏳ | ⏳ |
Subnav (ресурс экземпляра) | ||||
Задачи | Просмотреть и управлять задачами | ✔ | ✔ | ✔ |
Форма | Просмотреть и редактировать основную форму | ✔ | ✔ | ✔ |
Распределение | Получите отзывы от других организаций | ✔ | ✔ | ✔ |
Александрия | Управление документами | ✔ | ✔ | ✔ |
Шаблон | Генерировать документ из шаблона | ✔ | ✔ | ✔ |
Журнал | Совместная ноутбук | ✔ | ✔ | ✔ |
История | Показывает вехи и исторические данные | ✔ | ✔ | ✔ |
Публикация | Управлять публикацией в газете | ✔ | ✔ | ✔ |
Возражения | Управлять возражениями | ✔ | ✔ | ✔ |
Ответственный | Назначьте ответственных пользователей | ✔ | ✔ | ✔ |
Претензии | Спросите заявителя дополнительную информацию | ✔ | ✔ | ✔ |
Отказ | Отклонить экземпляр | ✔ | ✔ | ✔ |
Биллинг | Управление записями выставления счетов | ✔ | ✔ | ✔ |
Аудитор | Выполнить структурированный аудит | ✔ | ✔ | ⏳ |
Аудитор-лог | Показывает изменения формы | ✔ | ⏳ | ⏳ |
Предпочтительная среда разработки основана на Docker.
Для местного развития:
Питон:
Эмбер:
Docker можно использовать, чтобы быстро запустить EBAU. Следующий скрипт проводит вас через процесс настройки. На данный момент мы рекомендуем использовать конфигурацию kt_gr
или kt_so
, поскольку другие кантоны все еще полагаются на устаревшие компоненты для внутренней области, которые не являются частью этого хранилища.
make start-dev-env
Если вы хотите вручную изменить /и т. Д. /Хост, следующие домены, должны указывать на 127.0.0.1 (Localhost):
ebau-portal.local ebau.local ebau-keycloak.local ember-ebau.local ebau-rest-portal.local
Для автоматических проверок во время коммита (форматирование, линии) вы можете настроить крюк GIT со следующими командами:
pip install pre-commit
pre-commit install
После этого вы сможете использовать следующие службы:
Следующие учетные записи администратора присутствуют в KeyCloak или DB соответственно:
Приложение | Роль | Имя пользователя | Пароль | Примечания |
---|---|---|---|---|
демо | Администратор | пользователь | пользователь | |
kt_schwyz | Администратор | администратор | администратор | |
Публикация | адси | адси | ||
kt_uri | Администратор | администратор | администратор | |
Порталузор | портал | портал | ||
kt_bern | Администратор | пользователь | пользователь | |
kt_gr | Администратор | администратор | администратор | |
Кандидат | редактор | редактор | Роль редактора заявителя | |
Кандидат | Ридонли | Ридонли | Заявитель читает роль | |
kt_so | Администратор | администратор | администратор | |
Кандидат | редактор | редактор | Роль редактора заявителя | |
Кандидат | Ридонли | Ридонли | Заявитель читает роль |
make debug-django
С Docker Compose вы можете прикрепить к работающему контейнеру (в основном эквивалентно docker compose up
без флага -d
) и взаимодействовать через Stdin.
docker compose attach django
Это позволит вам
а Отправить сигналы в контейнер
беременный Попасть в оболочку PDB, когда приложение запускается в breakpoint
Поскольку конфигурация Dev запускает Django Development-Server, который перезагружается в файле изменений, вставка этих точек останова вступает в силу сразу после сохранения файла.
Нажмите CTRL-p + CTRL-q
ПРИМЕЧАНИЕ. Поскольку по умолчанию процесс attach
будет направлять сигналы в контейнер, вам придется выйти из нажатия указанной последовательности (которая является настройкой по умолчанию для --detach-keys
и может быть переопределена). Однако нажатие CTRL-c
не только убьет TTY, но и отправит Sigint в контейнер и остановите его.
Документы: https://docs.docker.com/reference/cli/docker/container/attach/
docker-compose up -d --build db django
cd {ember | ember-camac-ng | ember-caluma-portal | ember-ebau} # Enter ember from the top level of the repo
pnpm install # Install dependencies
pnpm test # Run tests
pnpm start-proxy # Run dev server with proxy to django api
Поскольку это большой проект с большим количеством файлов, настройка Ember по умолчанию, возможно, не сможет перестроить должным образом, поскольку не может смотреть все эти файлы.
Чтобы исправить это, установите Watchman в качестве наблюдателя за файлами и настройте настройки inotify
:
echo fs.inotify.max_user_watches=1000000 | sudo tee -a /etc/sysctl.conf # adjust settings
sudo sysctl -p # re-read config
Убедитесь, что последняя команда возвращает только одно значение, в противном случае настройки дублируются и должны быть очищены.
Обратите внимание, что приложения ember-caluma-portal
, ember-camac-ng
, ember-ebau
и Addon ember-ebau-core
имеют одно и то же дерево модулей узлов через рабочее пространство PNPM.
Общее рабочее пространство PNPM позволяет нам обмениваться кодом (например, аддон) между приложениями, которые являются частью этого репо (вместо того, чтобы следить за типичным подходом публикации выпусков на NPM). Это также означает, что
node_modules
ember-caluma-portal
и ember-camac-ng
должны быть синхронизированы Чтобы включить django-silk
для профилирования, просто добавьте DJANGO_ENABLE_SILK=True
в ваш файл django/.env
. Затем перезапустите контейнер Django и просмотрите по http: //ebau.local/api/silk/.
Чтобы переключиться с demo
конфигурации на kt_bern
, необходимо убедиться, что приложения Frontend занимают правильные переменные среды.
pnpm start-proxy
make kt_bern
docker-compose up -d && make loadconfig
docker-compose down
make kt_bern
docker-compose build
docker-compose up -d
Настройки удаленного отладчика для VS -кода направлены на репозиторий.
.vscode/launch.json
. Чтобы включить отладку в контейнере Django, должен быть запущен сервер PTVSD. Поскольку этот сервер отладки сталкивается с другими настройками (Pycharm, Pydev), он будет запущен только в том случае, если env var ENABLE_PTVSD_DEBUGGER
установлен на True
в django/.env
.
Чтобы поговорить с конечной точкой /graphql
с аутентификацией, вы можете установить инструмент GraphQL (очень похожий на почтальон). Инструменты, которые вы можете рассмотреть здесь:
Модуль GWR разработан в двух отдельных репозиториях:
Если вы используете модуль GWR, вам необходимо сгенерировать ключ папоротника в соответствии с документацией Backend GWR.
Вам нужно установить этот ключ в каждой среде/сервере в вашем файле ENV. Создайте отдельный ключ для каждой среды, так как это используется для хранения / чтения паролей пользователей GWR.
API должен быть разработан в некотором смысле, который позволяет использовать его любым проектом EBAU. Для необходимой настройки применяются следующие правила:
Для различных флагов функций и разрешений см. APPLICATIONS
в настройках.py.
В режиме разработки приложение настроено для отправки всей электронной почты в экземпляру почты, поэтому, если вы не указате что -то еще, в среде разработки не будет отправлено электронное письмо.
Вы можете получить доступ к письму с помощью http: //ebau.local/mailpit/. Любое отправленное электронное письмо будет мгновенно видно там.
Раздел для сбора информации о модулях и кантонах. Этот раздел предназначен для облегчения передачи ноу-хау, отпуска и отладки.
Модуль, используемый в Kt. SZ и Kt. Ур (скоро), который сопровождает процесс строительства после решения. Муниципалитет (до настоящего времени рассматривается только в тех случаях, когда ведущим авторитетом является муниципалитет), а заявитель взаимодействует с помощью ряда рабочих элементов с документами.
Существуют этапы строительства («Bauetappen»), которые состоят из динамически выбираемых этапов строительства. Строительные этапы представляют собой серию рабочих элементов, которые обычно следуют схеме начала с рабочего элемента, адресованного заявителю, за которым следует один или несколько рабочих элементов, адресованных муниципалитету. Заявитель подтверждает, что они придерживались определенных правил, и чудеса проверяет это. Окончательный рабочие элементы позволяет мунципалитете решать, продолжать ли процесс или повторно использовать начало этапа строительства.
Модуль в значительной степени определяется настроенным рабочим процессом. Какие этапы строительства и, следовательно, какие рабочие элементы выполняются, обрабатываются с помощью динамических задач. Конфигурация этапа конструкции (например, какая задача принадлежит какой шаг конструкции) настроена в мета -задачах, принадлежащих к этапу строительства. Строительные этапы - это, по сути, группировка задач, их нет модели, представляющей их.
Стадии строительства представляют собой многочисленные рабочие элементы с детьми. Дочерний вариант содержит рабочие элементы строительства. Первая стадия строительства создается при инициализации процесса мониторинга строительства. После этого новый этап строительства может быть инициализирована путем создания мутации рабочей работы на существующем рабочем пункте (в готовом статусе). Остерегайтесь: чтобы гарантировать, что новая стадия строительства всегда может быть создана до тех пор, пока процесс мониторинга строительства не завершен, рабочие предметы на этапе строительства остаются готовыми, в то время как детский случай на стадии строительства уже завершен.
Основная логика содержится в основном в рабочем процессе мониторинга конструкции и конфигурации формы кантона, событий Caluma для мониторинга конструкции, настроек модуля, некоторой пользовательской видимости и логики разрешения.
В кантоне Солотурн мы используем пользовательский механизм авторизации для портала EBAU. Портал EBAU можно использовать только с входом в систему с My.So.ch, их программного обеспечения EGOV Portal. Поскольку они не предлагают авторизацию OIDC, нам пришлось реализовать пользовательское решение, используя обмен токенами KeyCloak и прямые функции обнаженного подражания.
Авторизация предназначено для того, чтобы завоевать зашифрованный и подписанный токен JWT, который затем преобразуется в регулярный токен OIDC JWT с помощью KeyCloak:
секвенированная
Автономный
Участник F как портал Ebau
Участник M как портал Egov
Участник B как ebau API
Участник K как KeyCloak
F->>+M: перенаправить в предварительную
ПРИМЕЧАНИЕ ПРАВО М: зашифрованный и подписанный токен JWT с пользовательскими данными
M->>-F: перенаправление в систему входа в токен Egov
F->>+b: отправить токен (post to/api/v1/auth/token-exchange)
B->> B: расшифровка и проверка токена Egov, извлечь пользовательские данные из Token
B->>+k: создать или обновить пользователя
K->> b: вернуть пользователь
B->> k: обмен токенами с прямым обнаженным подражанием
K->>-B: вернуть токен для пользователя
B->>-F: вернуть токен
Чтобы включить функцию, должна быть сделана следующая конфигурация:
По умолчанию KeyCloak уже правильно настроен для поддержки этого механизма авторизации. Чтобы настроить другую среду, пожалуйста, обратитесь к документации
# .env
ENABLE_TOKEN_EXCHANGE =true
Это позволит этой функции с фиктивным порталом Egov, размещенным на нашем прокси Nginx. Чтобы проверить с помощью тестовой среды EGOV Portal, нам нужно установить несколько переменных среды (цензурированные значения можно найти в хранилище):
# .env
EGOV_PORTAL_URL =****
EGOV_PRESTATION_PATH =****
# django/.env
TOKEN_EXCHANGE_JWT_ISSUER =****
TOKEN_EXCHANGE_JWT_SECRET =****
TOKEN_EXCHANGE_JWE_SECRET =****
Этот проект лицензирован в соответствии с Eupl-1.2-OR-Later. Смотрите лицензию для деталей.