Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bratislava.sk support #78

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

MarekBodingerBA
Copy link

S očakávaným vydaním formulára obsahujúcim KEP by sme radi podporovali aj tento extension.

Musel som upraviť injectovaciu logiku, keďže Ditec scripty načítavame asynchrónne až po načítaní stránky, pri pôvodnom injecte ešte neboli dostupné.

@pomali
Copy link
Collaborator

pomali commented Dec 5, 2023

Paráda!

Toto rieši to problém, že ak sa načíta ditec ako druhý tak prepíše autogram?
Lebo niečo podobné (ak si dobre pamätám) som začal riešiť na minv.sk v tomto PR https://github.com/slovensko-digital/autogram-extension/pull/70/files kde som to na hulváta zablokoval.

@MarekBodingerBA
Copy link
Author

Toto rieši to problém, že ak sa načíta ditec ako druhý tak prepíše autogram?

Neviem, asi najľahšie bude vyskúšať, ale vyzerá to, že by mohlo. :)

@MarekBodingerBA
Copy link
Author

MarekBodingerBA commented Dec 5, 2023

Na druhú stranu, do nejakej miery to nedáva zmysel čakať na načítanie DSigneru aby sa nakoniec nepoužil, ale v konečnom dôsledku je to oveľa jednoduchšie. To blokovanie skriptov nie je úplne zlá myšlienka, ale napríklad my čakáme na načítanie tých skriptov, tým, že by boli zablokované by to u nás zlyhalo a k podpisovaniu by sa užívateľ nedostal.

@pomali
Copy link
Collaborator

pomali commented Dec 5, 2023

Presne to som si myslel, že blokovanie môže rozbiť niektoré weby.

Ten detectSupportedPlatforms by sme mali implementovať aj my, asi to je niečo z novšej verzie?

Mal som ešte jedno riešenie cez Proxy object, ale to je riadne komplikované ( vedeli by sme ignorovať všetky zápisy do toho objektu)

A ešte je alternatívou použiť service worker ktorý by ditec skripty nahradil prázdnym súborom (ako adblock), ale tam je problém s hádaním url a ak by ich niekto bundloval tak to nebude fungovať.

@MarekBodingerBA
Copy link
Author

MarekBodingerBA commented Dec 5, 2023

Mal som ešte jedno riešenie cez Proxy object, ale to je riadne komplikované ( vedeli by sme ignorovať všetky zápisy do toho objektu)

Je možné zavolať Object.freeze na tom ditecu, ale to by hádzalo errory vždy keď sa to bude pokúšať prepísať nejakú property.

Išlo by to s vlastnou proxy čo pri pokuse o prepísanie nespraví nič:

function customFreeze(obj) {
    return new Proxy(obj, {
        set: function() {
            return true;
        },
        deleteProperty: function() {
            return false;
        },
        defineProperty: function() {
            return true;
        }
    });
}

window.ditec = customFreeze(window.ditec);

Možno to je aj lepšie riešenie, ale implikácie sa ťažko odhadujú, napríklad u nás by to nefungovalo lebo nemáte to detectSupportedPlatforms implementované.

Ten detectSupportedPlatforms by sme mali implementovať aj my, asi to je niečo z novšej verzie?

Asi, ale neviem čo by to malo vracať vo vašom prípade, asi neprázdny array.

A ešte je alternatívou použiť service worker ktorý by ditec skripty nahradil prázdnym súborom (ako adblock), ale tam je problém s hádaním url a ak by ich niekto bundloval tak to nebude fungovať.

To znie ako overkill.

@filiplikavcan
Copy link

filiplikavcan commented Dec 11, 2023

Namiesto pollovania pri cakani na Ditec by som skusil pouzit Object.watch. Tu som to kedysi pouzil v odpovedi: https://stackoverflow.com/questions/8298430/handling-code-which-relies-on-jquery-before-jquery-is-loaded/29222203#29222203

@pomali pomali mentioned this pull request Dec 11, 2023
@pomali
Copy link
Collaborator

pomali commented Mar 18, 2024

@MarekBodingerBA ak by sme implementovali detectSupportedPlatforms a nejaku formu ochrany prepisu cez proxy object bude to pre vas dobre riesenie? ci este musime vyriesit to, ze cakate na nacitanie skriptov?

ad Object.watch() - ten je uz deprecated, a nahradenie toho su proxy objects

@MarekBodingerBA
Copy link
Author

MarekBodingerBA commented Mar 26, 2024

@pomali Áno, detectSupportedPlatforms používame takto.

Pod ochranou sa myslí, že by sa zapísalo do toho window.ditec.dSigXadesBpJs hneď po inicializácii extensionu bez ohľadu na to či sa Ditec SDKčko načíta plošne pre celú doménu? To je trocha opačný prístup ako v tomto PR. Tu čakám dokým sa načíta Ditec SDK (teraz keď sa nad tým zamyslím tak by to išlo určite lepším spôsobom ako setInterval) a potom to prepíšem Autogramom.

Ono by to malo teoreticky fungovať aj s tým iniciálnym zapísaním Autogramu priamo do toho objektu, ale príde mi to rizikovejšie. Minimálne mám pocit, že tie Ditec SDK skripty sa musia načítať v istom poradí čo by mohlo toto rozhodiť (nechýbal by Autogramu config, ktorý ešte nebude načítaný?). Tiež my načítavame to Ditec SDK iba pri stránkach s podpisovačom, takto by extension injectol Autogram aj na stránkach kde sa podpisovanie nepoužíva (neviem aké by to malo implikácie).

@MarekBodingerBA
Copy link
Author

Pre úplnú jednoduchosť aby sme sa chápali, injectol som do stránky tento script (a simuloval Slow 3G):

const i = setInterval(() => {
  console.log(window.ditec?.dSigXadesBpJs);
  if (window.ditec?.dSigXadesBpJs) {
  clearInterval(i)  
  }
}, 10)
chrome_Eci6VCiLz0.mp4

To znamená, že ten window.ditec.dSigXadesBpJs je inicializovaný neskôr po načítaní stránky.

Otestovať sa to dá tu:
https://konto.bratislava.sk/mestske-sluzby/priznanie-k-dani-z-nehnutelnosti/ → Vyplniť cez Bratislavské konto

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants