Artifact 89a6bd6a260c87318ba578dfcfb2688b7e497bff:


<?php
namespace Garradin;

require_once __DIR__ . '/_inc.php';

$membre = $membres->getLoggedUser();

if (!$membre)
{
    throw new UserException("Ce membre n'existe pas.");
}

$error = false;
$confirm = false;

if (!empty($_POST['confirm']))
{
    if (!Utils::CSRF_check('edit_me_security'))
    {
        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    }
    elseif (trim(Utils::post('passe_confirm')) === '')
    {
        $error = 'Merci de bien vouloir renseigner votre mot de passe courant pour confirmer les changements.';
    }
    elseif ($membres->checkPassword(Utils::post('passe_confirm')))
    {
        $error = 'Le mot de passe fourni ne correspond pas au mot de passe actuel. Merci de bien vouloir renseigner votre mot de passe courant pour confirmer les changements.';
    }
    elseif (Utils::post('passe') != Utils::post('repasse'))
    {
        $error = 'La vérification ne correspond pas au mot de passe.';
    }
    elseif (Utils::post('otp_secret') && !$membres->checkOTP(Utils::post('otp_secret'), Utils::post('code')))
    {
        $error = 'Le code TOTP entré n\'est pas valide.';
    }
    else
    {
        try {
            $data = [
                'clef_pgp' => Utils::post('clef_pgp'),
            ];

            if (Utils::post('passe') && !empty($config->get('champs_membres')->get('passe')['editable']))
            {
                $data['passe'] = Utils::post('passe');
            }

            if (Utils::post('otp_secret'))
            {
                $data['secret_otp'] = Utils::post('otp_secret');
            }
            elseif (Utils::post('otp') == 'disable')
            {
                $data['secret_otp'] = null;
            }

            $membres->editSecurity($data);
            Utils::redirect('/admin/');
        }
        catch (UserException $e)
        {
            $error = $e->getMessage();
        }
    }

    $confirm = true;
}
elseif (Utils::post('save'))
{
    if (!Utils::CSRF_check('edit_me_security'))
    {
        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    }
    elseif (Utils::post('passe') != Utils::post('repasse'))
    {
        $error = 'La vérification ne correspond pas au mot de passe.';
    }
    else
    {
        $confirm = true;
    }
}

$tpl->assign('error', $error);
$tpl->assign('confirm', $confirm);

if (Utils::post('otp') == 'generate')
{
    $otp = $membres->getNewOTPSecret();
    $tpl->assign('otp', $otp);
}

$tpl->assign('pgp_disponible', \KD2\Security::canUseEncryption());
$tpl->assign('clef_pgp_fingerprint', !empty($membre['clef_pgp']) ? \KD2\Security::getEncryptionKeyFingerprint($membre['clef_pgp']) : null);

$tpl->assign('passphrase', Utils::suggestPassword());
$tpl->assign('champs', $config->get('champs_membres')->getAll());

$tpl->assign('membre', $membre);

$tpl->display('admin/mes_infos_securite.tpl');