• Rezultati Niso Bili Najdeni

Zaledni sistem oziroma streˇznik je del aplikacije, ki skrbi za povezavo do podatkovne baze, avtentikacijo odjemalcev in poslovno logiko. Dostop do zalednega sistema omogoˇca aplikacijski programski vmesnik (angl. applica-tion programming interface, API), ki je napisan po arhitekturnem vzorcu REST (angl. REpresentational State Transfer). To pomeni, da streˇznik ne hrani odjemalˇcevih stanj ali sej, zato mora ob vsakem zahtevku odjemalec v glavo zahtevka HTTP (angl. HyperText Transfer Protocol header) pripeti overitvene podatke. Pri vsakem klicu na streˇznik aplikacija zahteva, da upo-rabnik v glavo pripne vrednost JWT (angl. JSON Web bearer Token) ˇzetona (glej razdelek 3.2.3).

Diplomska naloga 17

3.2.1 Podatkovna baza Supabase

Podatki o uporabnikih se hranijo v podatkovni bazi Supabase [37], ki temelji na tipu baze PostgresSQL. PostgreSQL, ali tudi postgres, je odprtokodni sis-tem za upravljanje z objektno-relacijsko podatkovno bazo, ki strmi k sis-temu, da v novejˇsih razliˇcicah sistema dodaja veˇc funkcionalnosti (angl. extensibi-lity) in da sledi skladnosti z SQL (angl. Structured Query Language).

Glavna niˇsa Supabase je, da je njena edina alternativna reˇsitev Google Firebase [18], ki je odprtokodna in ne temelji na ne-relacijskem dokumen-tnem tipu podatkovne baze NoSQL (angl. Non-relational SQL). Supabase ponuja zaledne storitve v oblaku, ki vkljuˇcujejo postgres podatkovno bazo, avtorizacijo z uporabniki, hrambo veˇcjih datotek in avtomatsko generiran API za podatkovno bazo.

3.2.2 Streˇ znik Node in Express

Node.js, ali krajˇse Node, je odprtokodno runtime okolje za razvijanje za-lednega dela v jeziku JavaScript, ki teˇce na eni niti v nasprotju z ostalimi modernimi alternativami. Temelji na modelu asinhronih dogodkov I/O (angl.

Input/Output) [39], kar omogoˇca neprekinjeno delovanje, saj ob prejemu zah-tevka Node posreduje zahtevek operacijskemu sistemu, ta pa ustvari nov pro-ces in Node lahko ponovno sprejema zahtevke.

Express.js, ali krajˇse Express, je odprtokodno zaledno programsko ogrodje (angl. framework), ki temelji na Node.js in je namenjeno gradnji spletnih aplikacij. Med drugimi ponuja dodatne knjiˇznice in vmesno programsko opremo (angl. middleware).

Primer kode 3.1 predstavlja izsek iz naˇse implementacije Express knjiˇznice v datoteki server.js, ki prikazuje, kako se inicializira aplikacija Express Node in posluˇsa zahtevke na vratih 3000.

c o n s t e x p r e s s = r e q u i r e (’ e x p r e s s ’) ; // U v o z i ’ E x p r e s s ’ p a k e t . ...

c o n s t app = e x p r e s s () ; // N a r e d i n o v o a p l i k a c i j o ...

c o n s t i n d e x A p i = r e q u i r e (’ ./ src / r o u t e r s ’) ; // U s m e r j e v a l n i k

Izsek kode 3.1: Primer kode, ki inicializira aplikacijo Express.

3.2.3 JWT ˇ zetoni

JWT ˇzeton se v aplikaciji uporablja v mehanizmu avtorizacije z odjemalcem [14]. Uporabi se skupaj s procesom avtorizacije odjemalca. V primeru raz-vite aplikacije je to z e-poˇsto in geslom, ki odjemalcu odgovori z veljavnim ˇzetonom, a le v primeru, da se e-poˇsta in geslo ujemata.

JWT ˇzeton je kodiran vBase64-URLformatu, ki binarne podatke pretvori v niz [3]. Kod je sestavljen iz treh delov, ki so med sabo loˇceni s simbolom za piko. Prvi del je glava (angl. header), ki vsebuje podatke o tipu ˇzetona in tipu algoritma za overjanje. Drugi del je glavna vsebina (angl. payload), ki vsebuje registrirana, javna in zasebna polja (angl. claims). Registriranih polj je lahko veˇc (nad 10), nujno pa mora kod vsebovati sledeˇca polja:

• iss(angl. issuer) – identifikator za entiteto, ki izdaja JWT.

• sub(angl. subject) – identifikator, ki se dodeli subjektu.

• aud (angl. audience) – vrednost, ki identificira avtorizacijski streˇznik.

Diplomska naloga 19

• exp (angl. expiration time) – pove v katerem ˇcasovnem oknu se JWT lahko uporablja. Avtorizacijski streˇznik mora zavrniti vse JWT ˇzetone, katerim je exppretekel.

Javna in zasebna polja poljubno definira aplikacija, pri javnih poljih pa se mora aplikacija drˇzati tega, da ne razkriva preveˇc informacij o odjemalcu, zato so primerni npr. univerzalni enoliˇcni identifikatorji (angl. Universally Unique IDentifier, UUID ).

Zadnji del ˇzetona JWT je podpis (angl. signature), ki podpisuje zako-dirano glavo, glavno vsebino in skrivnost (angl. secret) z algoritmom, ki je specificiran v glavi. Podpis zagotavlja, da se sporoˇcilo na poti do prejemnika ni spremenilo.

3.2.4 Varna hramba gesel

Kljuˇcnega pomena je, da se gesla v zaledju ne hranijo v obliki navadnega teksta, saj bi ob morebitnem vdoru v bazo podatke lahko uporabili za pri-javo v sistem ali pa v druge sisteme, v katerih uporabniki uporabljajo enake overitvene podatke.

V tabeli uporabnikov v podatkovni bazi aplikacije se zato hranijo samo zgoˇsˇcene vrednosti gesla, ki so generirane s pomoˇcjo NPM (angl. Node Pac-kage Manager) paketa Bcrypt [4]. Uporabi se metoda genSalt, ki vrne sol (angl. salt). Sol je nakljuˇcna vrednost, ki se uporabi kot dodatni parameter v zgoˇsˇcevalni funkciji, in predstavlja dodaten sloj varnosti. Geslo in sol se nato uporabita v metodihash, ki pa vrne zgoˇsˇceno vrednost gesla. Za zgoˇsˇcevanje se uporabi simetriˇcen ˇsifrirni algoritem Blowfish, ki je bil izumljen leta 1993 in trenutno nima efektivne metode kriptoanalize [35].

3.2.5 Okoljska datoteka in okoljske spremenljivke

Vrednosti spremenljivk, ki vsebujejo obˇcutljive podatke, kot so URL (angl.

Uniform Resource Locator) povezava do podatkovne baze ali gesla, ni varno

shranjevati v repozitoriju, saj bi ob morebitnem dostopu nepooblaˇsˇcene osebe lahko nastala ˇskoda.

Podatke se zapiˇse v posebno okoljsko datoteko (glej izsek kode 3.2), ki se imenuje .env, in vsebuje vrednosti okoljskih spremenljivk (angl. enviroment variables). Okoljska datoteka se ustvari v korenski mapi v samem okolju, kjer se izvaja aplikacija.

Za uporabo okoljskih spremenljivk si aplikacija pomaga z NPM paketom dotenv, ki vrednosti iz .env naloˇzi v objekt process.env preko katere koda dostopa do vrednosti.

1 S U P A B A S E _ D B _ N A M E =" d a t a b a s e - pcr "

2 S U P A B A S E _ D B _ P A S S =" k d 7 d y s u 5 p 8 c 8 h 9 f v g e h g b 2 r b j d s m v m 9 r "

3 T O K E N _ K E Y =" v r x a f 9 5 y r p k 8 y 5 4 p u s j f q q g 6 7 k 6 2 k y 4 g "

Izsek kode 3.2: Primer vsebine datoteke .env

3.2.6 Integracija z R skriptami

Glavni problem aplikacije je predstavljala integracija R paketa dpcrAnalysis z zalednim delom aplikacije, saj je poslovna logika implementirana v jeziku Javascript, logika analize ddPCR podatkov pa v jeziku R.

Ta problem reˇsuje NPM paket r-integration, ki se namesti na zalednem delu aplikacije. Paket omogoˇca zagon poljubnih R ukazov in skript iz okolja NodeJS. Integracija deluje na operacijskem sistemu Windows in na opera-cijskih sistemih, ki temeljijo na GNU/Linux. Uporablja sistemske klice, da dostopa do strojne kode R [31].

NodeJS dostopa do metod dpcrAnalysis paketa preko asinhrone metode callMethodAsync(”assets/R/dpcrWrapper.R“, imeFunkcije, seznamArgumentov), kjer je:

• ”assets/R/dpcrWrapper.R“ – pot do skripte, v kateri sem napisal funk-cije, ki implementirajo dpcrAnalysis paket

• imeFunkcije– ime funkcije, ki jo ˇzelemo izvesti

Diplomska naloga 21

• seznamArgumentov – seznam z argumenti, ki se podajo funkciji. V primeru aplikacije so to podatki ddPCR.

3.2.7 Klicanje API z vmesnikom Postman

Za dostop do API od zalednega sistema aplikacije se lahko uporablja tudi programsko opremo, namenjeno za poˇsiljanje HTTP zahtevkov. Da bi se izognili konstantni postavitvi ˇcelnega sistema za namene testiranja sprememb zalednega sistema, se uporabi programsko opremo Postman, ki predstavlja ogrodje z grafiˇcnim vmesnikom za testiranje razvoja vmesnika API [29].

Koda za testiranje razvite aplikacije je napisana v programskemu jeziku JavaScript in se nahaja v repozitoriju [30].

3.2.8 Paketi NPM

Upravitelj paketov za Node (angl. Node Package Manager, NPM) je privzeti upravitelj paketov za aplikacije JavaScript. V zalednem sistemu se uporablja sledeˇce pakete za zahtevno procesiranje datotek:

• excelJS – uporablja se za branje CSV podatkov in generiranje Excel poroˇcil [22].

• csv-merger– omogoˇca zdruˇzevanje veˇcjih CSV datotek [21].

• papaparse – uporablja se za pretvorbo CSV formata v JSON format in obratno [25].

• multer –middleware za upravljanje z naloˇzenimi datotekami [23].

3.2.9 Struktura direktorijev in plasti

Za ime krovne datoteke streˇznika NodeJS, ki se nahaja v korenski mapi, sem izbral imeserver.js, saj je to privzeto ime, ki ga kliˇce ukaz za zagon aplikacije NodeJS (npm start).

V korenski mapi se poleg avtomatsko generiranih map, ki se ustvarijo s prevedbo kode, nahajajo ˇse mape:

• assets, ki vsebuje vso kodo, ki ni napisana v jeziku Javascript – v naˇsem primeru so to R skripte.

• tmp, ki vsebuje naloˇzene podatke ddPCR s strani odjemalcev in po-datke rezultatov analiz. Te vsebujejo slike grafov in CSV datoteke rezultatov metod analiz.

• src, ki vsebuje datoteje tipa JavaScript.

Znotraj mape srcse nahajajo mape:

• controllers– vsebuje kontrolnike. To so skripte, ki obravnavajo zahtevke in vrnejo ustrezni odgovor glede na posredovane podatke.

• helpers– vsebuje skripte z logiko, ki ni neposredno vezana na zahtevke in se ne povezuje na podatkovno bazo.

• middleware – vsebuje skripte, ki se poˇzenejo pred vsakim zahtevkom.

Uporabne so predvsem za preverjanje veljavnosti ˇzetonov JWT.

• models– vsebuje skriptodb.js, ki skrbi za generiranje instance povezave na podatkovno bazo.

• routers– vsebuje skriptoindex.js, v kateri so zapisane poti API oziroma vstopne toˇcke za aplikacijo, v katerih se kliˇcejo metode iz kontrolnikov.

• services– vsebuje skripte s poslovno logike aplikacije in izvaja poizvedbe (angl. queries) nad tabelami v podatkovni bazi.