Use human-readable duration inputs for signing request expiration settings
I maintainer di solito rispondono entro 1 giorno
@Matheus-Imberio ci sta già lavorando.
Dal 26/9/2026.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 76/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, typescript
- Ambito
- frontend
Direzione di ricerca
Start with RequestExpirationRuleEditor.vue, RenewalIntervalRuleEditor.vue, and model.ts to trace the existing expiration values and save flow. Read the matching tests before implementing the unit selection, exact conversion, validation, and enabled states. Run the relevant Vitest tests, then npm run lint, npm run stylelint, and npm run ts:check; done means values round-trip without changing the backend seconds format and initial render does not save.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Goal
Let administrators enter signing request durations with normal units instead of calculating raw seconds.
The backend and API must continue to store seconds.
UI
Use existing @nextcloud/vue components:
NcCheckboxRadioSwitchfor enabled/disabled state;NcTextFieldwithtype="number"for the amount;NcSelectfor the unit.
Example:
Enable request expiration
Expires after
[ 7 ] [ days ]
For access renewal:
Require access renewal
Renew access after
[ 24 ] [ hours ]
Units
Support:
- seconds;
- minutes;
- hours;
- days.
When loading an existing value, use the largest unit that represents the value exactly:
- divisible by
86400-> days; - else divisible by
3600-> hours; - else divisible by
60-> minutes; - else -> seconds.
Examples:
300->5 minutes3600->1 hour86400->1 day604800->7 days61->61 seconds
This rule is required so old values can be loaded and saved without data loss.
Save behavior
Convert the amount back to seconds before saving.
- Disabled expiration stays
0. - Disabled renewal stays
0. - Do not save only because the component was opened.
- Do not silently round a value.
- Reject invalid, negative, non-finite, or unsafe numeric values.
- The final seconds value must be a safe integer before it is sent.
Do not add a new maximum duration in the frontend. The backend policy remains the source of truth.
Main files
src/views/Settings/PolicyWorkbench/settings/expiration-rules/RequestExpirationRuleEditor.vue
src/views/Settings/PolicyWorkbench/settings/expiration-rules/RenewalIntervalRuleEditor.vue
src/views/Settings/PolicyWorkbench/settings/expiration-rules/model.ts
Update the matching tests.
Compatibility
Do not change:
- policy keys;
- API payload shape;
- backend normalization;
- stored seconds;
- database or app config.
Target branch
main
Milestone: Next Major (36)
Tests
Cover:
- every unit conversion;
- largest exact unit selection;
- exact round trips;
61 secondsand other non-divisible values;- enabled and disabled states;
- invalid and negative input;
- overflow/unsafe integer input;
- no save on initial render.
Run:
- relevant Vitest tests;
npm run lint;npm run stylelint;npm run ts:check.
Done when
- Common durations do not require manual seconds conversion.
- Existing values round-trip without change.
- Invalid values cannot produce a silent
0or rounded value. - Backend/API contracts stay unchanged.
- Tests pass.
Good first issue
The backend format is already defined. Keep this work inside the existing expiration editor, model, and tests.
Additional context
- If you have questions, feel free to ask in this issue.
- Give a ⭐️ star to this repository if you find LibreSign useful and would like to support the project.
- You can also join our community: https://t.me/LibreSign
- Lingua principale
- PHP
- Stelle
- 830
- Fork
- 161
- Merge medio
- 7h 3m
- PR unite (30g)
- 488
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di LibreSign/libresign
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 83/100
LibreSign/libresign#9007 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
backend enhancement php
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Validation page says "This document is valid" for a document with no signatureForse già presa @maia-andre l’ha presa 12 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
LibreSign/libresign#8284 · 5 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di LibreSign/libresign
Issue simili
-
needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
loginWithCustomTokenExchange() fails when an organization is configuredForse già presa @awss1i l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
auth0/auth0-PHP#883 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
type/bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
flarum/framework#5231 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
major-release
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 67/100
Intervention/image#1553 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
omegaup/omegaup#10353 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni