-
Notifications
You must be signed in to change notification settings - Fork 12
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
Session vanhenemisen estäminen viestiä kirjoittaessa #5828
Conversation
f2d0f6b
to
459b9b2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
didn't review very carefully yet but seems superb!
// SPDX-License-Identifier: LGPL-2.1-or-later | ||
|
||
export const sessionKeepalive = async () => { | ||
const response = await fetch('/api/application/auth/status', { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this could maybe be moved to lib-commons with some parameterisation if the only difference is the api base path, but not necessary by any means
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tarvitaanko uutta fetch-pohjaista kutsua tälle? Meillähän on jo auth status endpointille funktio
|
||
return ( | ||
isOpen && ( | ||
<BaseModal |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The paddings etc seem a bit off. Did you try using InfoModal? I think you can pass everything needed to it and not e.g. render the buttons yourself.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En alkanut hienosäätämään tätä vielä kohdilleen, kun tämä dialogi näkyy niin pienelle joukolle käyttäjiä. Korjataan tämä kohdilleen sitten jos joskus toteutetaan koko sovelluksen laajuinen uudelleenkirjautuminen session aikakatketessa.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ajatus on hyvä mutta epäilen että ratkaisu ei ihan vielä toimi kuten halutaan, johtuen Query API:n, Axioksen, ja sessioiden välisestä yhteistoiminnasta:
- query-systeemi tykkää lähetellä requesteja jotka refreshaa asioita, esim. jos käy toisessa ikkunassa ja tulee takaisin niin lähtee kasa requesteja
- meillä on globaali Axios interceptor status 401 -> redirect loginiin, eli jos mikä tahansa query huomaa että sessio on kadonnut, käyttäjä lentää kirjautumiseen, ohittaen tämän uuden modaalin logiikan
// SPDX-License-Identifier: LGPL-2.1-or-later | ||
|
||
export const sessionKeepalive = async () => { | ||
const response = await fetch('/api/application/auth/status', { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tarvitaanko uutta fetch-pohjaista kutsua tälle? Meillähän on jo auth status endpointille funktio
Juuri näin: Tämä modaalin näyttö ei ole aukoton tuon query systeemin ja axios interceptor redirectin takia. Kuitenkin jos käyttäjä vain idlaa viestinkirjoituksessa istunnon aikakatkaisun verran, niin modaali toimii kyllä jo. Meidän käyttämä query systeemi ei myöskään näytä refreshaavan asioita kun focusoin toisen sovelluksen MacOS:ällä. Selaimen tabien välillä vaihtaminen kyllä triggeröi datan refreshin ja potentiaalisen redirectin loginiin. Joten tämä kyllä toimii jo esim. ulkopuolisen tekstieditorin / käännösohjelman ja eVakan välisen (näppäimistöllä suoritetun) copy-pasten. Pääpointti tässä muutoksessa on tuo session keepalive ja toissijaisesti halusin tehdä jonkun käyttäjäystävällisen virheenkäsittelyn session keepaliven virhetilanteisiin. |
459b9b2
to
8ad6717
Compare
import BaseModal from './BaseModal' | ||
|
||
interface Props { | ||
isOpen: boolean |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Menee vähän hifistelyn puolelle mutta isOpen-boolean jonka ainoa tehtävä on estää koko komponentin rendaus tuntuu vähän hassulta ja iffittely voisi olla yksinkertaisempi tehdä vaan parent-komponentissa
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Korjattu
await this.#threadListItem.click() | ||
await this.#openReplyEditorButton.click() | ||
await this.#messageReplyContent.fill(content) | ||
} | ||
getReplyContentElement() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yksinkertaisempi ratkaisu olisi vaan paljastaa messageReplyContent
suoraan ulospäin (#messageReplyContent: Element
-> messageReplyContent: Element
). Nämä yhden rivin wrapperit on 99.9% ajasta turhia, varsinkin kun tässä käytännössä vaan vaihdetaan yksi nimi ("message reply content") toiseen ("reply content element")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Korjattu
8ad6717
to
3e946e0
Compare
Ennen tätä muutosta
Jos käyttäjä kirjoitti viestiä yli 30 minuuttia, hänen istunto aikakatkaistiin ja hänen pitkään kirjoittamansa viesti hävisi.
Tämän muutoksen jälkeen
Kuntalaisen ja henkilökunnan deskarin viestieditori kutsuu
GET /auth
endpointia 2 minuutin välein niin pitkään kun käyttäjä jatkaa kirjoitusta viestieditorissa. Tämä uusii istunnon voimassaoloajan, joten aikakatkaisua ei tapahdu kunhan viestin lähettää 30 minuutin sisään siitä kun on lopettanut kirjoituksen.Jos kirjoituksessa tulee 30 min tauko, niin sovellus havaitsee istunnon aikakatkaisun ja näyttää käyttäjälle modaalin:
Modaalin voi sulkea ja kopioida viestin leikepöydälle.
Tämä muutos lisää myös e2e testin sekä istunnon normaaliin aikakatkaisumekanismiin: etusivulle ohjaamiseen että istunnon automaattiseen uusintaan kuntalaisen viestieditoriin. Jotta nämä e2e testit on mahdollista ajaa alle 30 minuutissa, api-gw:hen on lisätty HTTP header perustainen tapa madaltaa istunnon voimassaoloaikaa.HTTP header perustainen tapa pakottaa lyhempi istunnon kesto on poistettu tästä PR:ästä