Teknisk systembeskrivning
BrewOS är en PHP/MariaDB-applikation som drivs på Linux-servrar. BrewOS ansvarar för systemets tekniska planering och utveckling.
I programkoden har olika projekt med öppen källkod utnyttjats enligt de licensvillkor de har definierat, som:
- Twig 3 - uppbyggnad av HTML-sidor (template engine)
- PHPMailer - sändning av e-post
- PHP Markdown - konvertering av Markdown-text till HTML
- PHP Barcode Generator - streckkoder
- mPDF - PDF-dokument
- PhpSpreadsheet - kalkylbladsfiler
- Guzzle - HTTP-anslutningar till externa gränssnitt
- OTPHP - tidsbaserade engångslösenord (TOTP)
Dessutom har följande HTML/JavaScript-projekt och resurser utnyttjats i implementeringen:
- Bootstrap 5 - användargränssnittsbibliotek
- jQuery - JavaScript-bibliotek
- jQuery Cookie - jQuery-tillägg
- Sortable - ordning med dra och släpp
- Material Icons - ikoner
- Google Fonts - typsnitten Roboto och Roboto Mono
Centrala drag i den tekniska implementeringen
Programarkitekturen bygger på MVC-modellen.
Programmet och dess datamodell har utformats för samtidig användning av flera separata organisationer. Uppgifterna sparas i gemensamma databastabeller, och varje uppgift är bunden till det konto som den hör till. Vid varje förfrågan kontrolleras att användaren har en roll på kontot i fråga.
Databasen använder i stor utsträckning främmande nycklar (foreign key) för att säkerställa databasens integritet. Dessutom utför programmet ändringar som databastransaktioner, där fel som inträffar inom transaktionen automatiskt ångrar hela ändringen (rollback).
Användargränssnittet finns på finska, svenska och engelska. Dessutom finns två utseenden: det nya utseendet, som är allas standard, och det gamla utseendet. Användarens val av språk och utseende sparas i en cookie i webbläsaren och för en inloggad användare också i hens användaruppgifter.
Inloggning och sessioner
- Lösenord sparas inte i klartext, utan som saltade hashvärden.
- Användaren kan ta i bruk en tidsbaserad engångskod (TOTP, RFC 6238) som en andra faktor vid inloggningen. Se Stark autentisering.
- Sessionen sparas i en sessionscookie i webbläsaren. Användaren kan vid inloggningen välja Kom ihåg inloggningen i denna webbläsare, och då sparas en signerad inloggningscookie i webbläsaren som gäller i 14 dagar från den senaste användningen. Ett byte av lösenord ogiltigförklarar tidigare utfärdade inloggningscookies.
- Gissning av lösenord bromsas: när 5 inloggningar har misslyckats inom 15 minuter med samma e-postadress från samma IP-adress behandlas inga nya försök förrän det äldsta misslyckandet har gått ut.
- Återställning av lösenord och användarinbjudningar fungerar med e-postlänkar för engångsbruk som går ut inom 24 timmar.
- I formulären används identifierare för engångsbruk som förhindrar att samma formulär behandlas två gånger.
AI-gränssnittet (MCP) och OAuth
BrewOS erbjuder ett Model Context Protocol (MCP)-gränssnitt på adressen /mcp. Gränssnittet ansluts med OAuth 2.1-auktorisering:
- servern publicerar OAuth-metadata (
/.well-known/oauth-authorization-server,/.well-known/oauth-protected-resource) och stöder dynamisk klientregistrering - PKCE (S256) är obligatoriskt
- åtkomsttoken gäller i en timme och förnyas med en roterande förnyelsetoken, vars giltighet upphör senast 60 dagar efter auktoriseringen
- token sparas i databasen bara som hashvärden
- auktoriseringen är bunden till ett konto och fungerar med den auktoriserande användarens behörigheter, som kontrolleras vid varje anrop; auktoriseringen kan också ges enbart läsbehörighet
- antalet anrop är begränsat till 120 anrop per minut och auktorisering
- anrop som ändrar uppgifter registreras i kontots händelselogg.
Webbutiks-API
Företagets egen webbutik kan anslutas till BrewOS via webbutiks-API:t på adressen /rest/webshop/v1. Webbutikerna och deras API-nycklar skapas på sidan Inställningar > Webbutiker:
- varje webbutik har en egen API-nyckel, som ger åtkomst bara till det egna kontots uppgifter och bara via webbutiks-API:t; nyckeln sparas i databasen bara som ett hashvärde
- en webbutik kan ha två giltiga nycklar samtidigt, så att nyckeln kan bytas utan avbrott
- antalet anrop är begränsat till 120 anrop per minut och nyckel.
Integrationer
BrewOS använder följande externa gränssnitt. Se närmare Integrationer och externa system.
- Fakturering och ekonomiförvaltning: Maventa (e-fakturor), ProCountor, Netvisor, Fennoa och Netbaron
- Skatteförvaltningens VeroAPI: sändning av punktskattedeklarationer med Suomi.fi-fullmakt
- Valviras alkoholnäringsregister Allu: sändning av leverans- och tappningsanmälningar samt Valviras öppna data om alkoholtillstånd för kontroll av verksamhetsställen och tillstånd. Se Valviraanmälningar.
- PRH:s öppna data i FODS (YTJ): företagets namn och adress utifrån FO-numret
- Bisnode: kontroll av kundföretagets kreditupplysningar
Drift
Systemet körs i Cloud Citys datacenter i Finland.
Säkerhetskopieringen bygger på att bestående uppgifter, också filer som användarna sparar, förvaras i databasen. En säkerhetskopia av databasen tas automatiskt en gång per dygn.
Kvalitet i programutvecklingen
Programmet underhålls i versionshanteringssystemet Git.
Automatiska enhetstester (PHPUnit) har skrivits för programmet.