Aplikasi Izin Bangunan Elektronik untuk Kanton Swiss.
Repositori ini berisi kode sumber untuk aplikasi web yang digunakan untuk menangani izin bangunan elektronik dan proses yang sebanding di Kanton Swiss Berne, Grison, Schwyz, Solothurn dan URI.
Gambar berikut menunjukkan tinjauan tingkat tinggi arsitektur:
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
Karena pekerjaan modernisasi yang sedang berlangsung, beberapa modul frontend belum terintegrasi dalam ember-ebau
, tetapi sebaliknya masih merupakan bagian dari ember-camac-ng
. Beberapa modul frontend belum menjadi bagian dari repositori ini. Tabel berikut mencantumkan modul paling penting di bagian "internal" dari aplikasi dan keadaan kelengkapan / integrasi masing -masing (dalam konfigurasi demo
).
Modul | Keterangan | Backend | Frontend | Bagian dari Ember-Ebau |
---|---|---|---|---|
Nav Utama (Sumber Daya) | ||||
Daftar berkas | Tunjukkan daftar dokumen | ✔️ | ✔️ | ✔️ |
Daftar tugas | Tunjukkan daftar tugas | ✔️ | ✔️ | ✔️ |
Template | Kelola Template Dokumen (DOCX) | ✔️ | ✔️ | ✔️ |
Organisasi / Izin | Kelola organisasi dan izin sendiri | ✔️ | ✔️ | ✔️ |
Konten statis | Konten Statis, Editor Markdown | ✔️ | ✔️ | ✔️ |
Komponen teks | Kelola cuplikan untuk penggunaan di bidang teks | ✔️ | ⏳ | ⏳ |
Subnav (Sumber Daya Instal) | ||||
Tugas | Lihat dan Kelola Tugas | ✔️ | ✔️ | ✔️ |
Membentuk | Lihat dan Edit Formulir Utama | ✔️ | ✔️ | ✔️ |
Distribusi | Dapatkan umpan balik dari organisasi lain | ✔️ | ✔️ | ✔️ |
Alexandria | Manajemen dokumen | ✔️ | ✔️ | ✔️ |
Templat | Menghasilkan dokumen dari template | ✔️ | ✔️ | ✔️ |
Jurnal | Notebook kolaboratif | ✔️ | ✔️ | ✔️ |
Sejarah | Menunjukkan tonggak sejarah dan data historis | ✔️ | ✔️ | ✔️ |
Publikasi | Kelola publikasi di koran | ✔️ | ✔️ | ✔️ |
Keberatan | Kelola keberatan | ✔️ | ✔️ | ✔️ |
Bertanggung jawab | Tetapkan pengguna yang bertanggung jawab | ✔️ | ✔️ | ✔️ |
Klaim | Minta pelamar untuk info tambahan | ✔️ | ✔️ | ✔️ |
Penolakan | Tolak contoh | ✔️ | ✔️ | ✔️ |
Penagihan | Mengelola entri penagihan | ✔️ | ✔️ | ✔️ |
Audit | Melakukan audit terstruktur | ✔️ | ✔️ | ⏳ |
Audit-log | Menunjukkan perubahan bentuk | ✔️ | ⏳ | ⏳ |
Lingkungan pengembangan yang disukai didasarkan pada Docker.
Untuk pengembangan lokal:
Python:
Bara:
Docker dapat digunakan untuk mendapatkan Ebau dan berjalan dengan cepat. Skrip berikut memandu Anda melalui proses pengaturan. Kami merekomendasikan menggunakan konfigurasi kt_gr
atau kt_so
untuk saat ini, karena kanton lain masih mengandalkan komponen warisan untuk area internal yang bukan bagian dari repositori ini.
make start-dev-env
Jika Anda ingin memodifikasi secara manual /etc /host domain berikut perlu menunjuk ke 127.0.0.1 (localhost):
ebau-portal.local ebau.local ebau-keycloak.local ember-ebau.local ebau-rest-portal.local
Untuk pemeriksaan otomatis selama komit (pemformatan, sering) Anda dapat mengatur kait git dengan perintah berikut:
pip install pre-commit
pre-commit install
Setelah itu, Anda harus dapat menggunakan layanan berikut:
Akun administrator berikut hadir di Keycloak atau DB, masing -masing:
Aplikasi | Peran | Nama belakang | Kata sandi | Catatan |
---|---|---|---|---|
demo | Admin | pengguna | pengguna | |
kt_schwyz | Admin | admin | admin | |
Publikasi | Adsy | Adsy | ||
kt_uri | Admin | admin | admin | |
PortalUser | Portal | Portal | ||
KT_BERN | Admin | pengguna | pengguna | |
kt_gr | Admin | admin | admin | |
Pemohon | editor | editor | Peran Editor Pelamar | |
Pemohon | readonly | readonly | Peran Readyly Pelamar | |
kt_so | Admin | admin | admin | |
Pemohon | editor | editor | Peran Editor Pelamar | |
Pemohon | readonly | readonly | Peran Readyly Pelamar |
make debug-django
Dengan Docker Compose, Anda dapat melampirkan ke wadah yang berjalan (pada dasarnya setara dengan docker compose up
tanpa bendera -d
) dan berinteraksi melalui Stdin.
docker compose attach django
Ini akan memungkinkan Anda untuk melakukannya
A. Kirim sinyal ke wadah
B. turun ke shell PDB saat aplikasi berjalan ke breakpoint
Karena konfigurasi dev menjalankan server pengembangan Django yang memuat ulang pada perubahan file, memasukkan breakpoint tersebut efektif segera setelah menyimpan file.
Tekan CTRL-p + CTRL-q
Catatan: Karena secara default proses attach
akan meneruskan sinyal ke wadah yang harus Anda keluar dari urutan yang ditekan tersebut (yang merupakan pengaturan default untuk --detach-keys
dan dapat diganti). Menekan CTRL-c
Namun tidak hanya akan membunuh TTY tetapi juga mengirim Sigint ke wadah dan menghentikannya.
Dokumen: 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
Karena ini adalah proyek besar dengan banyak file, pengaturan default Ember mungkin akan gagal membangun kembali dengan benar karena tidak dapat menonton semua file tersebut.
Untuk memperbaikinya, instal WatchMan sebagai pengamat file dan sesuaikan pengaturan inotify
:
echo fs.inotify.max_user_watches=1000000 | sudo tee -a /etc/sysctl.conf # adjust settings
sudo sysctl -p # re-read config
Pastikan bahwa perintah yang terakhir hanya mengembalikan satu nilai, jika tidak, pengaturannya digandakan dan perlu dibersihkan.
Namun perhatikan bahwa aplikasi ember-caluma-portal
, ember-camac-ng
, ember-ebau
dan Addon ember-ebau-core
berbagi pohon modul node yang sama melalui ruang kerja PNPM.
Ruang kerja PNPM yang umum memungkinkan kami untuk berbagi kode (misalnya addons) antara aplikasi yang merupakan bagian dari repo ini (alih -alih mengikuti pendekatan khas penerbitan rilis pada NPM). Ini juga berarti itu
node_modules
ember-caluma-portal
dan ember-camac-ng
perlu disimpan secara sinkron Untuk mengaktifkan django-silk
untuk profil, cukup tambahkan DJANGO_ENABLE_SILK=True
untuk file django/.env
Anda. Kemudian restart wadah Django dan telusuri ke http: //ebau.local/api/silk/.
Untuk beralih dari konfigurasi demo
ke kt_bern
, orang harus memastikan bahwa aplikasi Frontend mengambil variabel lingkungan yang tepat.
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
Pengaturan Debugger jarak jauh untuk VS Code berkomitmen untuk repositori.
.vscode/launch.json
. Untuk mengaktifkan debugging dalam wadah Django, server PTVSD harus dimulai. Karena server debug ini bertabrakan dengan pengaturan lain (pycharm, pydev) itu hanya akan dimulai jika env var ENABLE_PTVSD_DEBUGGER
diatur ke True
di django/.env
.
Untuk berbicara dengan titik akhir /graphql
dengan otentikasi, Anda dapat menginstal alat GraphQL (seperti pos pos). Alat yang mungkin Anda pertimbangkan di sini:
Modul GWR dikembangkan dalam dua repositori terpisah:
Jika Anda menggunakan modul GWR, Anda perlu menghasilkan kunci Fernet sesuai dengan dokumentasi backend GWR.
Anda perlu mengatur kunci ini di setiap lingkungan/server di file Env Anda. Hasilkan kunci terpisah untuk setiap lingkungan, karena ini digunakan untuk menyimpan / membaca kata sandi pengguna GWR.
API harus dirancang dengan cara tertentu, yang memungkinkannya digunakan oleh proyek EBAU apa pun. Untuk kustomisasi yang dibutuhkan, aturan berikut berlaku:
Untuk bendera dan izin fitur yang berbeda, lihat APPLICATIONS
di settings.py.
Dalam mode pengembangan, aplikasi dikonfigurasi untuk mengirim semua email ke instance MailPit, jadi kecuali Anda menentukan sesuatu yang lain, tidak ada email yang akan dikirim dari lingkungan pengembangan.
Anda dapat mengakses mailpit melalui http: //ebau.local/mailpit/. Setiap email yang dikirim akan langsung terlihat di sana.
Bagian untuk mengumpulkan informasi tentang modul dan kanton. Bagian ini dimaksudkan untuk memfasilitasi transfer pengetahuan, penyerahan liburan dan kasus pendukung debugging.
Modul yang digunakan dalam KT. SZ dan KT. Ur (Soon-ish), yang menyertai proses konstruksi setelah keputusan. Kotamadya (hingga sekarang hanya kasus-kasus yang dicakup di mana otoritas utama adalah kotamadya) dan pemohon berinteraksi melalui serangkaian item kerja dengan dokumen.
Ada tahap konstruksi ("Bauetappen"), yang terdiri dari langkah -langkah konstruksi yang dapat dipilih secara dinamis. Langkah-langkah konstruksi adalah serangkaian item kerja, yang biasanya mengikuti pola memulai dengan item kerja yang ditujukan kepada pemohon, diikuti oleh satu atau lebih item pekerjaan yang ditujukan kepada kotamadya. Pemohon mengkonfirmasi, bahwa mereka telah mematuhi peraturan yang ditentukan, dan muncipality memverifikasi itu. ITEM kerja akhir memungkinkan muncipality untuk memutuskan apakah akan melanjutkan proses atau mengulangi ke awal langkah konstruksi.
Modul ini sangat ditentukan oleh alur kerja yang dikonfigurasi. Langkah-langkah konstruksi mana dan oleh karena itu item pekerjaan mana yang dilakukan ditangani melalui tugas-tugas dinamis. Konfigurasi Langkah Konstruksi (seperti tugas mana yang termasuk dalam langkah konstruksi) dikonfigurasi dalam meta tugas milik langkah konstruksi. Langkah -langkah konstruksi pada dasarnya adalah pengelompokan tugas, tidak ada model yang mewakili mereka.
Tahap konstruksi adalah item kerja multipel dengan kasus anak. Kasus anak berisi langkah-langkah kerja konstruksi. Tahap konstruksi pertama dibuat saat menginisialisasi proses pemantauan konstruksi. Setelah itu, tahap konstruksi baru dapat diinisialisasi dengan membuat mutasi kerja-item pada item kerja yang ada (dalam status siap). Waspadalah: Untuk memastikan bahwa tahap konstruksi baru selalu dapat dibuat selama proses pemantauan konstruksi belum selesai, barang -barang pekerjaan tahap konstruksi tetap siap, sedangkan case anak tahap konstruksi telah selesai.
Logika inti terkandung terutama dalam alur kerja pemantauan konstruksi dan bentuk konfigurasi Canton, peristiwa Caluma untuk pemantauan konstruksi, pengaturan modul, beberapa visibilitas khusus dan logika izin.
Di Kanton Solothurn kami menggunakan mekanisme otorisasi khusus untuk Portal Ebau. Portal Ebau hanya dapat digunakan dengan login dari my.so.ch, perangkat lunak portal Egov mereka. Karena mereka tidak menawarkan otorisasi OIDC, kami harus mengimplementasikan solusi khusus menggunakan pertukaran token Keycloak dan fitur peniruan telanjang langsung.
Otorisasi ini dirancang untuk mengambil kembali token JWT terenkripsi dan ditandatangani yang kemudian dikonversi menjadi token JWT OIDC reguler oleh Keycloak:
Sequencediagram
bilangan auton
Peserta f sebagai Portal Ebau
Peserta M Sebagai Egov Portal
Peserta B As Ebau API
Peserta K sebagai Keycloak
F->>+m: redirect ke prestation
Catatan Hak M: Token JWT Dienkripsi dan Ditandatangani dengan Data Pengguna
M->>-f: Redirect to login dengan token egov
F->>+b: Kirim token (posting ke/API/V1/auth/token-exchange)
B->> B: mendekripsi dan memverifikasi token egov, mengekstrak data pengguna dari token
B->>+k: Buat atau perbarui pengguna
K->> B: Pengguna Kembali
B->> k: pertukaran token dengan peniruan telanjang langsung
K->>-B: Token Kembalikan untuk Pengguna
B->>-F: Token Kembali
Untuk mengaktifkan fitur, konfigurasi berikut harus dilakukan:
Secara default keycloak sudah dikonfigurasi dengan benar untuk mendukung mekanisme otorisasi ini. Untuk mengonfigurasi lingkungan lain, silakan merujuk ke dokumentasi
# .env
ENABLE_TOKEN_EXCHANGE =true
Ini akan memungkinkan fitur dengan portal egov dummy yang di -host di proxy nginx kami. Untuk menguji dengan lingkungan uji portal EGOV, kita perlu mengatur beberapa variabel lingkungan (nilai yang disensor dapat ditemukan di lemari besi):
# .env
EGOV_PORTAL_URL =****
EGOV_PRESTATION_PATH =****
# django/.env
TOKEN_EXCHANGE_JWT_ISSUER =****
TOKEN_EXCHANGE_JWT_SECRET =****
TOKEN_EXCHANGE_JWE_SECRET =****
Proyek ini dilisensikan di bawah EUPL-1.2-atau-Later. Lihat lisensi untuk detailnya.