ใบอนุญาตอาคารอิเล็กทรอนิกส์สำหรับรัฐสวิส
พื้นที่เก็บข้อมูลนี้มีซอร์สโค้ดสำหรับเว็บแอปพลิเคชันที่ใช้ในการจัดการใบอนุญาตอาคารอิเล็กทรอนิกส์และกระบวนการที่เทียบเท่าในเขตสวิสของเบิร์น, กริสัน, ชเวย์, โซโลทเบิร์นและ 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 |
---|---|---|---|---|
NAV หลัก (ทรัพยากร) | ||||
รายการเอกสาร | แสดงรายการเอกสาร | |||
รายการงาน | แสดงรายการงาน | |||
เทมเพลต | จัดการเทมเพลตเอกสาร (DOCX) | |||
องค์กร / สิทธิ์ | จัดการองค์กรและสิทธิ์ของตัวเอง | |||
เนื้อหาคงที่ | เนื้อหาคงที่ตัวแก้ไข Markdown | |||
ส่วนประกอบข้อความ | จัดการตัวอย่างสำหรับการใช้งานในฟิลด์ข้อความ | |||
Subnav (อินสแตนซ์ทรัพยากร) | ||||
งาน | ดูและจัดการงาน | |||
รูปร่าง | ดูและแก้ไขแบบฟอร์มหลัก | |||
การกระจาย | รับข้อเสนอแนะจากองค์กรอื่น ๆ | |||
อเล็กซานเดรีย | การจัดการเอกสาร | |||
เทมเพลต | สร้างเอกสารจากเทมเพลต | |||
วารสาร | สมุดบันทึกความร่วมมือ | |||
ประวัติศาสตร์ | แสดงเหตุการณ์สำคัญและข้อมูลประวัติ | |||
สิ่งพิมพ์ | จัดการสิ่งพิมพ์ในหนังสือพิมพ์ | |||
การคัดค้าน | จัดการคัดค้าน | |||
รับผิดชอบ | กำหนดผู้ใช้ที่รับผิดชอบ | |||
การเรียกร้อง | ถามผู้สมัครสำหรับข้อมูลเพิ่มเติม | |||
การปฏิเสธ | อินสแตนซ์ปฏิเสธ | |||
การเรียกเก็บเงิน | จัดการรายการเรียกเก็บเงิน | |||
การตรวจสอบ | ทำการตรวจสอบที่มีโครงสร้าง | |||
การตรวจสอบบัญชี | แสดงการเปลี่ยนแปลงรูปแบบ |
สภาพแวดล้อมการพัฒนาที่ต้องการขึ้นอยู่กับนักเทียบท่า
เพื่อการพัฒนาในท้องถิ่น:
Python:
Ember:
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 | ผู้ดูแลระบบ | ผู้ดูแลระบบ | ผู้ดูแลระบบ | |
การเผยแพร่ | คนขี้อาย | คนขี้อาย | ||
kt_uri | ผู้ดูแลระบบ | ผู้ดูแลระบบ | ผู้ดูแลระบบ | |
พอร์ทัล | พอร์ทัล | พอร์ทัล | ||
kt_bern | ผู้ดูแลระบบ | ผู้ใช้ | ผู้ใช้ | |
kt_gr | ผู้ดูแลระบบ | ผู้ดูแลระบบ | ผู้ดูแลระบบ | |
ผู้สมัคร | บรรณาธิการ | บรรณาธิการ | บทบาทบรรณาธิการผู้สมัคร | |
ผู้สมัคร | อย่างอ่านอย่างเดียว | อย่างอ่านอย่างเดียว | ผู้สมัครรับบทบาทอย่างเดียว | |
kt_so | ผู้ดูแลระบบ | ผู้ดูแลระบบ | ผู้ดูแลระบบ | |
ผู้สมัคร | บรรณาธิการ | บรรณาธิการ | บทบาทบรรณาธิการผู้สมัคร | |
ผู้สมัคร | อย่างอ่านอย่างเดียว | อย่างอ่านอย่างเดียว | ผู้สมัครรับบทบาทอย่างเดียว |
make debug-django
ด้วยนักเทียบท่าที่เขียนไว้คุณ -d
แนบไปยัง docker compose up
ที่ทำงานได้
docker compose attach django
สิ่งนี้จะช่วยให้คุณได้
. ส่งสัญญาณไปยังคอนเทนเนอร์
ข. วางลงในเชลล์ PDB เมื่อแอปพลิเคชันทำงานลงใน breakpoint
เนื่องจาก dev config รันเซิร์ฟเวอร์การพัฒนา Django ที่โหลดซ้ำในการเปลี่ยนแปลงไฟล์การแทรกจุดพักเหล่านั้นจะมีผลทันทีหลังจากบันทึกไฟล์
กด CTRL-p + CTRL-q
หมายเหตุ: ตั้งแต่ค่าเริ่มต้นกระบวนการ attach
จะส่งต่อสัญญาณไปยังคอนเทนเนอร์คุณจะต้องออกจากการกด Said Sequence (ซึ่งเป็นการตั้งค่าเริ่มต้นสำหรับ --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 ทั่วไปช่วยให้เราสามารถแชร์รหัส (เช่น addons) ระหว่างแอพซึ่งเป็นส่วนหนึ่งของ repo นี้ (แทนที่จะทำตามวิธีการทั่วไปของการเผยแพร่เผยแพร่ใน 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
หนึ่งต้องตรวจสอบให้แน่ใจว่าแอพส่วนหน้าใช้ตัวแปรสภาพแวดล้อมที่เหมาะสม
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 คุณจะต้องสร้างคีย์ Fernet ตามเอกสารของแบ็กเอนด์ GWR
คุณต้องตั้งค่าคีย์นี้ในแต่ละสภาพแวดล้อม/เซิร์ฟเวอร์ในไฟล์ Env ของคุณ สร้างคีย์แยกต่างหากสำหรับแต่ละสภาพแวดล้อมเนื่องจากใช้เพื่อจัดเก็บ / อ่านรหัสผ่านผู้ใช้ GWR
API ควรได้รับการออกแบบในทางที่ช่วยให้สามารถใช้งานได้โดยโครงการ EBAU ใด ๆ สำหรับการปรับแต่งที่จำเป็นใช้กฎต่อไปนี้:
สำหรับธงฟีเจอร์และสิทธิ์ที่แตกต่างกันดู APPLICATIONS
ในการตั้งค่า py
ในโหมดการพัฒนาแอปพลิเคชันได้รับการกำหนดค่าให้ส่งอีเมลทั้งหมดไปยังอินสแตนซ์ MailPit ดังนั้นหากคุณไม่ระบุสิ่งอื่นใดจะไม่มีการส่งอีเมลออกจากสภาพแวดล้อมการพัฒนา
คุณสามารถเข้าถึง MailPit ผ่าน http: //ebau.local/mailpit/ อีเมลใด ๆ ที่ส่งออกจะปรากฏขึ้นทันทีที่นั่น
ส่วนเพื่อรวบรวมข้อมูลเกี่ยวกับโมดูลและรัฐ ส่วนนี้มีวัตถุประสงค์เพื่ออำนวยความสะดวกในการถ่ายโอนความรู้ส่งมอบวันหยุดและการดีบักกรณีสนับสนุน
โมดูลที่ใช้ใน KT SZ และ KT UR (เร็ว ๆ นี้) ซึ่งมาพร้อมกับกระบวนการก่อสร้างหลังจากการตัดสินใจ เทศบาล (จนถึงขณะนี้มีเพียงกรณีเดียวที่ได้รับความคุ้มครองซึ่งหน่วยงานหลักคือเทศบาล) และผู้สมัครมีปฏิสัมพันธ์ผ่านรายการงานที่มีเอกสาร
มีขั้นตอนการก่อสร้าง ("Bauetappen") ซึ่งประกอบด้วยขั้นตอนการก่อสร้างที่เลือกได้แบบไดนามิก ขั้นตอนการก่อสร้างเป็นชุดของรายการงานซึ่งมักจะเป็นไปตามรูปแบบของการเริ่มต้นด้วยรายการงานที่ส่งไปยังผู้สมัครตามด้วยหนึ่งรายการหรือมากกว่าหนึ่งรายการที่ส่งไปยังเทศบาล ผู้สมัครยืนยันว่าพวกเขาได้ปฏิบัติตามกฎระเบียบที่กำหนดไว้และความผิดพลาดจะตรวจสอบ รายการงานสุดท้ายอนุญาตให้ Muncipality ตัดสินใจว่าจะดำเนินการต่อหรือไม่ที่จะเริ่มต้นใหม่ไปยังจุดเริ่มต้นของขั้นตอนการก่อสร้าง
โมดูลถูกกำหนดอย่างหนักโดยเวิร์กโฟลว์ที่กำหนดค่า ขั้นตอนการก่อสร้างใดและดังนั้นรายการงานที่ดำเนินการจะถูกจัดการผ่านงานแบบไดนามิก การกำหนดค่าขั้นตอนการก่อสร้าง (เช่นงานที่เป็นของขั้นตอนการก่อสร้าง) ได้รับการกำหนดค่าในเมตาของงานที่เป็นของขั้นตอนการก่อสร้าง ขั้นตอนการก่อสร้างนั้นเป็นการจัดกลุ่มงานเป็นหลักไม่มีแบบจำลองที่เป็นตัวแทนของพวกเขา
ขั้นตอนการก่อสร้างเป็นรายการงานหลายรายการที่มีกรณีเด็ก กรณีเด็กมีรายการการทำงานขั้นตอนการก่อสร้าง ขั้นตอนการก่อสร้างครั้งแรกถูกสร้างขึ้นเมื่อเริ่มต้นกระบวนการตรวจสอบการก่อสร้าง หลังจากนั้นขั้นตอนการก่อสร้างใหม่สามารถเริ่มต้นได้โดยการกลายพันธุ์ของรายการงานในรายการงานที่มีอยู่ (ในสถานะพร้อม) ระวัง: เพื่อให้แน่ใจว่าสามารถสร้างขั้นตอนการก่อสร้างใหม่ได้เสมอตราบใดที่กระบวนการตรวจสอบการก่อสร้างยังไม่เสร็จสมบูรณ์
ตรรกะหลักมีอยู่ส่วนใหญ่ในเวิร์กโฟลว์การตรวจสอบการก่อสร้างและการกำหนดค่าแบบฟอร์มของแคนตันเหตุการณ์ Caluma สำหรับการตรวจสอบการก่อสร้างการตั้งค่าโมดูลการมองเห็นที่กำหนดเองและตรรกะการอนุญาต
ในเขต Solothurn เราใช้กลไกการอนุญาตที่กำหนดเองสำหรับพอร์ทัล EBAU พอร์ทัล EBAU สามารถใช้กับการเข้าสู่ระบบจาก my.so.ch ซอฟต์แวร์ EGOV Portal ของพวกเขาเท่านั้น เนื่องจากพวกเขาไม่ได้เสนอการอนุญาต OIDC เราจึงต้องใช้โซลูชันที่กำหนดเองโดยใช้การแลกเปลี่ยนโทเค็นของ Keycloak และคุณสมบัติการเลียนแบบเปลือยเปล่าโดยตรง
การอนุญาตถูกออกแบบมาเพื่อ retreive โทเค็น JWT ที่เข้ารหัสและลงนามซึ่งจะถูกแปลงเป็นโทเค็น OIDC JWT ปกติโดย Keycloak:
ลำดับ
จำนวนอัตโนมัติ
ผู้เข้าร่วม F เป็นพอร์ทัล EBAU
ผู้เข้าร่วม m เป็นพอร์ทัล egov
ผู้เข้าร่วม B เป็น EBAU API
ผู้เข้าร่วม k เป็น keycloak
f->>+m: เปลี่ยนเส้นทางไปเป็นการโพรบ
หมายเหตุขวาของ 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
สิ่งนี้จะช่วยให้คุณลักษณะนี้มีพอร์ทัล Egov Dummy ที่โฮสต์บนพร็อกซี Nginx ของเรา ในการทดสอบกับสภาพแวดล้อมการทดสอบพอร์ทัล 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-or-Later ดูใบอนุญาตสำหรับรายละเอียด