) {
max_size: *config::LIMIT as u32,
max_views: *config::MAX_VIEWS,
max_expiration: *config::MAX_EXPIRATION,
+ default_expire: *config::DEFAULT_EXPIRE,
allow_advanced: *config::ALLOW_ADVANCED,
allow_files: *config::ALLOW_FILES,
imprint_url: config::IMPRINT_URL.to_string(),
imprint_html: config::IMPRINT_HTML.to_string(),
+ disable_mode_switch: *config::DISABLE_MODE_SWITCH,
theme_new_note_notice: *config::THEME_NEW_NOTE_NOTICE,
theme_image: config::THEME_IMAGE.to_string(),
theme_text: config::THEME_TEXT.to_string(),
diff --git a/packages/backend/src/store.rs b/packages/backend/src/store.rs
index bebf2d2..c80b958 100644
--- a/packages/backend/src/store.rs
+++ b/packages/backend/src/store.rs
@@ -39,7 +39,11 @@ pub fn set(id: &String, note: &Note) -> Result<(), &'static str> {
conn.expire(id, seconds as i64)
.map_err(|_| "Unable to set expiration on notion")?
}
- None => {}
+ None => {
+ let seconds = 60 * 60; // Hardcoded 1 hour
+ conn.expire(id, seconds as i64)
+ .map_err(|_| "Unable to set expiration on notion")?
+ }
};
Ok(())
}
diff --git a/packages/cli/src/shared/api.ts b/packages/cli/src/shared/api.ts
index 6f8f010..d9029e0 100644
--- a/packages/cli/src/shared/api.ts
+++ b/packages/cli/src/shared/api.ts
@@ -111,10 +111,12 @@ export type Status = {
max_size: number
max_views: number
max_expiration: number
+ default_expiration: number
allow_advanced: boolean
allow_files: boolean
imprint_url: string
imprint_html: string
+ disable_mode_switch: boolean
theme_image: string
theme_text: string
theme_favicon: string
diff --git a/packages/frontend/src/lib/ui/AdvancedParameters.svelte b/packages/frontend/src/lib/ui/AdvancedParameters.svelte
index ba755d8..cd52871 100644
--- a/packages/frontend/src/lib/ui/AdvancedParameters.svelte
+++ b/packages/frontend/src/lib/ui/AdvancedParameters.svelte
@@ -23,6 +23,8 @@
$effect(() => {
if (!hasCustomPassword) customPassword = null
})
+
+ let disableModSwitch = $status && $status?.disable_mode_switch
@@ -32,28 +34,31 @@
type="number"
label={$t('common.views', { values: { n: 0 } })}
bind:value={note.views}
- disabled={timeExpiration}
+ disabled={timeExpiration && !disableModSwitch}
max={$status?.max_views}
min={1}
validate={(v) =>
($status && v <= $status?.max_views && v > 0) ||
$t('home.errors.max', { values: { n: $status?.max_views ?? 0 } })}
/>
+ {#if !disableModSwitch}
+ {/if}
- ($status && v < $status?.max_expiration) ||
+ // Use <= insteaad of < to avoid error message when value is equals to max.
+ ($status && v <= $status?.max_expiration) ||
$t('home.errors.max', { values: { n: $status?.max_expiration ?? 0 } })}
/>
diff --git a/packages/frontend/src/lib/views/Create.svelte b/packages/frontend/src/lib/views/Create.svelte
index a79aad6..e87c12a 100644
--- a/packages/frontend/src/lib/views/Create.svelte
+++ b/packages/frontend/src/lib/views/Create.svelte
@@ -66,6 +66,7 @@
const derived = customPassword && (await AES.derive(customPassword))
const key = derived ? derived[0] : await AES.generateKey()
+ const disableModSwitch = $status?.disable_mode_switch
const data: Note = {
contents: '',
@@ -79,8 +80,16 @@
if (note.contents === '') throw new EmptyContentError()
data.contents = await Adapters.Text.encrypt(note.contents, key)
}
- if (timeExpiration) data.expiration = parseInt(note.expiration as any)
- else data.views = parseInt(note.views as any)
+ if (disableModSwitch && advanced) {
+ data.views = parseInt(note.views as any)
+ data.expiration = parseInt(note.expiration as any)
+ } else {
+ if (timeExpiration) {
+ data.expiration = parseInt(note.expiration as any)
+ } else {
+ data.views = parseInt(note.views as any)
+ }
+ }
loading = $t('common.uploading')
const response = await API.create(data)