a0bcb62588
- 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>
176 lines
6.7 KiB
HTML
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 %}
|