{% extends 'layout.html' %}
{% block title %}Nastavení hostitele{% endblock %}
{% block body %}
<div class="setup-box">
    <h2>HTTPS Hostitel</h2>
    <p>Základní doménové jméno a HTTPS port na kterých budou přístupny všechny aplikace.</p>
    <form id="update-host" action="/update-host" method="post">
        <table>
            <tr>
                <td>Doména</td>
                <td><input type="text" name="domain" id="domain" value="{{ domain }}"></td>
                <td class="remark">Plně kvalifikovaný doménový název, na kterém bude dostupný aplikační portál. Jednotlivé aplikace budou dostupné na subdoménách této domény.</td>
            </tr>
            <tr>
                <td>Port</td>
                <td><input type="text" name="port" id="port" value="{{ port }}"></td>
                <td class="remark">HTTPS port na kterém budou dostupné aplikace. Porty 22, 25, 80 a 8080 jsou vyhrazeny k jiným účelům. Výchozí HTTPS port je 443.</td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td colspan="2">
                    <input type="submit" id="host-submit" value="Nastavit hostitele">
                    <div id="host-message"></div>
                </td>
            </tr>
        </table>
    </form>
</div>

<div class="setup-box">
    <h2>DNS záznamy</h2>
    <p>Na jmenném serveru domény nastavené v sekci <em>HTTPS Hostitel</em> nastavte DNS záznamy typu A, případně i AAAA pro následující doménové názvy a nasměrujte je na vnější (tj. dostupnou z internetu) IP adresu tohoto virtuální stroje. Toto nastavení lze obvykle provést skrze webové rozhraní registrátora domény.</p>
    <p>Vnější IPv4 {% if ex_ipv4 %}je <strong>{{ ex_ipv4 }}</strong>{% else %}nebyla zjištěna{% endif %} a IPv6 {% if ex_ipv6 %}je <strong>{{ ex_ipv6 }}</strong>{% else %}nebyla zjištěna{% endif %}.</p>
    <ul>
        <li>{{ domain }}</li>
        <li>*.{{ domain }}</li>
    </ul>
    <p>Pokud jmenný server nepodporuje wildcard záznamy nebo pokud nemůžete či nechcete dedikovat virtuálnímu stroji všechny subdomény, nastavte místo toho záznamy pro následující doménové názvy</p>
    <ul style="column-count:3">
        <li>{{ domain }}</li>
        {% for app in apps|sort %}
        <li>{{ apps[app]['host'] }}.{{ domain }}</li>
        {% endfor %}
    </ul>
    <input type="button" id="verify-dns" value="Ověřit nastavení DNS">
    <div id="dns-message"></div>
    <div id="dns-wait" class="loader-wrap">
        <div class="loader"></div>
        <span>Ověřuje se nastavení DNS, prosím čekejte...</span>
    </div>
</div>

<div class="setup-box">
    <h2>Firewall a NAT</h2>
    <p>Pokud je stávající připojení k internetu zprostředkováno routerem s NAT, na hypervizoru je nastaven firewall nebo existují jiné restrikce síťového provozu, je nutno upravit nastavení příslušných komponent, aby byl provoz na portu {{ port }} (nastaveném v sekci <em>HTTPS Hostitel</em>) z internetu korektně nasměrován na místní adresu virtuálního stroje.</p>
    <p>Pokud bude využit systém automatického vyžádání a obnovy certifikátu (sekce <em>HTTPS certifikát</em>), je nutno aby byl na místní adresu virtuálního stroje nasměrován i port 80, případně byla nastavena HTTP proxy přesměrovávající doménová jména zmíněná v sekci <em>DNS záznamy</em>.</p>
    <p>Místní IPv4 {% if in_ipv4 %}je <strong>{{ in_ipv4 }}</strong>{% else %}nebyla zjištěna{% endif %} a IPv6 {% if in_ipv6 %}je <strong>{{ in_ipv6 }}</strong>{% else %}nebyla zjištěna{% endif %}.</p>
    <input type="button" id="verify-https" value="Ověřit nastavení portu {{ port }}">
    <div id="https-message"></div>
    <div id="https-wait" class="loader-wrap">
        <div class="loader"></div>
        <span>Ověřuje se nastavení firewallu a NAT pro port {{ port }}, prosím čekejte...</span>
    </div>
    <input type="button" id="verify-http" value="Ověřit nastavení portu 80">
    <div id="http-message"></div>
    <div id="http-wait" class="loader-wrap">
        <div class="loader"></div>
        <span>Ověřuje se nastavení firewallu a NAT pro port 80, prosím čekejte...</span>
    </div>
</div>

<div class="setup-box">
    <h2>HTTPS certifikát</h2>
    <p>Stávající certifikát je vystaven na jméno <strong>{{ cert_info['subject'] }}</strong> vystavitelem <strong>{{ cert_info['issuer'] }}</strong> a jeho platnost vyprší <strong>{{ cert_info['expires'] }}</strong>.</p>
    <form id="update-cert" action="/update-cert" method="post">
        <table>
            <tr>
                <td>Způsob správy</td>
                <td>
                    <select name="method" id="cert-method">
                        <option value="selfsigned"{% if cert_info['method'] == 'selfsigned' %} selected{% endif %}>Self-signed</option>
                        <option value="automatic"{% if cert_info['method'] == 'automatic' %} selected{% endif %}>Automaticky</option>
                        <option value="manual"{% if cert_info['method'] == 'manual' %} selected{% endif %}>Ručně</option>
                    </select>
                </td>
                <td class="remark">Volba "Self-signed" vygeneruje certifikát s vlastním podpisem a platností 20 let. Tento certifikát je použitelný pro testovací účely, ale většina mobilních aplikací s ním odmítne fungovat.
                    <br>Volba "Automaticky" způsobí, že systém automaticky zažádá o certifikát certifikační autority Let's Encrypt pro všechny plně kvalifikované doménové názvy (tj. nikoliv wildcard) zmíněné v sekci <em>DNS záznamy</em>. Počet žádostí o certifikát se stejným doménovým jménem je omezený na 5 týdně, proto je vhodné tento typ certifikátu nastavovat až po instalaci aplikací. Zároveň bude nainstalována úloha pro automatickou obnovu. Proces vyžádání tohoto typu certifikátu může trvat několik minut.
                    <br>Volba "Ručně" znamená, že soubory certifikátu a jeho soukromého klíče je nutno nahrát a následně obnovovat ručně skrze formulář na této stránce.</td>
            </tr>
            <tr class="cert-upload"{% if cert_info['method'] != 'manual' %} style="display:none"{% endif %}>
                <td>Soubor certifikátu</td>
                <td><input type="file" name="public" accept=".cer, .crt, .pem"></td>
                <td class="remark">Soubor s certifikátem ve formátu PEM.<br>Pokud je podepsán certifikační autoritou třetí strany, pak by tento soubor měl mimo koncového certifikátu obsahovat i podpisový certifikát.</td>
            </tr>
            <tr class="cert-upload"{% if cert_info['method'] != 'manual' %} style="display:none"{% endif %}>
                <td>Soubor klíče</td>
                <td><input type="file" name="private" accept=".key, .pem"></td>
                <td class="remark">Soubor se soukromým klíčem ve formátu PEM pro výše vybraný certifikát.</td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td colspan="2">
                    <input type="submit" id="cert-submit" value="Nastavit certifikát">
                    <div id="cert-message"></div>
                    <div id="cert-wait" class="loader-wrap">
                        <div class="loader"></div>
                        <span>Provádí se změna nastavení, prosím čekejte...</span>
                    </div>
                </td>
            </tr>
        </table>
    </form>
</div>
{% endblock %}
