HEX
Server: Apache
System: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux
User: u115237990 (7145895)
PHP: 8.3.32
Disabled: NONE
Upload Files
File: /homepages/35/d993672390/htdocs/dermiteseborrheique/auth/register.php
<?php
define('DS_APP', true);
require_once dirname(__DIR__) . '/includes/init.php';

if (auth_check()) redirect('app/dashboard.php');

$errors = [];
$name = $email = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_verify();

    $name     = sanitize_string(post('name'), 100);
    $email    = sanitize_email(post('email')) ?: '';
    $password = post('password');
    $confirm  = post('password_confirm');
    $terms    = !empty($_POST['terms']);

    $v = new Validator($_POST);
    $v->required('name', 'Prénom et nom')
      ->min('name', 2, 'Le nom')
      ->required('email', 'Email')
      ->email('email')
      ->required('password', 'Mot de passe')
      ->min('password', 8, 'Le mot de passe')
      ->matches('password', 'password_confirm', 'Les mots de passe');

    if (!$terms) {
        $errors['terms'] = 'Vous devez accepter les conditions d\'utilisation.';
    }

    if ($v->fails()) {
        $errors = array_merge($errors, $v->errors());
    } elseif (empty($errors)) {
        try {
            $userId = auth_register($name, $email, $password, current_lang());
            flash('success', __('auth.verify_email_sent', ['email' => $email]));
            redirect('auth/login.php');
        } catch (RuntimeException $e) {
            $errors['global'] = $e->getMessage();
        }
    }
}

// Google OAuth
$googleUrl = '';
if (GOOGLE_CLIENT_ID) {
    $state = generate_token(16);
    $_SESSION['oauth_state'] = $state;
    $params = http_build_query([
        'client_id'     => GOOGLE_CLIENT_ID,
        'redirect_uri'  => GOOGLE_REDIRECT_URI,
        'response_type' => 'code',
        'scope'         => 'openid email profile',
        'state'         => $state,
        'access_type'   => 'online',
        'prompt'        => 'select_account',
    ]);
    $googleUrl = 'https://accounts.google.com/o/oauth2/v2/auth?' . $params;
}

$pageTitle = __('auth.register_title');
ob_start();
?>

<div class="auth-header">
  <div class="auth-icon">✨</div>
  <h1 class="auth-title">Créer mon compte</h1>
  <p class="auth-subtitle">Gratuit, sans carte bancaire. Commencez à identifier vos déclencheurs.</p>
</div>

<?php if (!empty($errors['global'])): ?>
  <div class="flash flash-error"><?= e($errors['global']) ?></div>
<?php endif; ?>

<?php if ($googleUrl): ?>
<a href="<?= e($googleUrl) ?>" class="btn-google">
  <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
    <path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" fill="#4285F4"/>
    <path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853"/>
    <path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" fill="#FBBC05"/>
    <path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335"/>
  </svg>
  Continuer avec Google
</a>
<div class="auth-divider">ou</div>
<?php endif; ?>

<form method="POST" action="" novalidate>
  <?= csrf_field() ?>

  <div class="form-group">
    <label class="form-label" for="name"><?= _e('auth.name') ?></label>
    <input type="text" id="name" name="name"
      class="form-input <?= isset($errors['name']) ? 'error' : '' ?>"
      value="<?= e($name) ?>"
      placeholder="Marie Dupont"
      autocomplete="name" required>
    <?php if (isset($errors['name'])): ?>
      <div class="form-error"><?= e($errors['name']) ?></div>
    <?php endif; ?>
  </div>

  <div class="form-group">
    <label class="form-label" for="email"><?= _e('auth.email') ?></label>
    <input type="email" id="email" name="email"
      class="form-input <?= isset($errors['email']) ? 'error' : '' ?>"
      value="<?= e($email) ?>"
      placeholder="vous@exemple.fr"
      autocomplete="email" required>
    <?php if (isset($errors['email'])): ?>
      <div class="form-error"><?= e($errors['email']) ?></div>
    <?php endif; ?>
  </div>

  <div class="form-group">
    <label class="form-label" for="password"><?= _e('auth.password') ?></label>
    <div class="input-wrapper">
      <input type="password" id="password" name="password"
        class="form-input <?= isset($errors['password']) ? 'error' : '' ?>"
        placeholder="8 caractères minimum"
        autocomplete="new-password" required>
      <button type="button" class="password-toggle" aria-label="Afficher">👁</button>
    </div>
    <div class="password-strength">
      <div class="strength-bar"><div class="strength-fill"></div></div>
      <div class="strength-text"></div>
    </div>
    <?php if (isset($errors['password'])): ?>
      <div class="form-error"><?= e($errors['password']) ?></div>
    <?php endif; ?>
  </div>

  <div class="form-group">
    <label class="form-label" for="password_confirm"><?= _e('auth.password_confirm') ?></label>
    <div class="input-wrapper">
      <input type="password" id="password_confirm" name="password_confirm"
        class="form-input <?= isset($errors['password']) ? 'error' : '' ?>"
        placeholder="Répétez le mot de passe"
        autocomplete="new-password" required>
      <button type="button" class="password-toggle" aria-label="Afficher">👁</button>
    </div>
  </div>

  <div class="form-group">
    <label class="form-check">
      <input type="checkbox" name="terms" <?= !empty($_POST['terms']) ? 'checked' : '' ?>>
      En créant un compte, j'accepte les
      <a href="<?= url('legal/terms.php') ?>" target="_blank">CGU</a>
      et la
      <a href="<?= url('legal/privacy.php') ?>" target="_blank">Politique de confidentialité</a>
    </label>
    <?php if (isset($errors['terms'])): ?>
      <div class="form-error"><?= e($errors['terms']) ?></div>
    <?php endif; ?>
  </div>

  <button type="submit" class="btn-primary">
    <span>Créer mon compte gratuit</span>
    <div class="spinner"></div>
  </button>
</form>

<div class="auth-footer" style="margin-top:20px;">
  <?= _e('auth.have_account') ?>
  <a href="<?= url('auth/login.php') ?>"><?= _e('auth.login_btn') ?></a>
</div>

<?php
$content = ob_get_clean();
require DS_VIEWS . 'layouts/auth.php';