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

Session vanhenemisen estäminen viestiä kirjoittaessa #5828

Merged
merged 4 commits into from
Nov 8, 2024

Conversation

Wnt
Copy link
Contributor

@Wnt Wnt commented Oct 15, 2024

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:
image
image
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ä

@Wnt Wnt force-pushed the session-keepalive-while-typing branch 4 times, most recently from f2d0f6b to 459b9b2 Compare October 17, 2024 13:24
@Wnt Wnt marked this pull request as ready for review October 17, 2024 13:25
Copy link
Contributor

@Joosakur Joosakur left a 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', {
Copy link
Contributor

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

Copy link
Contributor

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
Copy link
Contributor

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.

Copy link
Contributor Author

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.

Copy link
Contributor

@Gekkio Gekkio left a 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', {
Copy link
Contributor

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

apigw/src/shared/session.ts Outdated Show resolved Hide resolved
frontend/src/lib-common/utils/helpers.ts Outdated Show resolved Hide resolved
frontend/src/e2e-test/specs/0_citizen/citizen-auth.spec.ts Outdated Show resolved Hide resolved
frontend/src/e2e-test/specs/7_messaging/messaging.spec.ts Outdated Show resolved Hide resolved
frontend/src/e2e-test/browser.ts Outdated Show resolved Hide resolved
@Wnt
Copy link
Contributor Author

Wnt commented Oct 22, 2024

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

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.

@Wnt Wnt force-pushed the session-keepalive-while-typing branch from 459b9b2 to 8ad6717 Compare November 1, 2024 13:57
import BaseModal from './BaseModal'

interface Props {
isOpen: boolean
Copy link
Contributor

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

Copy link
Contributor Author

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() {
Copy link
Contributor

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")

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Korjattu

@Wnt Wnt force-pushed the session-keepalive-while-typing branch from 8ad6717 to 3e946e0 Compare November 8, 2024 07:30
@Wnt Wnt added the enhancement Uusi toiminnallisuus tai parannus label Nov 8, 2024
@Wnt Wnt merged commit 2b38bbe into master Nov 8, 2024
31 of 32 checks passed
@Wnt Wnt deleted the session-keepalive-while-typing branch November 8, 2024 08:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Uusi toiminnallisuus tai parannus
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants