SDMS WebServer
Namestitev
SDMS WebServer se namesti tako:
- pripravi se novo mapo, kjer bo instaliran strežnik SDMS Webserver, recimo C:\SDMS\WEBSERVER
- preko ftp protokola se iz naslova www.sdms.si/update/sdms41/sdmswsp/en (uporabnik anonymous) se nanjo prenese vse datoteke
- datoteko sdmswsp.txt se kopira v sdmswsp.ini
- pravilno se nastavi parametre, predvsem parameter path
- za uporabo varnih povezav (https) se namesti certifikat strežnika, za navodila glej spodaj
- servis se instalira iz konzolne vrstice z ukazom sdmswsp -install
- ob uspešni instalaciji servisa se to izpiše v okencu, sicer pa je prišlo do problema, ki je razviden v log datoteki
- servis se zažene z ukazom sdmswsp -start
- ob uspešnem zagonu se to izpiše v konzolnem oknu
- nikakor ne smete pozabiti omogočiti uporabo želenih vrat (80, 443, ...) v požarnem zidu.
Strežnik je sedaj nameščen in zagnan.
Namestitev certifikata
Če se bo uporabljala varna povezava (https), je potrebno pridobiti in namestiti tudi certifikat strežnika. Pripravi se mapo, na katero se bo kopiral certifikat, lahko pa se ga kopira tudi kar na mapo programa. Pripravi se naslednje ASCII datoteke:
- root.pem - certifikat verifikacijskega strežnika
- cert.pem - certifikat strežnika
- key.pem - zakodiran privatni ključ strežnika
- password.txt - geslo za dekodiranje privatnega ključa
openssl pkcs12 -in xxx.pfx -out root.pem -cacerts // brez izhodnega gesla
openssl pkcs12 -in xxx.pfx -out certandkey.pem -clcerts // vnesi geslo za key, razbij na dve datoteki: cert.pem in key.pem
Geslo kodiraj z EncryptPassord in shrani v password.txt takole: ENCRYPTED:gesloKasneje se v modulu določi tudi pot do datotek certifikata.
Aktivacija
SDMS WebServer se aktivira tako, da se v SDMS raziskovalcu doda nov modul z imenom SdmsWSP in naslednjo vsebino:
Sub OnCreate
WebServer.Clear
WebServer.AddHost(80, '', '', '', '')
WebServer.Start
...
EndSub
Če želimo dodati tudi dostop preko varne povezave (https), to storimo takole:
Sub OnCreate
WebServer.Clear
WebServer.AddHost(80, '', '', '', 'http')
WebServer.AddHost(443, '', '', '', 'https').SetSecure(ProgramPath)
WebServer.Start
...
EndSub
Če želimo zagotoviti uporabo varne povezave (https) in izvesti samodejno preusmeritev nanjo:
Sub OnCreate
WebServer.Clear
WebServer.AddHost(80, '', '', '', 'http').SetRedirect('https://www.test.si/')
WebServer.AddHost(443, '', '', '', 'https').SetSecure(ProgramPath + 'Certifikat\')
WebServer.Start
...
EndSubPri uporabi varne povezave (https) je seveda nujno predhodno namestiti veljaven certifikat strežnika.
Osnovne nastavitve
Strežniku moramo podati ime, ki se prikaže kot naslov strani. Uporablja se tudi kot identifikacija strežnika, če je ta potrebna.
WebServer.Name = 'TEST'Ob prijavi se uporabniku prikaže logotip velikosti 480x120 pik. Datoteko se shrani na mapo WebServer in takole poda njeno ime.
WebServer.Logo = 'logo.png'
Privzeto dopušča SDMS WebServer dostop samo SDMS uporabnikom. Če želimo dodati tudi možnost anonimnega dostopa, to storimo tako:
WebServer.User = [Gost]Pri tem je Gost (oz. poljubno drugo ime) SDMS uporabnik, ki se bo uporabljal za anonimne dostope. Tega uporabnika moramo seveda dodati in mu prirediti pravice.
Določiti je treba osnovno okno, ki se prikaže uporabniku ob prvem zagonu.
WebServer.Window = '370000,25000,630000,200000'
Določiti je treba tematiko, ki se bo uporabljala za izris.
WebServer.DrawList = [Web Tematika]
Dodati je treba plasti, po katerih za izvaja iskanje in izpis podatkov.
WebServer.AddSearch([Plast A].Search('Default'))
WebServer.AddSearch([Plast B].Search('Default'))
Dobro je dodati tudi seznam priljubljenih lokacij, ki so dostopne iz menija.
WebServer.AddLocation('Slovenija', '370000,25000,630000,200000', '')
WebServer.AddLocation('Ljubljana', '370000,25000,630000,200000', '')
WebServer.AddLocation('Maribor', '370000,25000,630000,200000', '')
Možno je dodati tudi seznam dodatnih povezav, ki so ravno tako dostopne iz menija.
WebServer.AddLink('Softdata Home Page', 'http://www.softdata.si', '')
Dodamo tudi seznam dodatnih izrisov za tiskanje.
WebServer.AddLayout([A4 Pokončno], '')
WebServer.AddLayout([A4 Ležeče], '')2018: Splošna dodatna opravila
Na mapi Database\WebServer se ustvari novo mapo 2018.
Nanjo se prekopira logo-*.png datoteke, ki so bile pri stari aplikaciji na rootu.
Nanjo se prekopira custom.js in custom.css iz mape SDMSWSP\WebServer\2018 in se ju primerno prilagodi.
2018: Tematika
Tematika za novo aplikacijo se pripravi kot prej, le da se v njej ne vnaša polja 'Informacije za web'. To polje se ignorira. Še vedno pa se uporabljata polji 'Dodatno ime' (obvezno) in 'Pravice' (opcijsko).
Kar je bilo prej določeno v informacijah za web, se sedaj določa v modulu SDMSWSP v funkciji OnCreate z dodajanjem elementov tipa TWebItem.
Obstaja tudi SDMS basic funkcija ConvertWebInfo, ki prenese stare informacije za web iz tematike v clipboard.
Tudi WebServer.AddPyramid ukazi se v novi aplikaciji ignorirajo, tako da je treba piramid dodati ročno.
WI = WebServer.AddWebItem(A, B, C, D, E, F, G, H)Parametri funkcije AddWebItem A: (string) koda mape, na katero želimo vstaviti dani element, prazen string za root B: (string) koda elementa, ki mora biti unikatna(!); za 'radio gumbe' se doda predpona xxx:, kjer je xxx ime skupine gumbov, vsaka grupa gumbov naj ima natanko en gump privzeto viden (E) C: (string) ime elementa (napis) D: (string) legenda za dani element, ki naj vsebuje tudi copyright informacijo, lahko v HTML obliki E: (boolean) privzeta vidnost elementa F: (double) transparentnost podlog, 0-1, privzeto 1, lahko se določi na mapah in kartah G: (string) pravice za uporabo v online načinu: z vejico ločen seznam security tagov, vsi = '*', nihče = '-'; dodatne natančnejše pravice za prikaz pa so lahko nastavljene tudi v tematiki H: (string) pravice za uporabo v offline načinu: velja enako kot pri (G)
Tako ustvarimo nov element (referenca nanj je v spremenljivki WI).
Če gre za element, ki predstavlja skupino elementov, ne potrebujemo narediti nič več. Če gre za element, ki je povezan s piramido, to storimo z WI.SetPyramid('koda piramide')
WI.SetPyramid('dof2018')Če gre za element, ki je povezan s spletnimi kartami, to storimo z WI.SetTms('koda spletnih kart')
WI.SetTms('gm-s')Če gre za element, ki je povezan s temo/temami tematke, to storimo z WI.SetDrawItem('alias teme/tem')
WI.SetDrawItem('parcele')Priporočamo striktno poravnavanje parametrov po kolonah, da se ohrani preglednost.
Dim WI As TWebItem
WI = WebServer.AddWebItem('', 'g-maps', 'Osnovne karte', '', True, 1.0, '*', '*')
WI = WebServer.AddWebItem('g-maps', 'm:gm-m', 'Google Maps', 'Google', False, 1.0, '*', '-') WI.SetTms('GM-M')
WI = WebServer.AddWebItem('g-maps', 'm:dof', 'DOF Slovenija', 'GURS', True, 1.0, '*', '*') WI.SetPyramid('DOF-GURS')
WI = WebServer.AddWebItem('g-maps', 'm:dmr', 'DMR Slovenija', 'GURS', False, 1.0, '*', '-') WI.SetPyramid('DMR-GURS')
WI = WebServer.AddWebItem('', 'g-sp', 'Splošne vsebine', '', True, 1.0, '*', '-')
WI = WebServer.AddWebItem('g-sp', 'dkn', 'Dkn', 'pa', False, 1.0, '*', '-') WI.SetDrawItem('dkn')
WI = WebServer.AddWebItem('g-sp', 'op', 'Opombe', 'op', True, 1.0, '*', '*') WI.SetDrawItem('op')2018: Offline podloge
Novost je možnost uporabe podlog (piramide) v offline načinu.
Za to je treba elementu piramide določiti:
pravico offline uporabe(parameter H), ne pozabite tudi za nadrejene skupine relevantno območje, kar je izjemno pomembno narediti pravilno, da se čimbolj omeji količina potrebnih kart za prenos v cache
Definicija relevantnega območja se določa za vse offline pologe enotno z ukazom WebServer.AddOfflineArea([plast], 'opcijski filter', offset, minpixdim).
WebServer.AddOfflineArea([plast poligonov], 'filter', 0, 0)
WebServer.AddOfflineArea([plast linij], 'filter', 50, 0)
WebServer.AddOfflineArea([plast točk], 'filter', 200, 0)Vsakokrat, ko se ta defincija spremeni, je potrebno izvesti preračun relevantnega območja s klicom povezave "http://streznik/api/2018/prepareofflinemapsinfo"
2018: Offline podatki
Novost je možnost uporabe podatkov v offline načinu.
Za to je treba elementu teme določiti:
pravico offline uporabe(parameter H), tudi za nadrejene skupine povezavo na dejanske podatke z ukazom WI.SetOfflineData([plast], 'iskanje')
WI.SetOfflineData([parcele], 'Default')V sami plasti je potrebno dodati polja, ki določajo, kako se podatki v offline načinu izrisujejo.
Za točke - font: polje offline-icon z definicijo "ime simbola;font mi ali fa;velikost v px;stil n ali b;barva simbola;opcijska sirina sence v px;opcijska barva sence;opcijsko xxx;opcijsko merilo" Za točke - simbol: polje offline-icon z definicijo "ime simbola;svg;faktor;xxx;barva simbola;opcijsko xxx;opcijsko xxx;opcijsko rotacija;opcijsko merilo" Za polilinije: polje offline-line z definicijo "debelina linije v px;barva linije;opcijski stil; opcijsko merilo" Za poligone: polje offline-fill z definicijo "barva polnjenja;debelina linije v px;barva linije;opcijski stil; opcijsko merilo" Za napise: polje offline-text z definicijo "napis;Roboto;velikost v px;stil n ali b;barva napisa;opcijska sirina sence v px;opcijska barva sence;opcijsko merilo"
Za zoom: polje offline-zoom-offset z definicijo "offset za zoom" Za search: polje offline-search z definicijo "iskalne besede"
Za font simbolov se lahko vnese mi za Material Icons [1] ali fa za FontAwesome [2].
Za barve se lahko vnese katerakoli veljavna CSS notacija [3]: LightRed, #FF0000, rgb(255,0,0), rgba(255,0,0,1.0).
offline-icon "lens;mi;8;n;red;2;white"
offline-line "4;yellow"
offline-fill "rgba(0,0,255,0.5);1;blue"
offline-text "napis;Roboto;12;n;green;2;white"Napredne nastavitve
Ob prijavi lahko določene nastavitve spremenimo glede na prijavljenega uporabnika. To storimo tako, da dodamo novo proceduro:
Sub OnWebLogin
If User.MatchSecurityTags('noweb', False) Then
WebServer.User = Nil // določenim uporabnikom preprečimo dostop
EndIf
If User.MatchSecurityTags('ljubljana', False) Then
WebServer.Logo = 'logo-lj.png' // določenim uporabnikom pokažemo drug logotip
WebServer.Window = '510000,120000,630000,200000' // in drugo osnovno okno
WebServer.DrawList = [Web Tematika LJ] // ter drugo tematiko
EndIf
EndSubPriprava tematike
Tematiko se pripravi kot sicer. Izjemnega pomena pa je, da se tematika v vseh merilih in z vsemi vključenimi temami vedno izriše hitro, torej v rangu recimo 3 sekund (kar je že precej). Optimalno bi bilo pod 1 sekundo.
Dodati je potrebno še določene informacije za spletno aplikacijo. Te se dodajo v atrubutih posameznih tem.
Atribut: Alias - Dodatno ime
Teme se v spletni aplikaciji ne prižigajo/ugašajo posamezno, temveč skupinsko (in to niso iste skupine kot v client aplikaciji). Skupine določimo poljubno z neko kratko oznako, recimo karte, vod, tocke,... Vsem temam določimo v atributu Dodatno ime eno oznako, na katero se ta tema vklopi/izklopi. Če tema nima oznake, se nikoli ne prikaže. Če želimo temo prikazati vedno, vnesemo za znak *.
Atribut: View tags
Namen tega atributa je omejevanje vpogleda v podatke glede na uporabnika.
Atribut: Web info
V tem atributu določimo prej omenjene skupine. To storimo večvrstično v naslednji obliki:
item=karte
name=Pregledne karte
sort=1
show=1
hint=...
icon=a.gifVsaka oznaka se mora pojaviti natanko v eni temi, ni pomembno kateri. Iz teh informacij se potem generira menu za vklop/izklop v spletni aplikaciji. Prve štiri vrstice so obvezne.
Priprava iskanj in izpisov
Iskanje po poljubnih podatkih se pripravi v urejevalniku podatkovne plasti (Searches). V modulu SdmsWSP pa z ukazom AddSearch dodajamo le tiste, ki jih želimo uporabljati v spletni aplikaciji. ...
Nastavljanje pravic
Pri spletni aplikaciji je možno nastaviti različne nivoje dostopa (izris na karti, iskanje, izpis podatkov) glede na prijavljenega uporabnika.
V ta namen se uporablja kratke oznake, ki jih umenujemo Security tags.
Dodeljevanje pravic
Te oznake se za uporabnika določa v urejevalniku uporabnika oz. v urejevalniku skupine uporabnikov (možno je tudi v varnostnem središču).
Vsak uporabnik/skupina ima lahko določenih več oznak, ki so ločene z vejico.
Uporabnik poleg svojih oznak dobi tudi vse oznake vseh skupin, v katerih je član.
Omejevanje pravic
Na splošno velja naslednje:
- za vpoglede (tematika, vpogled preko iskanja/klika) velja, da če oznaka ni določena, imajo vpogled vsi, sicer pa samo tisti z oznako,
- za urejanja (dodajanje, popravljanje, brisanje) velja, da če oznaka ni določena, ne more urejati nihče, sicer pa samo tisti z oznako.
Pravice se omejuje:
- v tematiki:
- v atributu teme View tags
- v atrubutu teme Web info, v vrstici view=
- pri definiciji iskanja v podatkovni plasti:
- View access
- Append access
- Update access
- Delete access
- View in Update access pri posameznih poljih
- v SDMS Basicu, ukaz je MatchSecurityTags.
Vedno lahko določimo tudi več oznak, ločenih z vejico.
TODO
- SQL pogoj filtra, uporabljenega v searchu se ne upošteva pri kliku
- dvonivojski sistem pri vsebinah za izris
- multiple datasete pri maski (vsaj view)
- images naj dela tudi za spisek datotek (RO)
Statične strani
- .htm, *.js, *.css
Dinamične strani
- .ssp
Dinamične direktne povezave
MAP.GIF, MAP.JPG, MAP.PNG
To je najbolj uporabljan URL, ki nam vrne izdelano sliko (karto). Potrebni so naslednji parametri (ali piškotki):
- position=W,H,Y1,X1,Y2,X2
- širina in višina slike v pikslih ter okno karte v koordinatah. Razmerje slike in okna naj bo pravilno. To je nujen parameter, alternativa pa so lahko parametri y, x, scale, width, height (vsi).
- drawlist=A,B,C,...
- tematika oz. seznam tematik, ki se naložijo. To je nujen parameter, alternativno pa se to lahko izvede tudi v proceduri command.
- drawshow=A,B,C,...
- če je ta parameter podan, se v tematiki vklopijo za izris samo tiste teme, ki imajo kot dodatno ime kakšno vrednost iz seznama.
- command=C
- če je ta parameter podan, se naveden ukaz izvede pred samim izrisom karte. Ukaz je lahko samo uporabniško definirana procedura (SUB) brez parametrov.
- y=N
- ta parameter je lahko alternativa parametru position, pomeni pa y koordinato centra karte.
- x=N
- ta parameter je lahko alternativa parametru position, pomeni pa x koordinato centra karte.
- scale=N
- ta parameter je lahko alternativa parametru position, pomeni pa merilo izrisa karte.
- width=N
- ta parameter je lahko alternativa parametru position, pomeni pa širino slike v pikslih.
- height=N
- ta parameter je lahko alternativa parametru position, pomeni pa višino slike v pikslih.
- dpi=N
- ta parameter je lahko podan, kadar bi želeli sliko v drugi resoluciji od privzete 96 DPI.
FUNCTION.*
To je tudi zelo pogosto uporabljen URL, ki vrne tekst, ki ga je izdelala uporabniško definirana funkcija tipa TStringList.
- function=F
- ta parameter je nujen, pomeni pa ime funkcije, ki se kliče.
SEARCH.DLL
Izvede splošno iskanje po (full text search) in vrne zadetke.
- query=KLJUČNE BESEDE
- seznam ključnih besed za iskanje, ločenih s presledki
- category=KAT1,KAT2,KAT3
- seznam kategorij, po katerih se vrši iskanje (če je prazen, se vrši po vseh)
- hits=10
- maksimalno število zadetkov
- template=JSON
- ime templata, ki opredeljuje obliko zadetkov
AddSearch ... Pred iskanjem se zažene še OnWebSearch...