Backend KIBJLS servis

Ovaj dokument sadži detalje o rest i database backend servisima. Opšte informacije o ovim servisima su dostupne u okviru dokumenta o osnovnim servisima.

Funkcionalnosti

  1. Cross-platform implementacija na DotNet.Core platformi i PostgreSQL bazi podataka.
  2. Implementira KIBJLS funkcionalnu specifikaciju koja se odnosi rad sa aproprijacijama, projektnim strukturama i plaćanjima.
  3. Niz aplikativnih metrika za svaku funkcionalnost kroz Influx/Statsd tehnologije.
  4. Agregacija i prezentacija logova koristeći ElasticSearch/Kibana
  5. Automatska dokumentacija REST interfejsa koristeći otvoreni format Swagger.
  6. Kompletno automatizovana infrastruktura.
  7. Kompletna automatizacija za deployment i development kroz Invoke-Build skript.

Info

Invoke-Build ? bilo gde unutar lobe-rest direktorijuma daje listu raspoloživih razvojnih/administratorskih akcija.

Organizacija repozitorijum-a

Kompletan source code frontend-a se fizički nalazi unutar lobe-rest direktorijumu na git repozitorijumu. Značajne putanje uključuju:

  1. source\service
    Direktorijum sadrži dotnet.core source code koji se izvršava korišćenjem dotnet komande.
    1. Lobe.Rest.Data.Provider\scripts
      Sadrži skripte za migraciju i seed baze podataka
    2. Lobe.Rest.Api
      Osnovni projekat za REST interfejs
  2. scripts
    Sadrži Powershell i druge skripte
    1. pslobe
      Sadrži Powershell REST klijenta
    2. tests
      Sadrži automatske Pester testove svih osnovnih funkcionalnisti servisa
  3. lobe-rest.build.ps1
    Sadrži Invoke-Build skriptu kojim se realizuju bitne uobičajne operacije u development-u kao što su pokretanje servera na lokalnoj mašini, instalacija i konfiguracija prerekvizita itd.
  4. packages.ps1
    Sadrži sve prerekvizite za sve tipove izvršenja (putem tagova).
  5. infrastructure
    Direktorijum koji sadrži skripte za setup i konfiguraciju infrastrukturalnih elemenata

Upotreba

Servis je moguće koristiti putem HTTP protokola na uobičajeni način za REST servise. Lista svih podržanih end-point-a i način njihovog korišćenja dostupna je kroz Swagger web interfejs kojim <adresa_backend_servera>/swagger 6.

Radi lakšeg korišćenja REST servisa za CRF se razvija i Powershell klijent pslobe [^gl-pslobe] koji se može upotrebiti na svakom modernom Windows OS bez dodatnih preduslova (na Unix-like systemima potrebno je imati instaliran Powershell).

Na sledećem primeru je prikazano logovanje na servis:

PS> import-module pslobe

PS> $Env:CIR_URL = 'http://lobe-devel.nil.rs:2281/api'
PS> Initialize-Session -Username tadmin -Password P@ssw0rd  
...

Za prikaz svih pslobe komandi potrebno je izvršiti Get-Command -Module pslobe. Pomoć za konkretnu komandu dobija se na standardan Powershell način: Get-Help Register-AppropriationLoad.

Informacije o rest servisu i infrastrukturalnim korisnicima se komandom LOBE Shell-a show rest.

Razvoj

Da bi se pokrenuo servis na lokalnoj stanici u LOBE Shell se izvršava ib Run komanda. Dok je server aktivan REST URL će biti svetle boje.

Komanda se izvršava unutar lobe-rest direktorijuma u koji se pozicionira preko bookmark-a: go rest Enter+Enter.

ib ? bilo gde unutar lobe-rest direktorijuma daje listu raspoloživih razvojnih/administratorskih akcija.

Info

Svaki projekat sadrži README.md i druge .md fajlove koji sadrži detaljne tehničke informacije.

Konfiguracija

Konfiguracija REST servisa se sprovodi putem fajla appSettings.<okruženje>.json 3. Fajl bez oznake okruženja sadrži sve moguće opcije sa podrazumevanim (default) vrednostima. Finalna konfiguracija dobija se spajanjem konfiguracije okruženja sa default konfiguracijom tako da postavke konfiguracije okruženja imaju prioritet.

REST servis ima veliki broj konfiguracionih parametara koji su podeljeni u sledeće sekcije:

!!! TODO: Sekcija je u fazi izrade

Detlji konfiguracionih parametara nalaze se u okviru README.md dokumentacije na istoj lokaciji gde su i konfiguracioni fajlovi 4.

Internacionalizacija

Backend server nema posebnu lokalizaciju jer je predviđen za mašinsku upotrebu - internacionalizacija frontend servisa se koristi za skoro sve poruke krajnjim korisnicima sa sledećim izecima:

  • CirRestMailingService\Resources
    Sadrži JSON šablone na engleskom i srpskoj ćirilici za sve email tipove koje sistem šalje.

Baza podataka

REST servis koristi PostgreSQL kao bazu podataka. Proces instalacije servera je automatizovan kroz PowerShell skriptu 1 i mehanizam instalacije projektnih zvisnosti 2.

Migracija baze podataka sprovodi se korišćenjem Microsoft Entity Framework i odgovarajućih Invoke-Build komandi.

Informacije o bazi podataka i korisnicima spovodi se komandom LOBE Shell-a show db.

(develop~) STAGING> show db

DatabaseName : Cir
SqlServer
  Name  : Sql Server 2016 Enterprise Edition
  ISO   : \\nas.mfin.trezor.rs\itshare\Instalacije\Microsoft\SQL Server\...
  Users
    Admin            : {sa, ***** }
    Admin_Credential : System.Management.Automation.PSCredential
  ...

Inicijalne organizacije i korisnici

CRF servis zahteva da baza podataka sadrži minimalni set podataka u bilo kom okruženju. Ovo se postiže u procesu zasejavanja baze podataka (seed), koji se sprovodi prilikom inicijalne migracije baze jednokratno.

U procesu zasejavanja podataka, formira se i set osnovnih organizacija i korisnika. U sledećoj listi prikazan je set inicijalnih organizacija, njihovih korisnika i ovlašćenja:

Organizacija Korisnik Ovlašćenja Komentar
0. Administracija Svima nadređena organizacija
super_admin admin Maksimalna prava i ovlašćenja
control pregled, eksport Za regulatorni organ
1. Republika Nadređena svim KJS
republika admin Maksimalna prava i ovlašćenja
2. PPL Administracija Nadređenaa svim PPL
ppl_admin admin Maksimlna prava i ovlašćenja
3. MF-Uprava za trezor
tadmin local admin Trezor lokalni administrator
operator odobravanje org. Operator filijale
jafin reg. plaćanja Integracija sa JAFIN
trezor.intervencija local admin Obezbeđuje impersonalizaciju PL

Svi inicijalni korisnici imaju šifru P@ssw0rd.

Opasnost

U produktivnom okruženju potrebno je ručno izmeniti lozinke svim ovim korisnicima. Ovo je jedino moguće uraditi ručno, tako što se korisnik loguje kao svaki od ovih korisnika i promeni lozinku na željenu kroz profil opcije na frontend-u.

Na produktivnom okruženju sve dodeljene lozinke sačuvane su u CIR Secrets Store pod putanjom production/users/<username> i uz učitani CIR Shell ih je moguće dobiti na sledeći način:

Show-Secret production/users/tadmin