瑞士州的电子建筑许可证申请。
该存储库包含用于处理电子建筑许可证和可比较过程的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或培训者下获得许可。有关详细信息,请参见许可证。