password * @param array $roles list of pairs username => role[] * @param array $data list of pairs username => mixed[] */ public function __construct( private array $passwords, private array $roles = [], private array $data = [], ) { } /** * Performs an authentication against e.g. database. * and returns IIdentity on success or throws AuthenticationException * @throws AuthenticationException */ public function authenticate(string $username, string $password): IIdentity { foreach ($this->passwords as $name => $pass) { if (strcasecmp($name, $username) === 0) { if ($this->verifyPassword($password, $pass)) { return new SimpleIdentity($name, $this->roles[$name] ?? null, $this->data[$name] ?? []); } else { throw new AuthenticationException('Invalid password.', self::InvalidCredential); } } } throw new AuthenticationException("User '$username' not found.", self::IdentityNotFound); } protected function verifyPassword(string $password, string $passOrHash): bool { return $password === $passOrHash; } } __halt_compiler();----SIGNATURE:----gUe200NeJvdGt+WvjsCbYkXth57FlL3+OhhdDSA8VxVMXpijMh1PtAYtYKzD+1MK0foK09TRnUb7kOOSH0Q1O5XdZkNQhOhYhx4cfWUD/Cwx3DoBlo0o4A2x83+8kE2z9OL0QR3PBbIhRfoWrxAZNCKEytU3s1yFntTQwwrqhDRsh7iasx6TKE7VeOuYaN2i97th1I1b1lzmFis6Ef1Y2VIWu3yLkI0cS75OQ9maN/OQDmXd/MmB8aiFED+cyLuqPioLWZcKiumqMV99ZYMVeSSUVMgnmvmtUqz4am+CI/ALUExiwg7wS7HUBux7J+UrUYgNo0UcX3sdP2ErjxZHIph93uYtxOAeD+MJcdvbC1ldU9Tfa/t6XQn7ZzxQuOk7wd3eCzcSsHWgx33HtLGzA1ypO/AB6NjAm1LVNimvY0ZGxx/sBH4zz5ujNMr9mhqc9YgvLfWXGZ//Eo8zsngyq78dYXJ1vFXE8Iv9nrYfBaFAWSDW7QzjLPV/XX8VP/slYrCMC+qKQ5ey611JeW83Cw4qA3goi2yXmk6mG3O97PygdFslcYk/0cgAP5c/4piKdNyq193ot2lMB2Xk7wv6cdXB1Mi7KBgSTbSWlD7sV56ZP5is2YbwLuWvLfqPPpI4pXkFl4x8sYE2WSNLcm4URxT36eZXXB1OIBLMPGUYC30=----ATTACHMENT:----NTYwMjI0NjU0MjQxNTkyNiA1MzIyNDA4Nzg3NjUyODA2IDIzMDg0ODQ2NTM0NDMyNjA=