<?php

require_once __DIR__.'/utils.class.php';

/**
 * Représente un moyen d'authentifier un utilisateur.
 */
abstract class authenticator {

    /**
     * Instance du framework
     */
    public application $framework;

    /**
     * Injection de la dépendance au framework.
     *
     * @param application $framework  Instance du framework
     *
     * @return authenticator
     */
    public function __construct(application $framework) {
        $this->framework = $framework;
    }

    /**
     * Authentifie l'utilisateur.
     *
     * @param  array  $data  Données concernant l'utilisateur à authentifier.
     *
     * @return array   format: (bool $authenticated, string $message, array $data)
     */
    abstract public function authenticate(array $data);

    /**
     * Récupère le login/mot de passe depuis les données fournies.
     *
     * @param  array  $data  Données concernant l'utilisateur à authentifier.
     *
     * @return array   format: (string|null $login, string $password)
     */
    protected function get_login_and_password(array $data) {
        return array($data['login'] ?? null, $data['password'] ?? '');
    }
}
