Files
recipe-importer/app/templates/settings.html
T
admin a0bcb62588 v0.6.0: Sobors.hu parser, HTTP auth, recipe validation, UI polish
- New sobors.hu parser with ingredient groups and section headers
- Incomplete recipe warnings (missing ingredients/instructions)
- Optional HTTP Basic Auth (configurable on settings page)
- Brand text: "Recept" in white, "Importáló" in blue
- Larger logo (36px), favicon using logo_notext.svg

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 18:07:05 +01:00

176 lines
6.7 KiB
HTML

{% extends "base.html" %}
{% block title %}Beállítások — Recept Importáló{% endblock %}
{% block head %}
<style>
.info-box {
background: var(--surface2);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 1rem;
margin-bottom: 1.5rem;
font-size: 0.85rem;
color: var(--text-dim);
line-height: 1.6;
}
.info-box strong { color: var(--text); }
.info-box code {
background: var(--bg);
padding: 0.15rem 0.4rem;
border-radius: 4px;
font-size: 0.8rem;
color: var(--accent-light);
}
</style>
{% endblock %}
{% block content %}
<div class="info-box">
<strong>Külső vs. belső URL-ek</strong><br>
Az itt megadott URL-ek a <strong>külső (böngészőből elérhető)</strong> címek —
ezeket használja az importáló a receptekre mutató linkek generálásához.<br><br>
Ha a Recept Importáló ugyanazon a Docker hálózaton fut, mint a Mealie/Tandoor,
beállíthatsz <strong>belső URL-eket</strong> is a <code>docker-compose.yml</code>-ben
környezeti változóként:<br>
<code>MEALIE_INTERNAL_URL=http://mealie:9000</code><br>
<code>TANDOOR_INTERNAL_URL=http://tandoor:8080</code><br><br>
A belső URL-ek gyorsabb, közvetlen API-hívásokat tesznek lehetővé
(elkerülve a reverse proxy-t / Cloudflare-t).
Ha nincsenek megadva, a fenti külső URL-ek lesznek használva az API-hívásokhoz is.
</div>
<form method="POST" action="/settings">
<div class="card">
<h2>Mealie kapcsolat</h2>
<label for="mealie_url">Mealie URL (külső)</label>
<input type="url" id="mealie_url" name="mealie_url"
value="{{ cfg.mealie_url }}"
placeholder="https://mealie.example.com">
<label for="mealie_api_key">API kulcs</label>
<input type="password" id="mealie_api_key" name="mealie_api_key"
value="{{ cfg.mealie_api_key }}"
placeholder="Mealie API token">
<p class="text-dim mb-2" style="font-size:0.85rem;">
Az API kulcsot a Mealie felhasználói profilod alatt hozhatod létre:
<em>Profil → API Tokenek</em>
</p>
<div class="flex">
<button type="button" class="btn btn-secondary" id="testMealieBtn" onclick="testMealie()">
Kapcsolat tesztelése
</button>
<span id="testMealieResult"></span>
</div>
</div>
<div class="card">
<h2>Tandoor kapcsolat</h2>
<label for="tandoor_url">Tandoor URL (külső)</label>
<input type="url" id="tandoor_url" name="tandoor_url"
value="{{ cfg.tandoor_url }}"
placeholder="https://recipes.example.com">
<label for="tandoor_api_key">API kulcs</label>
<input type="password" id="tandoor_api_key" name="tandoor_api_key"
value="{{ cfg.tandoor_api_key }}"
placeholder="Tandoor API token">
<p class="text-dim mb-2" style="font-size:0.85rem;">
Az API kulcsot a Tandoor-ban itt hozhatod létre:
<em>Settings → API Browser → Auth Token</em>
</p>
<div class="flex">
<button type="button" class="btn btn-secondary" id="testTandoorBtn" onclick="testTandoor()">
Kapcsolat tesztelése
</button>
<span id="testTandoorResult"></span>
</div>
</div>
<div class="card">
<h2>Hozzáférés-védelem</h2>
<p class="text-dim mb-2" style="font-size:0.85rem;">
HTTP Basic Auth bekapcsolásával jelszóval védheted az alkalmazást.
Hagyd üresen a kikapcsoláshoz.
</p>
<label for="auth_username">Felhasználónév</label>
<input type="text" id="auth_username" name="auth_username"
value="{{ cfg.auth_username or '' }}"
placeholder="admin" autocomplete="username">
<label for="auth_password">Jelszó</label>
<input type="password" id="auth_password" name="auth_password"
value="" placeholder="{% if cfg.auth_password_hash %}(nem változott){% else %}Jelszó megadása{% endif %}"
autocomplete="new-password">
<p class="text-dim mb-2" style="font-size:0.85rem;">
{% if cfg.auth_password_hash %}
A védelem aktív. Új jelszó megadásával frissítheted, üresen hagyva marad a jelenlegi.
A felhasználónév törlésével kikapcsolhatod a védelmet.
{% else %}
Jelenleg nincs védelem beállítva.
{% endif %}
</p>
</div>
<div class="card">
<button type="submit" class="btn btn-primary">Mentés</button>
</div>
</form>
{% endblock %}
{% block scripts %}
<script>
async function testMealie() {
const btn = document.getElementById('testMealieBtn');
const result = document.getElementById('testMealieResult');
btn.disabled = true;
result.innerHTML = '<span class="spinner"></span>';
try {
const form = new FormData();
form.append('mealie_url', document.getElementById('mealie_url').value);
form.append('mealie_api_key', document.getElementById('mealie_api_key').value);
const resp = await fetch('/settings/test', { method: 'POST', body: form });
const data = await resp.json();
if (data.ok) {
const v = data.data.version || '?';
result.innerHTML = '<span class="text-success">✓ Kapcsolódva (Mealie v' + v + ')</span>';
} else {
result.innerHTML = '<span class="text-danger">✗ ' + data.error + '</span>';
}
} catch (e) {
result.innerHTML = '<span class="text-danger">✗ Hálózati hiba</span>';
}
btn.disabled = false;
}
async function testTandoor() {
const btn = document.getElementById('testTandoorBtn');
const result = document.getElementById('testTandoorResult');
btn.disabled = true;
result.innerHTML = '<span class="spinner"></span>';
try {
const form = new FormData();
form.append('tandoor_url', document.getElementById('tandoor_url').value);
form.append('tandoor_api_key', document.getElementById('tandoor_api_key').value);
const resp = await fetch('/settings/test-tandoor', { method: 'POST', body: form });
const data = await resp.json();
if (data.ok) {
const v = data.data.version || '?';
result.innerHTML = '<span class="text-success">✓ Kapcsolódva (Tandoor v' + v + ')</span>';
} else {
result.innerHTML = '<span class="text-danger">✗ ' + data.error + '</span>';
}
} catch (e) {
result.innerHTML = '<span class="text-danger">✗ Hálózati hiba</span>';
}
btn.disabled = false;
}
</script>
{% endblock %}