diff --git a/.github/workflows/product-page-deploy.yml b/.github/workflows/product-page-deploy.yml index d41ab013..5a8787ee 100644 --- a/.github/workflows/product-page-deploy.yml +++ b/.github/workflows/product-page-deploy.yml @@ -8,12 +8,11 @@ on: permissions: contents: write -# Lets cheat and use open catalogi for now jobs: build: runs-on: ubuntu-latest steps: - - name: Create an Open Catalogi page + - name: Create the Product Page uses: OpenCatalogi/productpage-action@1.0.9 with: github_repository_name_as_prefix: false diff --git a/README.md b/README.md index 0ee84f68..34bde4c2 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,14 @@ > > Meer weten over deze oplossing? Dat kan! Hiervoor hebben we een apart [Slack kanaal](https://samenorganiseren.slack.com/archives/C067Q3UE9F0) binnen Common Ground. We helpen je daar graag verder. Uiteraard kan je ook altijd mailen naar [info@conduction.nl](mailto:info@conduction.nl) > -> Tevens worden vanuit de aangesloten leveranciers worden regelmatig webinars georganiseerd. -> - [10 April 10:00 | Community Meeting](https://www.linkedin.com/events/openwoo-appcommunitymeetingapri7173404269205770241/comments/). -> - [25 Maart 13:13 | Webinar Sim-Groep](https://www.simgroep.nl/toekomstbestendige-woo-oplossing) +> Tevens worden vanuit de aangesloten leveranciers worden regelmatig webinars georganiseerd. +> +> - [8 Mei 13:00 | Community Meeting](https://www.linkedin.com/events/openwoo-appcommunitymeetingmei7184090446346768385/comments/). > > Terug kijken afgelopen webinars en meetings? > +> - [10-04-2024 | Community Meeting](https://www.youtube.com/watch?v=zMqElLzy0BM). +> - [25-03-2024 | Sim-Groep Webinar](https://www.simgroep.nl/toekomstbestendige-woo-oplossing) > - [13-03-2024 | Community Meeting](https://www.youtube.com/watch?v=TNZghskRu5c). > - [14-02-2024 | Community meeting](https://www.youtube.com/watch?v=ri5U8x-lsxo) > - [30-01-2024 | OpenGemeente Woobinar](https://vimeo.com/909134953) diff --git a/assets/PentTestSlack.png b/assets/PentTestSlack.png new file mode 100644 index 00000000..2584f81f Binary files /dev/null and b/assets/PentTestSlack.png differ diff --git a/docs/CommonGround.puml b/docs/CommonGround.puml new file mode 100644 index 00000000..f4eb2ceb --- /dev/null +++ b/docs/CommonGround.puml @@ -0,0 +1,43 @@ +@startuml +title Commonground +footer: OpenWoo.app +header: OpenWoo.app + +' Publicatie platformen (Laag 5 UI) +frame "Publicatie platformen " { + actor "KOOP" as KOOP #cce5ff + actor "WOOGLE" as WOOGLE #cce5ff + interface "Website" AS Website #1abc9c + interface "Thema site" as Themasite #1abc9c + interface "Zoek pagina" as Searchsite #1abc9c +} + +' Services(Laag 4) +frame "Services" { + process "OpenWoo Service" as OWS #1abc9c +} + +' Integratie (Laag 3) +frame "Integratie" { + database "Open Index" as OI #1abc9c +} + +' Bronnen (Laag 2) +frame "API" { + component "Bronnen" as Bronnen #cce5ff +} + +' Relationships +KOOP -down-> OI : Indexeerd (XML Sitemap) +WOOGLE -down-> OI : Indexeerd (API) +Website -down-> OI : Bevraagd (API) +Themasite -down-> OI : Bevraagd (API) +Searchsite -down-> OI : Bevraagd (API) +OWS ..> OI: Slaat op in + +OWS -down-> Bronnen : Scrapes periodically\nUses as source + +' Notifications +Bronnen -up-> OWS : Notifies of changes or deletes + +@enduml \ No newline at end of file diff --git a/docs/Datamask.puml b/docs/Datamask.puml new file mode 100644 index 00000000..892d5429 --- /dev/null +++ b/docs/Datamask.puml @@ -0,0 +1,47 @@ +@startuml +title Samenwerking OpenWoo.app en Datamask +footer: OpenWoo.app +header: OpenWoo.app + + +' Publicatie platformen (Laag 5 UI) +frame "Publicatie platformen " { + actor "KOOP" as KOOP #008b6C + actor "WOOGLE" as WOOGLE #008b6C + interface "Website" AS Website #008b6C + interface "Publicatie pagina" as PublicatiePagina #F16E06 +} + + + +' Integratie (Laag 3) +frame "Integratie" { + database "Open Index" as OI #008b6C + component "Federatieve Connectie" as FCS #008b6C + process "OpenWoo Service" as OWS #008b6C +} + +' Bronnen (Laag 2) +frame "API" { + database "Datamask" as DatamaskDB #F16E06 +} + +frame "Legenda" { + component "OpenWoo.app" #008b6C + component "Datamask" #F16E06 + + + +} + +OWS <-- DatamaskDB: Woo verzoeken +OWS ..> OI: Slaat op in + +FCS --> OI : Bevraagd + +KOOP -down-> FCS : Indexeerd (XML Sitemap) +WOOGLE -down-> FCS : Indexeerd (API) +Website -down-> OI : Bevraagd (API) +PublicatiePagina -down-> OI : Bevraagd (API) + +@enduml \ No newline at end of file diff --git a/docs/Federatie.puml b/docs/Federatie.puml index 571b434c..9cf26482 100644 --- a/docs/Federatie.puml +++ b/docs/Federatie.puml @@ -1,25 +1,41 @@ @startuml title Federatie -' User Interface Component -interface "Landelijke API" as Api #1abc9c -' Backend Components -component "NLX/FSC/FDS" as NLX #cce5ff -component "Motorblok" as Org1 #1abc9c -component "Motorblok" as Org2 #1abc9c -component "Motorblok" as Org3 #1abc9c -component "Bronnen" as BronnenOrg1 #cce5ff -component "Bronnen" as BronnenOrg2 #cce5ff -component "Bronnen" as BronnenOrg3 #cce5ff +frame "Landelijke voorziening 1" { + interface "Koophulpje" as KOOP #1abc9c + component "Landelijke API" as Api #1abc9c + component "NLX Outway" as NLX #cce5ff +} + +frame "Organisatie 1" { + component "NLX Inway" as Org1 #cce5ff + component "Open Index" as OI1 #1abc9c + component "Bronnen" as BronnenOrg1 #cce5ff +} + +frame "Organisatie 2" { + component "NLX Inway" as Org2 #cce5ff + component "Open Index" as OI2 #1abc9c + component "Bronnen" as BronnenOrg2 #cce5ff +} + +frame "Organisatie 3" { + component "Open Index" as OI3 #1abc9c + component "Bronnen" as BronnenOrg3 #cce5ff +} ' Relationships -Api -down-> NLX : Connected trough outway -NLX -down-> Org1 : org 1 Connected trough inway -NLX -down-> Org2 : org 2 Connected trough inway -NLX -down-> Org3 : org 3 Connected trough inway -Org1 -down-> BronnenOrg1 : Internal connection -Org2 -down-> BronnenOrg2 : Internal connection -Org3 -down-> BronnenOrg3 : Internal connection +KOOP -down-> Api : Ajax call +Api -down-> NLX : Bevragen via NLX +Api -down-> OI3 : Federatieve zoekvraag +NLX -down-> Org1 : Federatieve zoekvraag +NLX -down-> Org2 : Federatieve zoekvraag +Org1 -down-> OI1 : Bevragen bij de bron +Org2 -down-> OI2 : Bevragen bij de bron +OI1 -down-> BronnenOrg1 : Internal connection +OI1 --> OI2: Zoeken bij de buren +OI2 -down-> BronnenOrg2 : Bevragen bij de bron +OI3 -down-> BronnenOrg3 : Bevragen bij de bron @enduml \ No newline at end of file diff --git a/docs/GOVERNANCE.md b/docs/GOVERNANCE.md index 09091e22..68b02b61 100644 --- a/docs/GOVERNANCE.md +++ b/docs/GOVERNANCE.md @@ -2,6 +2,12 @@ Het succes en de continue verbetering van het OpenWoo.app project zijn afhankelijk van een effectieve governance-structuur. Een belangrijk onderdeel van deze structuur is de stuurgroep, die verantwoordelijk is voor het beoordelen en prioriteren van de issues die op GitHub worden ingediend, en voor het bepalen welke daarvan worden opgenomen in de roadmap van het project. +## Community Meetings + +Iedereen die actief gebruik maakt OpenWoo.app of intresse heeft in de ontwikkeling hiervan is welkom op de maandenlijke community meeting. De community meetings zijn de plek waar we de roadmap doornemen daar proberen gemeenchapenlijk beslutien op te nemen + +De community meetings worden aangekondigd via openwoo.app. + ## Stuurgroep De Stuurgroep is samengesteld uit verschillende leden die een breed scala aan perspectieven en expertise inbrengen in het project. De huidige deelnemende leden van de stuurgroep zijn: diff --git a/docs/KLPD.puml b/docs/KLPD.puml new file mode 100644 index 00000000..da8fa4d9 --- /dev/null +++ b/docs/KLPD.puml @@ -0,0 +1,68 @@ +@startuml +title Algemene Architectuur en keuze mogenlijkheden +footer: OpenWoo.app +header: OpenWoo.app + + +' Publicatie platformen (Laag 5 UI) +frame "Publicatie platformen " { + interface "Woo Dashboard" AS OiDashboard #e5352c + actor "KOOP" as KOOP #008b6C + actor "WOOGLE" as WOOGLE #008b6C + interface "Website" AS Website #F16E06 + interface "Thema site" as Themasite #F16E06 + interface "Zoek pagina" as Searchsite #F16E06 +} + +' Services(Laag 4) +frame "Services" { + process "Backend for frontend" as OiBF #e5352c +} + +' Integratie (Laag 3) +frame "Integratie" { + database "Open Index" as OI #F16E06 + component "Federatieve Connectie" as FCS #008b6C + process "OpenWoo Service" as OWS #F16E06 + component "Integratie Platform" as IP #008b6C +} + +' Bronnen (Laag 2) +frame "API" { + database "Zaaksysteem (XXllNC)" as ZRC #008b6C + database "Raadsinformatiesysteem (Notubiz)" as RIS #008b6C + database "Bestuursinformatiesysteem (iBabs)" as BIS #008b6C + database "Website (Typo3)" as CMS #008b6C + database "DMS (Sharepoint)" as SP #008b6C + database "Archief (DeVault)" as DEPOT #008b6C +} + +frame "Legenda" { + component "Herbruikbaar" #008b6C + component "Uitbreiden (doorontwikkeling)" #F16E06 + component "Te ontwikkelen (nieuw)" #e5352c + + + +} + +OiDashboard -down-> OiBF +OWS --> IP: Bevraagd via +IP -down-> ZRC: Woo verzoeken +IP -down-> SP: Convenanten +IP -down-> RIS: Raadsstukken +IP -down-> BIS: Bestuursstukken +IP -down-> CMS: Organisatie gegevens +IP -down-> DEPOT: Gearchiveerde gegevens +OWS ..> OI: Slaat op in +OiBF --> OI: Beheerd + +FCS --> OI : Bevraagd + +KOOP -down-> FCS : Indexeerd (XML Sitemap) +WOOGLE -down-> FCS : Indexeerd (API) +Website -down-> FCS : Bevraagd (API) +Themasite -down-> FCS : Bevraagd (API) +Searchsite -down-> FCS : Bevraagd (API) + +@enduml \ No newline at end of file diff --git a/docs/partners/Datamask.md b/docs/partners/Datamask.md new file mode 100644 index 00000000..4879d856 --- /dev/null +++ b/docs/partners/Datamask.md @@ -0,0 +1,37 @@ +# Datamask +OpenWoo.app en Datamask willen graag een gemeenschappenlijek propositie voeren voor de WOO + +## Product Datamask +Datamask zet de kracht van haar reeds bestaande koppelingen vanuit haar anonimiserings tool (en e.v.t. publicatie platform) in + +Heeft wel +- Anonimesering +- Zoekindex a.h.v huidige koppelingen +- Organisatie breder publicatie pagina +- Beheerschermen en configuratie op de inrichting + +Heeft niet +- Federatief en organisatie overkoepelend zoeken + +## Product OpenWoo.app +Datamask zet de kracht van haar data federalisatie en common ground netwerk in. + +Heeft wel +- Federaliseren van indexen +- NL Design voorkant +- Volledig open source +- Koppeling met Koop +- Meezoeken in andere organisaties (samenwerkings verbanden, provincies etc) +- Ondersteuning vanuit het common ground programma + +Heeft niet +- Anonimeseringstool +- Beheers interface op het koppelvlak + +## Samenwerking +De samenwerking kan er redelijk simpel uitzien, Datamask kan als aditionele funtionaliteit publiceren richting OpenWoo.app (daarvoor moet de betreffende afnemer wel over het motorblok van OpenWoo.app en Datamask beschicken). Vervolgens kan OpenWoo.app deze data beschickbaar maken op haar federale netwerk en door publiceren naar KOOP en WOOGLE aanvullend kan Datamask ook gegevens ophalen vanuit OpenWoo.app en zo ook aanvullende catageorien naast verzoeken weergeven in haar publicatie platform. + + +## Architectuur + +![OpenWeb Architecture](https://raw.githubusercontent.com/ConductionNL/woo-website-template/main/docs/Datamask.svg) \ No newline at end of file diff --git a/docs/partners/KLPD.md b/docs/partners/KLPD.md new file mode 100644 index 00000000..537c1acb --- /dev/null +++ b/docs/partners/KLPD.md @@ -0,0 +1,3 @@ +# KLPD + + diff --git a/docs/product/Roadmap.md b/docs/product/Roadmap.md index 71bff537..ada171a2 100644 --- a/docs/product/Roadmap.md +++ b/docs/product/Roadmap.md @@ -2,19 +2,17 @@ Organisaties kunnen bijdragen aan deze roadmap door items aan te dragen, deze zelf op te pakken en uit te voeren, of door de uitvoering ervan te financieren. -## Raadsinformatie Systemen (Medio December) +## Raadsinformatie Systemen (Word momenteel ontwikkeld) **Inschatting: 40 uur per RIS** Medio september gaat de gebruikersgroep verkennen of het mogelijk is om ook de Raadsinformatiesystemen te ontsluiten via Open WOO. Deze ontwikkeling zal de dienstverlening naar de inwoners verbeteren door de transparantie van de gemeente te vergroten. Het draagt ook bij aan de invulling van de Wet Open Overheid door overheidsinformatie beter toegankelijk te maken. -## Robot.txt en sitemap.xml (Medio December) +## Inlezen vanuit sharepoint (Word momenteel onderzocht) -**Inschatting: 20 uur** - -Begin oktober wil KOOP graag de decentrale portalen harvesten om een centrale index op te bouwen. Dit zal de zoekbaarheid van overheidsinformatie verbeteren, wat de dienstverlening aan de inwoners ten goede komt. Het past ook binnen de kaders van de Wet Open Overheid door het vergroten van de toegankelijkheid van overheidsinformatie. +**Inschatting: 120 uur** -## Aanleveren DROP (Geen ontwikkeling gepland) +## Aanleveren DROP (Word momenteel onderzocht) **Inschatting: 120 uur** @@ -87,7 +85,11 @@ Het is mogelijk om de openwoo.app te installeren via een Helm Chart. Dit maakt h De serverless Woo-pagina kan ook geinstalleerd worden via een GitHub Action. Door de installatie te automatiseren wordt het gemakkelijker om de website te installeren en te onderhouden, wat de operationele kosten verlaagt en de betrouwbaarheid verhoogt. Dit draagt bij aan de dienstverlening door de beschikbaarheid van de website te vergroten. -## Roadmap WOO KOOP +## Inmiddels afgerond + +### Robot.txt en sitemap.xml (Medio December) + +Begin oktober wil KOOP graag de decentrale portalen harvesten om een centrale index op te bouwen. Dit zal de zoekbaarheid van overheidsinformatie verbeteren, wat de dienstverlening aan de inwoners ten goede komt. Het past ook binnen de kaders van de Wet Open Overheid door het vergroten van de toegankelijkheid van overheidsinformatie. ### Woo 1.0 @@ -96,3 +98,4 @@ Voor de eerste opzet van de Woo-index van BZK is het belangrijk dat organisaties ### Woo 2.0 BZK heeft de ambitie om aan de hand van een harvester een eigen index op te bouwen op open.overheid.nl. Deze harvester maakt gebruik van `robots.txt` en `sitemap.xml`-bestanden om de verschillende pagina's en metadata van de organisatiespecifieke index te vinden en over te nemen. Dat betekent dat ook binnen de 2.0 variant van Woo een eigen indexpagina noodzakelijk blijft. Sterker nog, de kwaliteit van de ontsluiting wordt in grote mate afhankelijk van de kwaliteit van de index. + diff --git a/docs/product/SECURITY.md b/docs/product/SECURITY.md index df188cca..a5a5db3a 100644 --- a/docs/product/SECURITY.md +++ b/docs/product/SECURITY.md @@ -2,20 +2,38 @@ Wij geloven in het integreren van beveiliging in de kern van ons ontwikkelingsproces. We maken gebruik van geautomatiseerde penetratietesten en scanning als onderdeel van onze Continuous Integration en Continuous Deployment (CI/CD) pipeline. Deze aanpak stelt ons in staat om mogelijke beveiligingskwetsbaarheden vroegtijdig te identificeren en aan te pakken, tijdens de ontwikkelingsfase in plaats van later in de productiefase. -## Geautomatiseerde Penetratietesten +## Design Principes +Goede beveiliging begint bij het ontwerp, dat geld zeker voor de Woo. We hebben er dan ook bewust voor gekozen om van de Woo index en publicatie platform een apparte applicatie te maken ten opzichte van de afhandel applicatie voor Woo verzoeken en annonimeserings tool. -Geautomatiseerde penetratietesttools zijn geïntegreerd in onze CI/CD-pipeline om aanvallen op onze systemen te simuleren en beveiligingszwaktes te identificeren. Deze tools voeren een reeks tests uit om te controleren op veelvoorkomende kwetsbaarheden, waaronder die vermeld staan in de OWASP Top 10. +We hebben daardoor als design principe kunnen afspreken dat de index géén persoon gegeven mag bevatten. Ofwel alleen maar gegevens die daadwerkelijk mogen worden gepubliceerd. Hiermee geven we ultieme invulling aan het concept dataminimalisatie. -De resultaten van deze tests worden vervolgens gebruikt om onze ontwikkelings- en beveiligingsteams te informeren over mogelijke kwetsbaarheden. Dit proces stelt ons in staat om deze kwetsbaarheden aan te pakken voordat de software wordt ingezet naar productie. +Een tweede design principe betreft bronnen, vanuit bronnen willen we alleen publieke informatie ontvangen. Hierop moet de bron een harde garantie kunnen afgeven aan de hand van autorisatie en filtering. Op deze manier voorkomen we per abuis toch persoons informatie kunnen ophalen. -## Scannen +Als derde principe hanteren we dat de index bij de bevraging op een individueel object altijd de data live bij de bron moet ophalen. Dit betekend los van data bij de bron ook dat in het geval van een interventie (vernietiging van een document omdat er per abuis persoons gegevens zijn opgenomen) dit document per direct niet meer kan worden uitgeleverd aan de voorkant. -Onze CI/CD-pipeline bevat ook geautomatiseerde scannertools die onze broncode, containers en cloud-infrastructuur controleren op beveiligingsproblemen. +Als vierde zou een bron altijd IP whitelisting moeten toepassen op de bevraging vanuit de OpenWoo service, zodat een eventueel ontvreemde authorisatie sleutel niet elders kan worden gebruikt. Gezamenlijk met filtering en sleutels formt dit de kern van onze multy layerd defence strategie. + +Gezamenlijk minimaliseren we op deze manier het risco bij een eventueel lek, in het meest extreme geval zou de volledige index en alle authorisatie sleutels kunnen worden onvreemd maar zou hierbij alsnog geen data worden verloren die niet reeds tot het publieke domein behoord. + + +## Als onderdeel van de development +Onze CI/CD-pipeline bevat ook geautomatiseerde scannertools die onze broncode, containers en cloud-infrastructuur controleren op beveiligingsproblemen. Broncodescanners analyseren onze code om beveiligingszwaktes te vinden, zoals die vermeld staan in de [OWASP](https://owasp.org/) Top 10-lijst van veelvoorkomende beveiligingsrisico's. Containerscanners inspecteren onze Docker- en andere containerimages op kwetsbaarheden, verkeerde configuraties en naleving van best practices. Dit sluit aan bij onze inzet om te voldoen aan de top tien tips voor containerbeveiliging. Cloudbeveiligingsscanners zorgen ervoor dat onze cloud-infrastructuur veilig is geconfigureerd, in overeenstemming met het principe van minimale rechten en andere best practices voor cloudbeveiliging. +## Gedurende productie +Security is echter geen 'one time' ding dat je eenmalig opzet, het vraagt continu aandacht en zorg. [Conduction]() neemt hier als beheerder van de code base verantwoordenlijkheid voor door het automatisch *dagenlijks* pentesten van zowel de productie als accepatie omgeving. Hierbij worden frontend en api los getest. +De resultaten van deze tests worden vervolgens gebruikt om onze ontwikkelings- en beveiligingsteams te informeren over mogelijke kwetsbaarheden. Dit proces stelt ons in staat om deze kwetsbaarheden aan te pakken voordat de software wordt ingezet naar productie. +## Zelf testen +- Internet.nl + + + +## Scannen + + ## Naleving van de Top Tien Tips voor Containerbeveiliging Om een robuuste beveiliging te waarborgen, houden we ons aan de top tien tips voor containerbeveiliging. Hier zijn enkele van de praktijken die we volgen: @@ -61,10 +79,12 @@ Ons systeem behandelt verschillende soorten gegevens, elk met verschillende beve ## Scheiding van Landingzone, Executionzone en Data -In onze opstelling maken we gebruik van NGINX- en PHP-containers om een ​​duidelijke scheiding van verantwoordelijkheden te waarborgen tussen internet/netwerktoegang, code-uitvoering en gegevensopslag. Deze ontwerpbenadering bevordert een robuuste beveiliging en verbeterde beheerbaarheid van onze applicaties en diensten. +In onze opstelling maken we gebruik van NGINX- en PHP-containers om een duidelijke scheiding van verantwoordelijkheden te waarborgen tussen internet/netwerktoegang, code-uitvoering en gegevensopslag. Deze ontwerpbenadering bevordert een robuuste beveiliging en verbeterde beheerbaarheid van onze applicaties en diensten. * **NGINX-containers als Landing Zone:** De eerste laag van onze architectuur bestaat uit NGINX-containers die dienen als een landing zone. NGINX is populaire open-source software die wordt gebruikt voor webserver, omgekeerde proxy, caching, load balancing en mediaserving, onder andere. In onze context gebruiken we het voornamelijk als een omgekeerde proxy en load balancer. Wanneer een verzoek binnenkomt vanaf het internet, komt het eerst bij de NGINX-container terecht. De rol van deze container is het verwerken van netwerkverkeer vanaf het internet, het uitvoeren van de nodige load balancing en het veilig doorsturen van verzoeken naar de juiste toepassingscontainers. Deze opstelling beschermt onze toepassingscontainers tegen directe blootstelling aan het internet en verbetert onze beveiligingspositie. * **PHP-containers als Execution Zone:** Nadat een verzoek is doorgestuurd door de NGINX-container, komt het terecht in de juiste PHP-container voor verwerking. Deze containers dienen als onze uitvoeringszone, waar toepassingslogica wordt uitgevoerd. Elke PHP-container draait een exemplaar van onze toepassing. Door de uitvoeringsomgeving op deze manier te isoleren, kunnen we ervoor zorgen dat problemen of kwetsbaarheden binnen één container geen invloed hebben op andere. Deze encapsulatie biedt een aanzienlijk beveiligingsvoordeel en maakt het gemakkelijker om individuele componenten van onze toepassing te beheren en schalen. * **Gegevensopslag buiten de cluster:** Voor gegevensopslag hanteren we de strategie om gegevens buiten de cluster te bewaren. Deze aanpak scheidt gegevens van de uitvoeringsomgeving en de netwerktoegangslaag, en biedt een extra beveiligingslaag. Gegevens die buiten de cluster zijn opgeslagen, kunnen grondig worden beschermd met specifieke beveiligingscontroles, versleuteling en back-upprocedures, onafhankelijk van de toepassing en netwerklagen. Deze driedelige benadering - NGINX-containers voor netwerktoegang, PHP-containers voor code-uitvoering en externe opslag voor gegevens - biedt ons een beveiligde, schaalbare en veerkrachtige architectuur. Het stelt ons in staat potentiële problemen te isoleren en elke laag onafhankelijk te beheren, waardoor onze mogelijkheid om onze diensten te onderhouden en te beveiligen wordt verbeterd. + + diff --git a/docs/techniek/Architectuur.md b/docs/techniek/Architectuur.md index c7408254..c367d536 100644 --- a/docs/techniek/Architectuur.md +++ b/docs/techniek/Architectuur.md @@ -88,16 +88,48 @@ De integratievoorziening "scraped" elke nacht alle relevante informatie en bouwt Het bovenstaande proces zorgt ervoor dat het zaaksysteem leidend is en dat zaken zowel kunnen worden gepubliceerd als worden gedepubliceerd. -## Federatie (via OpenCatalogi) +## Integraal (Organisatiebreed) zoeken +De kern van de Woo is het zoeken in de openbare informatie van een overheid organisatie, hierbij zou het in theorie niet mogen uitmaken in welke bron/applicatie informatie staat. Deze vorm van bron en domein overstijgend zoeken kennen we vanuit overheid architectuur al langer en noemen we doorgaans integrale zoekvraag. -OpenWoo.app maakt gebruik van het federatieve stelsel van [OpenCatalogi](https://opencatalogi.nl/) om verschillende integratievoorzieningen samen te binden. Hierbij verhoudt de organisatiespecifieke voorziening zich tot wat we binnen OpenCatalogi een catalogus noemen. +OpenWoo.app geeft invulling aan deze integrale zoekvraag door gebruik te maken van het commonground component [Open Index](), wat een standaardisatie is op reeds bestaande (en eventueel al binnen de organisatie beschikbare) tools. Waarin OpenWoo.app afwijkt is dat zij alleen publieke informatie in deze index opneemt waardoor een zoek index openbare informatie ontstaat. Dit heeft een aantal privacy, security en architectuur voordeelen. -Dat betekent dat de integrale zoekvraag ook organisatie-overstijgend kan worden gesteld aan meerdere organisatie tegelijkertijd zonder dat er noodzaak is voor een landelijke index, dit concept is verder uitgewerkt in [koophulpje.nl](https://koophulpje.nl/) waarbij ook een voorziening is gerealiseerd voor het genereren van `robot.txt` en `sitemap.xml` bestanden. De facto is hiermee dus ook een landelijke Woo-API gerealiseerd met de beperking dat deze alleen organisaties bevat die participeren in OpenWoo.app - -De reden dat we hebben gekozen voor OpenCatalogi is dat in deze `variant` van FSC géén PKI of overige certificaten nodig zijn. Dat lijnt beter uit met de gedachte dat dit open data betreft die conform de wet juist anoniem toegankelijk zou moeten zijn. +Deze OpenIndex is echter ook buiten OpenWoo bruikbaar en kan bijvoorbeeld worden ingezet vanuit de website, zaaksysteem of klant contact centrum om burgers, inwoners en medewerkers van relevante informatie te voorzien. +## Federatief (Landelijk) zoeken +OpenWoo.app maakt gebruik van de federatieve zoekvraag ontwikkeld binnen [OpenCatalogi](https://opencatalogi.nl/) om verschillende integrale zoekvragen virtueel samen te voegen. Simpel gezegd roept de landelijke zoek API meerdere instanties van [Open Index]() aan en aggregeert de resultaten. Technisch zitten daar nog wat haken en ogen aan die binnen Open Index worden [uitgelegd](). +Er word hierbij dus géén gebruik gemaakt van een landelijke index, het geen data duplicatie voorkomt en organisaties zelf in controlle houdt op hun publicaties. Dit dit concept is verder uitgewerkt in [koophulpje.nl](https://koophulpje.nl/) waarbij ook een voorziening is gerealiseerd voor het genereren van `robot.txt` en `sitemap.xml` bestanden (ten behoeve van KOOP). De facto is hiermee dus ook een landelijke Woo-API gerealiseerd met de beperking dat deze alleen organisaties bevat die participeren in OpenWoo.app +De bevragingen tussen de federale zoekvraag en de verschillende organisaties kan via [NLX/FSC]( https://www.nlx.io/) lopen, of daarbuiten. Gezien het publieke bevragingen zijn op openbare informatie is NLX an zich niet verplicht en kan het inregelen van een PKI certificaat nodeloos complex zijn. Dat gezegd hebbende biedt NLX ook voordelen met betrekking tot het monitoren en loggen van verkeer. ![OpenWeb Architecture](https://raw.githubusercontent.com/ConductionNL/woo-website-template/main/docs/Federatie.svg) +## Commonground +Als commonground applicatie is OpenWoo.app uitaard op te delen in componenten + +- Publicatie Platform (laag 5 Interactie) +- Woo Service (laag 4 Services) +- Open Index (laag 3 Integratie) + +![Common Ground](https://raw.githubusercontent.com/ConductionNL/woo-website-template/main/docs/CommonGround.svg) + +## Domeinen +OpenWoo.app is een organisatie specifieke applicatie waarvan de installaties onderling een federatief netwerk vormen. Dat kan het wat onduidenlijk maken wat waar leeft. + +| Type | Domein | Status | Type | +|-----------------------|-----------------------------------------------|--------------|-------------------| +| Federatief | koophulpje.nl | productie | Publicatie Pagina | +| Federatief | acceptatie.koophulpje.nl | acceptatie | Publicatie Pagina | +| Organisatie Specifiek | [organisatie_naam].koophulpje.nl | productie | Publicatie Pagina | +| Organisatie Specifiek | acceptatie.[organisatie_naam].koophulpje.nl | acceptatie | Publicatie Pagina | +| n.v.t | OpenWoo.app | productie | Product Pagina | +| n.v.t | acceptatie.OpenWoo.app | acceptatie | Product Pagina | +| Organisatie Specifiek | [organisatie_naam].OpenWoo.app | productie | Publicatie Pagina | +| Organisatie Specifiek | acceptatie.[organisatie_naam].OpenWoo.app | acceptatie | Publicatie Pagina | +| Federatief | api.OpenWoo.app | productie | API | +| Federatief | acceptatie.api.OpenWoo.app | acceptatie | API | +| Organisatie Specifiek | api.[organisatie_naam].OpenWoo.app | productie | API | +| Organisatie Specifiek | acceptatie.api.[organisatie_naam].OpenWoo.app | acceptatie | API | + +Dit zijn de aangeboden domeinen vanuit OpenWoo.app, daarnaast zien de dat de meeste organisaties hun publicatie pagina ontsluiten op hun eigen domein e.g. open.[organisatie_naam].nl + ## Woo Publicatie-object Het Woo Publicatie-object vormt de kern van zowel de Woo-API als de Woo-website. Dit object bevat alle essentiële informatie over een Woo-publicatie, inclusief metadata, publicatiedatum, bijlagen en andere relevante eigenschappen. Het dient als de centrale entiteit waaromheen de functionaliteiten van de API en de website zijn gebouwd. Door deze gecentraliseerde aanpak is het eenvoudiger om Woo-publicaties efficiënt te beheren, op te halen en weer te geven, en draagt het bij aan een coherente en gestroomlijnde gebruikerservaring. diff --git a/docs/techniek/Installatie.md b/docs/techniek/Installatie.md index 1329b01f..caf5c1e4 100644 --- a/docs/techniek/Installatie.md +++ b/docs/techniek/Installatie.md @@ -23,14 +23,30 @@ De Open WOO Website is in eerste instantie opgezet om serverless gebruikt te wor > **Stappen** > > 1. Rechtsboven deze repo staat een knop ["gebruiken als template"](https://github.com/new?template_name=woo-website-template&template_owner=ConductionNL), druk daarop (of [klik hier](https://github.com/new?template_name=woo-website-template&template_owner=ConductionNL)) en maak een nieuwe repository aan op je GitHub-organisatie. -> 2. Ga in de repository naar de folder `.github/workflows/` -> 3. Verwijder de workflow `product-page-deploy` als deze er nog staat -> 4. Open de workflow `woo-page-deploy` en pas de branche aan van `never` naar `main` -> 5. Pas de verdere configuratie in `woo-page-deploy` aan zoals hieronder vermeld onder configuratie en sla deze op -> 6. Ga naar acties en wacht tot de actie "Deploy the WOO Page to GitHub Pages" succesvol is afgerond -> 7. Ga naar settings->pages, selecteer onder source `deploy from branch` en geef als branche op `gh-pages` -> 8. Bovenaan de pagina verschijnt nu de URL waarop je je Open WOO Website kunt terugvinden -> 9. Als je de Open WOO Website wilt hosten onder een subdomein van je organisatie en voorzien van een PKI-certificaat, kun je daarvoor de normale GitHub Pages-handleidingen volgen of een SLA afsluiten voor ondersteuning (zie [kosten](/docs/product/Kosten.md)) +> 2. [Zet de workflow permissions](#workflow-permissions) op `Read and write permissions`. +> 3. Ga op de main branch in de repository naar de folder `.github/workflows/` +> 4. Verwijder de workflow `product-page-deploy` als deze er nog staat +> 5. Open de workflow `woo-page-deploy` en pas de branche aan van `never` naar `main` +> 6. Pas de verdere configuratie in `woo-page-deploy` aan zoals [hieronder vermeld onder configuratie](#configuratie) en sla deze op +> 7. Ga naar acties en wacht tot de actie "Deploy the WOO Page to GitHub Pages" succesvol is afgerond +> 8. Ga naar settings -> pages, selecteer onder source `deploy from branch` en geef als branche op `gh-pages` +> 9. Bovenaan de pagina verschijnt nu de URL waarop je je Open WOO Website kunt terugvinden +> 10. Als je de Open WOO Website wilt hosten onder een subdomein van je organisatie en voorzien van een PKI-certificaat, kun je daarvoor de normale GitHub Pages-handleidingen volgen of een SLA afsluiten voor ondersteuning (zie [kosten](/docs/product/Kosten.md)) + +#### Workflow Permissions + +> **Stappen** +> +> 1. Ga naar Settings +> 2. Ga naar Actions +> 3. Ga naar General. +> +> ![settings-action](https://raw.githubusercontent.com/ConductionNL/woo-website-template/main/docs/techniek/settings-action.png) +> +> 4. Scroll naar Workflow permissions. +> 5. Set permissions naar `Read and write permissions`. +> +> ![Workflow permissions](https://raw.githubusercontent.com/ConductionNL/woo-website-template/main/docs/techniek/workflow-permissions.png) ### Server Installatie @@ -45,19 +61,19 @@ Als je de OpenWoo-website liever vanaf een eigen server draait, kan dat uiteraar Configuratie vindt plaats via environment (env) waardes. In het geval van een serverless configuratie moeten de env-waardes worden aangepast in de [page deploy workflow](https://github.com/ConductionNL/woo-website-template/blob/main/.github/workflows/product-page-deploy.yml). In het geval van een serverinstallatie in het `.env`-bestand in de Gatsby-rootmap. We ondersteunen de volgende configuratie-opties. -| Key | Verplicht | Usage | Allowed Value | Default / Example | -|---------------------------|-----------------------|---------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|------------------------------------------------------------------------------------------------| -| GITHUB_PAGES_BRANCH | Alleen bij serverless | De branche waarop de pagina wordt gebouwd | string, max 255 characters | gh-pages | -| GITHUB_REPOSITORY_NAME | Alleen bij serverless | | string, max 255 characters | `${{ github.event.repository.name }}` | -| API_BASE_URL | Ja | De locatie van de Open Woo API | string , string, max 255 characters | "" | -| NL_DESIGN_THEME_CLASSNAME | Ja | De naam van het thema van de organisatie | string, max 255 characters | "conduction-theme" | -| FAVICON_URL | Ja | De locatie van de favicon van de organisatie | string , max 255 characters | "" | -| HEADER_LOGO_URL | Ja | De locatie van het primaire logo van de organisatie | string, moet een base encoded afbeelding zijn OF url | "" | -| ORGANISATION_NAME | Ja | De naam van de organisatie | string, max 255 characters | "Conduction" | -| JUMBOTRON_IMAGE_URL | Nee | De locatie van de gebruikte header, bij leeg wordt er geen header getoond | string , max 255 characters | "" | -| FOOTER_LOGO_URL | Ja | De locatie van het primaire logo van de organisatie | string, moet een base encoded afbeelding zijn OF url | ... | -| FOOTER_LOGO_HREF | Ja | De homepage van de organisatie | string , max 255 characters | "" | -| OIDN_NUMBER | Nee | Het OIDN-nummer van de organisatie, bij leeg worden Woo-publicaties mogelijk niet beperkt tot de eigen organisatie | integer, max 16 characters | 1234567890 | +| Key | Verplicht | Usage | Allowed Value | Default / Example | +| ------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| GITHUB_PAGES_BRANCH | Alleen bij serverless | De branche waarop de pagina wordt gebouwd | string, max 255 characters | gh-pages | +| GITHUB_REPOSITORY_NAME | Alleen bij serverless | | string, max 255 characters | `${{ github.event.repository.name }}` | +| API_BASE_URL | Ja | De locatie van de Open Woo API | string , string, max 255 characters | "" | +| NL_DESIGN_THEME_CLASSNAME | Ja | De naam van het thema van de organisatie | string, max 255 characters | "conduction-theme" | +| FAVICON_URL | Ja | De locatie van de favicon van de organisatie | string , max 255 characters | "" | +| HEADER_LOGO_URL | Ja | De locatie van het primaire logo van de organisatie | string, moet een base encoded afbeelding zijn OF url | "" | +| ORGANISATION_NAME | Ja | De naam van de organisatie | string, max 255 characters | "Conduction" | +| JUMBOTRON_IMAGE_URL | Nee | De locatie van de gebruikte header, bij leeg wordt er geen header getoond | string , max 255 characters | "" | +| FOOTER_LOGO_URL | Ja | De locatie van het primaire logo van de organisatie | string, moet een base encoded afbeelding zijn OF url | ... | +| FOOTER_LOGO_HREF | Ja | De homepage van de organisatie | string , max 255 characters | "" | +| OIDN_NUMBER | Nee | Het OIDN-nummer van de organisatie, bij leeg worden Woo-publicaties mogelijk niet beperkt tot de eigen organisatie | integer, max 16 characters | 1234567890 | ## Backend diff --git a/docs/techniek/Integratie.md b/docs/techniek/Integratie.md index 13d9432c..35504d7b 100644 --- a/docs/techniek/Integratie.md +++ b/docs/techniek/Integratie.md @@ -121,10 +121,11 @@ Response } ```` -Vanuit een het weergeven van een zoekformulier is het goed mogelijk dat u alleen bestaande waardes wilt weergeven (bijvoorbeeld bij jaartal of categorie). U kunt daarvoor de query-parameter gebruiken, deze vertelt u welke zoekwaarde welke resultaten opleveren. +Vanuit een het weergeven van een zoekformulier is het goed mogelijk dat u alleen bestaande waardes wilt weergeven (bijvoorbeeld bij jaartal of categorie). U kunt daarvoor de content type `application/json+aggregations` gebruiken in combinatie met de de query-parameter `_queries[]`, deze vertelt u welke zoekwaarden welke resultaten opleveren. ````cli GET 'https://api.gateway.commonground.nu/api/publicaties?_queries[]=categorie' +Content-Type: application/json+aggregations Response diff --git a/docs/techniek/settings-action.png b/docs/techniek/settings-action.png new file mode 100644 index 00000000..b8eb9f38 Binary files /dev/null and b/docs/techniek/settings-action.png differ diff --git a/docs/techniek/workflow-permissions.png b/docs/techniek/workflow-permissions.png new file mode 100644 index 00000000..16f2a786 Binary files /dev/null and b/docs/techniek/workflow-permissions.png differ diff --git a/publiccode.yaml b/publiccode.yaml index ee33d388..0c64a30b 100644 --- a/publiccode.yaml +++ b/publiccode.yaml @@ -5,7 +5,7 @@ url: https://github.com/ConductionNL/woo-website-template landingURL: null isBasedOn: null softwareVersion: null -logo: https://avatars.githubusercontent.com/u/106860777?v=4 +logo: https://avatars.githubusercontent.com/u/46676163?s=400&u=dad0eb014a0b96db1274bde41bd477b767f94c2d&v=4 monochromeLogo: null platforms: - web @@ -13,7 +13,7 @@ releaseDate: '2023-10-01' categories: - collaboration - it-development -developmentStatus: beta +developmentStatus: stable softwareType: softwareAddon description: en: @@ -55,13 +55,16 @@ maintenance: contractors: - name: Conduction until: 2035-01-01 - email: info\x64conduction.nl + email: info@conduction.nl website: https://www.conduction.nl contacts: - name: Ruben van der Linde - email: info\x64conduction.nl + email: info@conduction.nl phone: 085 303 6840 affiliation: Conduction + - name: Remko Huisman + email: remko@conduction.nl + affiliation: Conduction localisation: localisationReady: true availableLanguages: