Preskoči na glavno vsebino

Dávkové operácie

Batch API - serverová administrácia

Avtor: Petr Pech

Pre partnerské riešenia, ktoré potrebujú spravovať inštancie ABRA Flexi v cloude, sme pripravili API, ktoré to umožňuje. Jeho stav je zatiaľ beta a tento dokument popisuje plánovaný stav. Všetko si dôkladne pred použitím overte.

Autentifikácia požiadaviek voči ABRA Flexi

ABRA Flexi podporuje niekoľko spôsobov tzv. serverovej autorizácie:

  • serverovým menom a heslom – pri zadaní špeciálneho mena a hesla je akceptovaná serverová autorizácia. Toto riešenie nie je použiteľné v cloude.

  • klientským certifikátom – umožňuje, aby sme pre každého partnera alebo inštanciu mali certifikát, ktorý umožňuje administráciu. Toto riešenie zatiaľ nie je použiteľné mimo cloudu.

Serverové meno a heslo

Pre tento typ autorizácie je potrebné upraviť /etc/flexibee/server-auth.xml a doplniť:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties>  <comment>WinStrom server configuration</comment>  <entry key="username">winstrom-server-admin</entry>  <entry key="password">velmi-tajne-a-hodne-dlouhe-heslo</entry></properties>

Po reštarte servera sa meno a heslo už akceptuje.

Poznámka: heslo musí byť minimálne 15 znakov dlhé. Toto heslo umožní prístup ku všetkým údajom na danej inštalácii. Bezpečne ho ukladajte!

Klientským certifikátom

Bezpečnejším spôsobom je použitie certifikátu. Možno sa ním autorizovať na získanie administrátorského prístupu. Pre komunikáciu je nutné použiť protokol HTTPS a pripájať sa na port 7000. Na serveri je uložený iba odtlačok certifikátu (SHA1 fingerprint).

Odtlačok certifikátu možno získať takto:

openssl x509 -noout -in cert.pem -fingerprint

Tento odtlačok je potrebné zaslať na podporu a bude nastavený do danej inštancie, resp. stromu inštancií (ich zoskupenia).

Impersonifikácia používateľa

V niektorých prípadoch je potrebné, aby sa server prihlásil a následne sa vyhlásil za jedného z používateľov.

To možno vykonať doplnením hlavičky:

X-FlexiBee-Authorization: jmeno.

Od tej chvíle budú všetky zmeny vrátane práv vykonané pod týmto používateľom.

Scenáre použitia API

Celé ABRA Flexi REST API vždy pracuje nad jednou databázou s údajmi firmy. Výnimkou je správa používateľov a firiem. Tá je z firmy vyňatá a uložená iným spôsobom. Informácie o používateľoch sú pri bežnej inštalácii v databáze centralServer. Firmy sú v jednotlivých databázach. V prípade cloudovej prevádzky sú informácie vo vysoko replikovanej databáze CouchDB.

Ak by sa spracovanie robilo vo viacerých požiadavkách, je možné, že pri prideľovaní práv používateľa do firmy obsluhujúci server nebude vedieť, že firma alebo používateľ je už založený. Preto vzniklo toto dávkové API, kedy sa odovzdá zoznam operácií a vykoná ich jeden server, čím je zabezpečená konzistencia.

Pretože požiadavka môže zlyhať (napríklad pri dočasnej nedostupnosti jednej z komponentov), je možné požiadavku zopakovať. Potom sa vykoná všetko tak, ako je uvedené, znova. Ak už nejaká zmena bola vykonaná, operácia sa preskočí (operácie sú idempotentné).

Založenie účtu administrátora ABRA Flexi inštancie a predvolenej účtovnej firmy

So založením ADMIN účtu v ABRA Flexi sa založí predvolená účtovná firma podľa údajov z objednávky (budeme mať názov firmy, IČO).

Nie je možné založiť firmu bez administrátorského používateľa.

<flexibee-batch id="abc-1"> 
<user action="create-update">
<username>admin</username>
<password hash="sha256" salt=”123”>f86vs6vds66</password>
<email>admin@firma.cz</email>
<givenName>Roman</givenName>
<familyName>Skamene</familyName>
<ssoIdentifier>admin@firma.cz</ssoIdentifier>
<defaultRole>ADMIN</defaultRole>
<permissions>
<manageAll>true</manageAll>
<createCompany>false</createCompany>
<deleteCompany>false</deleteCompany>
<createUser>false</createUser>
<changePassword>false</changePassword>
<grantPermission>false</grantPermission>
<licenseManagement>false</licenseManagement>
</permissions>
</user>
<company action="create-update">
<id>digitalni_media_s_r_o_</id>
<name>Digitalní media s.r.o.</name>
<country>CZ</country>
<regNo>966664322</regNo><!-- IČ -->
<type>PODNIKATELE</type>
<adminUser role="ADMIN">admin</adminUser>
</company>
</flexibee-batch>

Štandardné používateľské roly v ABRA Flexi

  • ADMIN

  • SUPERUZIVATEL

  • MZDOVYUCETNI

  • UCETNI

  • OBCHODNIK

  • SKLADNIK

  • SKLADNIKSPOKLADNOU

  • UZIVATEL

  • JENCIST

  • ZABLOKOVAN

Typ organizácie + evidencia

Podvojné účtovníctvo je predvolené pre všetky typy organizácií.

  • PODNIKATELE

  • PODNIKATELE+PU (podvojné účtovníctvo)

  • PODNIKATELE+DE (daňová evidencia)

  • ROZPOCTOVE

  • NEZISKOVE

  • PODNIKATELIA (iba pre Slovensko)

Podporované hash funkcie pre ukladanie hesiel

  • sha256 (predvolená pre ukladanie hesiel zaslaných v plain texte)

  • sha512

  • sha1

  • md5

  • pbkdf2 (najbezpečnejšia, ale aj najpomalšia metóda – bez používania session pri REST API je potom nepoužiteľná – je zámerne príliš pomalá).

Ukážka programu pre výpočet odtlačku hesla pre ABRA Flexi.

import org.apache.commons.codec.binary.Hex; public static final String SHA256 = "sha256"; public static final String SEPARATOR = ":"; protected static String encryptPasswordSHA256(String plain, String salt) { String toDigest = salt + SEPARATOR + plain; try { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] result = md.digest(toDigest.getBytes("utf-8")); return SHA256 + SEPARATOR + salt + SEPARATOR + new String(Hex.encodeHex(result)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } catch (GeneralSecurityException e) { throw new RuntimeException(e); } } public static String getRandomSalt() { byte[] b = new byte[10]; new Random().nextBytes(b); return new String(Hex.encodeHex(b)).substring(10); } String plain = "moje heslo"; String result = encryptPasswordSHA256(plain, getRandomSalt());

Založenie ďalších „bežných" používateľov

Títo používatelia sa budú zakladať už z Admin portálu ako noví používatelia správcom tenanta. Bude volané aj hromadne pre viacerých používateľov pri zmene profilu na Admin portáli.

<?xml version="1.0"?><flexibee-batch id="abc-12">  <user action="create-update">    <username>anna.mlada</username>    <password hash="sha256" salt="123">f86vs6vds66</password>    <email>anna.mlada@firma.cz</email>    <givenName>Anna</givenName>    <familyName>Mlad&#xE1;</familyName>    <defaultRole>UZIVATEL</defaultRole>    <permissions>      <manageAll>true</manageAll>    </permissions>  </user></flexibee-batch>

Možno uložiť aj heslo bez saltu, ale dôrazne to neodporúčame!

Zmena hesla existujúceho používateľa

<?xml version="1.0"?><flexibee-batch id="abc-123">  <user action="create-update">    <username>anna.mlada</username>    <password hash="sha256" salt="123">f86vs6vds66</password>  </user></flexibee-batch>

Vymazanie existujúceho používateľa

Vymazanie používateľa z Admin portálu = uvoľnenie licencie. Bude volané aj hromadne pre viacerých používateľov pri zmene profilu.

<?xml version="1.0"?><flexibee-batch id="abc-12345">  <user action="delete">    <username>anna.mlada</username>  </user></flexibee-batch>

Poznámka: ak bol používateľ vymazaný a neskôr nastavím create-update, mal by sa znova obnoviť.

Obnovenie používateľa

<?xml version="1.0"?><flexibee-batch id="abc-123456">  <user action="create-update">    <username>anna.mlada</username>  </user></flexibee-batch>

Poznámka: pri create-update používateľa sa najprv skúša recyklovať záznamy s príznakom „vymazané". Všetky nastavenia prístupov a rolí zostanú zachované.

Blokovanie existujúceho používateľa

Zablokovanie používateľa z Admin portálu = nemôže sa prihlásiť.

<?xml version="1.0"?><flexibee-batch id="abc-123456">  <user action="create-update">    <username>anna.mlada</username>    <blocked message="Blocked from external system">true</blocked>  </user></flexibee-batch>

Odblokovanie používateľa

<?xml version="1.0"?><flexibee-batch id="abc-123456">  <user action="create-update">    <username>anna.mlada</username>    <blocked>false</blocked>  </user></flexibee-batch>

Pridanie roly ADMIN existujúcemu používateľovi

Pridanie atomickej roly „ERP administrátor" na Admin portáli. Môže byť volané aj hromadne pre viacerých používateľov pri zmene profilu na Admin portáli.

<?xml version="1.0"?><flexibee-batch id="abc-1234567">  <user action="create-update">    <username>anna.mlada</username>    <defaultRole>ADMIN</defaultRole>  </user>  <access role="ADMIN"/></flexibee-batch>

Odobratie roly ADMIN existujúcemu používateľovi

Odobratie atomickej roly „ERP administrátor" na Admin portáli. Môže byť volané aj hromadne pre viacerých používateľov pri zmene profilu na Admin portáli.

<?xml version="1.0"?><flexibee-batch id="abc-12345678">  <user action="create-update">    <username>anna.mlada</username>    <defaultRole>UZIVATEL</defaultRole>  </user>  <access role="UZIVATEL"/></flexibee-batch>

Zmena mena, priezviska existujúceho používateľa

<?xml version="1.0"?><flexibee-batch id="abc-123456789">  <user action="create-update">    <username>anna.mlada</username>    <givenName>Ani&#x10D;ka</givenName>    <familyName>Star&#x161;&#xED;</familyName>  </user></flexibee-batch>

Skrytie / zobrazenie firmy (odpojenie)

<?xml version="1.0"?><flexibee-batch id="abc-123">  <company action="create-update">    <id>digitalni_media_s_r_o_</id>    <show>false</show>    <!-- true pro zobrazení -->  </company></flexibee-batch>

Vymazanie firmy

<?xml version="1.0"?><flexibee-batch id="abc-123">  <company action="delete">    <id>digitalni_media_s_r_o_</id>  </company></flexibee-batch>

Použitie API

Platné pre prvú zverejnenú testovaciu verziu s funkčným zakladaním používateľov v centrálnej databáze.

Volanie

Požiadavka musí byť autorizovaná.

XML s požiadavkou možno odoslať pomocou curl takto:

curl -3 'https://server:7000/admin/batch' -T batch.xml -E cert.pem

Ukážková požiadavka

batch.xml

<?xml version="1.0"?><flexibee-batch id="abc-123">  <!-- ID by mělo unikátně označovat dávku -->  <user>    <username>anna.mlada</username>    <password hash="sha256" salt="xyz987">af123bd35</password>    <email>anna.mlada@firma.cz</email>    <givenName>Anna</givenName>    <familyName>Mlad&#xE1;</familyName>    <permissions>      <manageAll>true</manageAll>      <createCompany>true</createCompany>      <deleteCompany>true</deleteCompany>      <createUser>false</createUser>      <changePassword>false</changePassword>      <grantPermission>true</grantPermission>      <licenseManagement>false</licenseManagement>    </permissions>    <defaultRole>UZIVATEL</defaultRole>  </user>  <company action="create-update">    <!-- action="create-update" je výchozí akce -->    <id>moje_firma_s_r_o_</id>    <name>Moje Firma s.r.o.</name>    <country>CZ</country>    <!-- aktuálně podporované jsou CZ a SK -->    <regNo>123</regNo>    <!-- IČO -->    <vatId>CZ123</vatId>    <!-- DIČ -->    <type>PODNIKATELE</type>    <adminUser>anna.mlada</adminUser>  </company>  <company action="delete">    <id>demo_a_s_</id>  </company>  <access role="ADMIN">anna_mlada_s_r_o_</access>  <access role="UZIVATEL">moje_firma_s_r_o_</access>  <access>demo_a_s_</access>  <access role="ADMIN"/>  <access>demo_a_s_</access></flexibee-batch>

Odpoveď

Pri úspechu (HTTP 200) je odoslané XML v tomto formáte:

<?xml version="1.0" encoding="UTF-8"?><flexibee-batch-result id="abc-12345678">  <entry>    <id>moje_firma_s_r_o_</id>    <entity>COMPANY</entity>    <action>DELETE</action>    <result>      <status>SKIPPED</status>      <message>Not implemented yet.</message>    </result>  </entry>  <entry>    <id>anna.mlada@firma.cz</id>    <entity>USER</entity>    <action>CREATE_UPDATE</action>    <result>      <status>CREATED</status>    </result>  </entry></flexibee-batch-result>

Výčet typov entít

  • USER

  • COMPANY

  • ACCESS_LIST

Výčet typov akcií

  • CREATE_UPDATE

  • DELETE

Výčet stavových kódov

  • CREATED

  • UPDATED

  • DELETED

  • FAILED (popis dôvodu chyby bude v elemente <message>)

  • SKIPPED (môže byť doplnené elementom <message>)

Ste s tem dobili odgovor na svoje vprašanje?