Optional Domain mit Port und ohne für Sharelinks

This commit is contained in:
2026-09-05 23:59:21 +02:00
parent 3ae0ab0a88
commit 172dd95387
7 changed files with 100 additions and 17 deletions

View File

@@ -2,9 +2,33 @@
* gemeinsam.js - Hilfsmittel für alle Dialogseiten.
*/
/** Ruft die Ereignisseite und wirft bei Fehlern eine Ausnahme. */
/**
* Ruft die Ereignisseite und wirft bei Fehlern eine Ausnahme.
*
* Unterscheidet zwei Fälle, die sonst dieselbe nichtssagende Meldung
* ergeben ("An unexpected error occurred"):
*
* * Die Nachricht erreicht keinen Empfänger - das Hintergrundskript
* ist nicht geladen oder abgestürzt.
* * Der Empfänger meldet einen Fehler zurück.
*/
export async function ruf(befehl, daten = {}) {
const antwort = await browser.runtime.sendMessage({ befehl, ...daten });
let antwort;
try {
antwort = await browser.runtime.sendMessage({ befehl, ...daten });
} catch (err) {
console.error("[paperless] sendMessage", befehl, err);
throw new Error(
`Das Hintergrundskript antwortet nicht (${befehl}).\n`
+ `Ursprüngliche Meldung: ${err?.message || err}\n\n`
+ `Einzelheiten in der Konsole: Extras -> Entwicklerwerkzeuge -> `
+ `Debuggen von Add-ons -> Inspizieren.`);
}
if (antwort === undefined) {
throw new Error(
`Keine Antwort auf ${befehl}. Das Hintergrundskript ist `
+ `vermutlich nicht geladen.`);
}
if (!antwort?.ok) {
throw new Error(antwort?.fehler || `Aufruf ${befehl} fehlgeschlagen`);
}

View File

@@ -18,6 +18,17 @@
Ohne abschließenden Schrägstrich. Nur http und https.
</div>
<label for="shareBaseUrl" data-i18n="fieldShareBaseUrl">
Adresse für Freigabelinks (optional)
</label>
<input type="text" id="shareBaseUrl"
placeholder="https://dms.example.org">
<div class="hinweis" data-i18n="optionsHintShareUrl">
Nur nötig, wenn der interne Zugang über einen abweichenden Port oder
Namen läuft. Freigabelinks werden dann unter dieser Adresse gebaut,
damit sie auch von außen funktionieren. Leer = Basisadresse.
</div>
<label for="token" data-i18n="fieldToken">API-Token</label>
<input type="password" id="token">
<div class="hinweis" data-i18n="optionsHintToken">
@@ -54,6 +65,10 @@
<input type="text" id="shareTag" style="width:160px">
</div>
<div class="hinweis" data-i18n="optionsHintTag">
Tag beim Teilen leer lassen, um keine Kennzeichnung zu setzen.
</div>
<label for="ignorierteKleiner" style="margin-top:8px"
data-i18n="fieldIgnoreSmaller">
Anhänge vorab abwählen unter … Bytes

View File

@@ -7,13 +7,14 @@
* darf, ist eine unnötig grosse Angriffsfläche.
*/
import { ladeEinstellungen, speichereEinstellungen } from "../lib/settings.js";
import { ladeEinstellungen, speichereEinstellungen, zugriffsmuster }
from "../lib/settings.js";
import { uebersetzeSeite, ruf, fehlerAnzeigen, meldungAnzeigen }
from "./gemeinsam.js";
const $ = (id) => document.getElementById(id);
const FELDER = ["baseUrl", "token", "versionLabel", "shareDays", "shareTag",
"ignorierteKleiner"];
const FELDER = ["baseUrl", "shareBaseUrl", "token", "versionLabel",
"shareDays", "shareTag", "ignorierteKleiner"];
document.addEventListener("DOMContentLoaded", async () => {
uebersetzeSeite();
@@ -42,7 +43,7 @@ async function rechtAnzeigen() {
}
let origin;
try {
origin = new URL(url).origin + "/*";
origin = zugriffsmuster(url);
} catch {
ziel.className = "fehler";
ziel.textContent = browser.i18n.getMessage("errBadUrl") || "Ungültige Adresse.";
@@ -58,6 +59,7 @@ async function rechtAnzeigen() {
function gelesen() {
return {
baseUrl: $("baseUrl").value.trim().replace(/\/+$/, ""),
shareBaseUrl: ($("shareBaseUrl")?.value || "").trim().replace(/\/+$/, ""),
token: $("token").value.trim(),
versionLabel: $("versionLabel").value.trim() || "Thunderbird {datum}",
shareDays: Number($("shareDays").value || 0),
@@ -83,7 +85,7 @@ function speichern() {
let origin;
try {
origin = new URL(werte.baseUrl).origin + "/*";
origin = zugriffsmuster(werte.baseUrl);
} catch {
fehlerAnzeigen(browser.i18n.getMessage("errBadUrl")
|| "Ungültige Adresse. Erwartet wird https://rechner oder http://rechner.");