瑞士州的電子建築許可證申請。
該存儲庫包含用於處理電子建築許可證和可比較過程的Web應用程序的源代碼,瑞士,Grisons,Schwyz,Solothurn和Uri。
下圖顯示了架構的高級概述:
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
配置中)。
模塊 | 描述 | 後端 | 前端 | Ember-Ebau的一部分 |
---|---|---|---|---|
主航(資源) | ||||
檔案列表 | 顯示檔案清單 | ✔️ | ✔️ | ✔️ |
任務列表 | 顯示任務列表 | ✔️ | ✔️ | ✔️ |
模板 | 管理文檔模板(DOCX) | ✔️ | ✔️ | ✔️ |
組織 /許可 | 管理自己的組織和權限 | ✔️ | ✔️ | ✔️ |
靜態內容 | 靜態內容,Markdown編輯器 | ✔️ | ✔️ | ✔️ |
文本組件 | 管理在文本字段中使用的摘要 | ✔️ | ⏳ | ⏳ |
subnav(實例資源) | ||||
任務 | 查看和管理任務 | ✔️ | ✔️ | ✔️ |
形式 | 查看和編輯主形式 | ✔️ | ✔️ | ✔️ |
分配 | 從其他組織那裡獲得反饋 | ✔️ | ✔️ | ✔️ |
亞歷山大 | 文檔管理 | ✔️ | ✔️ | ✔️ |
模板 | 從模板生成文檔 | ✔️ | ✔️ | ✔️ |
雜誌 | 協作筆記本 | ✔️ | ✔️ | ✔️ |
歷史 | 顯示里程碑和歷史數據 | ✔️ | ✔️ | ✔️ |
出版品 | 管理報紙 | ✔️ | ✔️ | ✔️ |
異議 | 管理異議 | ✔️ | ✔️ | ✔️ |
負責任的 | 分配負責任的用戶 | ✔️ | ✔️ | ✔️ |
主張 | 向申請人索取其他信息 | ✔️ | ✔️ | ✔️ |
拒絕 | 拒絕實例 | ✔️ | ✔️ | ✔️ |
計費 | 管理計費條目 | ✔️ | ✔️ | ✔️ |
審計 | 執行結構化審核 | ✔️ | ✔️ | ⏳ |
審核日誌 | 顯示形式更改 | ✔️ | ⏳ | ⏳ |
首選的開發環境基於Docker。
用於本地發展:
Python:
餘燼:
Docker可用於使Ebau迅速運行。以下腳本指導您完成設置過程。我們建議暫時使用kt_gr
或kt_so
配置,因為其他州仍然依賴於不屬於此存儲庫一部分的內部區域的傳統組件。
make start-dev-env
如果您想手動修改 /etc /主機以下域需要指向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 | 行政 | 行政 | 行政 | |
公開 | adsy | adsy | ||
kt_uri | 行政 | 行政 | 行政 | |
門戶網站 | 門戶網站 | 門戶網站 | ||
kt_bern | 行政 | 用戶 | 用戶 | |
kt_gr | 行政 | 行政 | 行政 | |
申請人 | 編輯 | 編輯 | 申請人編輯角色 | |
申請人 | 可讀 | 可讀 | 申請人可讀角色 | |
kt_so | 行政 | 行政 | 行政 | |
申請人 | 編輯 | 編輯 | 申請人編輯角色 | |
申請人 | 可讀 | 可讀 | 申請人可讀角色 |
make debug-django
使用Docker Compose,您可以連接到運行的容器(基本上等於docker compose up
無需-d
標誌),並通過Stdin進行交互。
docker compose attach django
這將使您能夠
一個。將信號發送到容器
b。當應用程序運行到breakpoint
時,請滴到PDB外殼
由於Dev Config運行了在文件更改上重新加載的Django開發服務器,因此保存文件後立即插入這些斷點是有效的。
按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版本需要保持ember-camac-ng
要啟用django-silk
進行分析,只需將DJANGO_ENABLE_SILK=True
添加到您的django/.env
文件。然後重新啟動Django容器,然後瀏覽到http://ebau.local/api/silk/。
要從demo
配置轉換為kt_bern
,必須確保前端應用程序佔據正確的環境變量。
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)碰撞,僅在django/.env
中設置為True
時,才會啟動ENABLE_PTVSD_DEBUGGER
。
為了通過身份驗證與/graphql
端點進行交談,您可以安裝GraphQl工具(非常類似於Postman)。您可能在這裡考慮的工具:
GWR模塊是在兩個單獨的存儲庫中開發的:
如果使用GWR模塊,則需要根據GWR後端的文檔生成Fernet鍵。
您需要在Env文件中的每個環境/服務器中設置此密鑰。為每個環境生成一個單獨的密鑰,因為這用於存儲 /讀取GWR用戶密碼。
API應以某種方式設計,以允許任何EBAU項目使用它。對於所需的自定義,以下規則適用:
有關不同的功能標誌和權限,請參見settings.py中的APPLICATIONS
。
在開發模式下,該應用程序被配置為將所有電子郵件發送到郵寄台實例,因此,除非您指定其他內容,否則不會從開發環境中發送電子郵件。
您可以通過http://ebau.local/mailpit/訪問郵寄。任何發送的電子郵件都將立即看到。
一節收集有關模塊和州的信息。本節旨在促進知識轉移,度假交換和調試支持案件。
KT中使用的模塊。 SZ和KT。烏爾(很快),在決定後伴隨著施工過程。市政當局(直到現在,只有案件被涵蓋在牽頭當局是市政當局的地方),申請人通過一系列工作項目與文件進行互動。
有施工階段(“ Bauetappen”),由動態選擇的施工步驟組成。施工步驟是一系列的工作項目,通常遵循向申請人致辭的工作項目的模式,然後是一個或多個致力於市政當局的工作項目。申請人證實,他們遵守了定義的法規,並驗證了它。最終的工作項目允許Muncipality決定是繼續該過程還是重新開始施工步驟的開始。
該模塊由配置的工作流量大量定義。通過動態任務來處理哪些施工步驟以及執行哪些工作項目。構建步驟配置(例如哪個任務屬於哪個構造步驟)在屬於施工步驟的任務的元數據中配置。施工步驟本質上是一組任務,沒有代表它們的模型。
施工階段是帶有托兒所的多個實例工作項目。兒童案例包含施工步驟工作項目。初始化施工過程時會創建第一個施工階段。之後,可以通過對現有工作項目的創建工作項目突變(在狀態準備就緒)上創建工作項目突變來初始化施工階段。當心:為了確保只要施工監測過程未完成,就可以始終創建新的施工階段,請保持施工階段的工作項目,而施工階段的兒童案件已經完成。
核心邏輯主要包含在施工監視工作流程中,並形成了廣州的配置,施工監視的Caluma事件,模塊設置,一些自定義可見性和權限邏輯。
在Solothurn的州,我們為EBAU門戶使用自定義授權機制。 EBAU門戶只能從My..so.ch(他們的EGOV門戶網站軟件)登錄中使用。由於他們不提供OIDC授權,因此我們必須使用KeyCloak的代幣交換和直接裸露的模仿功能來實現自定義解決方案。
該授權旨在重述一個加密和簽名的JWT令牌,然後將其轉換為KeyCloak的常規OIDC JWT令牌:
測序圖
自動化器
參與者F作為Ebau門戶
參與者M作為Egov門戶
參與者b為ebau api
參與者K作為KeyCloak
f- >>+m:重定向到prestation
注意M的右:使用用戶數據加密和簽名的JWT令牌
M - >> -f:重定向到使用EGOV令牌登錄
f- >>+b:發送令牌(發佈到/api/v1/auth/token-exchange)
B- >> B:解密並驗證EGOV令牌,從令牌中提取用戶數據
B- >>+K:創建或更新用戶
k - >> b:返回用戶
b- >> k:與直接裸露的代幣交流
k - >> -b:用戶返回令牌
B- >> -f:返回令牌
要啟用該功能,必須進行以下配置:
默認情況下,KeyCloak已正確配置以支持此授權機制。為了配置另一個環境,請參考文檔
# .env
ENABLE_TOKEN_EXCHANGE =true
這將通過我們的Nginx代理上託管的虛擬EGOV門戶網站啟用該功能。為了使用EGOV門戶測試環境進行測試,我們需要設置更多的環境變量(可以在Vault中找到審查值):
# .env
EGOV_PORTAL_URL =****
EGOV_PRESTATION_PATH =****
# django/.env
TOKEN_EXCHANGE_JWT_ISSUER =****
TOKEN_EXCHANGE_JWT_SECRET =****
TOKEN_EXCHANGE_JWE_SECRET =****
該項目已在EUPL-1.2或培訓者下獲得許可。有關詳細信息,請參見許可證。