gateway = $gateway; } /** * @param string $username * @param string $password * @param string $confirmPassword * @param string $email * @return ValidationFail[] */ public function register(string $username, string $password, string $confirmPassword, string $email): array { $errors = []; if ($password != $confirmPassword) { $errors[] = new FieldValidationFail("confirmpassword", "password and password confirmation are not equals"); } if ($this->gateway->mailExist($email)) { $errors[] = new FieldValidationFail("email", "email already exist"); } if(empty($errors)) { $hash = password_hash($password, PASSWORD_DEFAULT); $this->gateway->insertAccount($username, $hash, $email); } return $errors; } /** * @param string $email * @return array|null */ public function getUserFields(string $email): ?array { return $this->gateway->getUserFields($email); } /** * @param string $email * @param string $password * @return ValidationFail[] $errors */ public function login(string $email, string $password): array { $errors = []; if (!$this->gateway->mailExist($email)) { $errors[] = new FieldValidationFail("email", "email doesnt exists"); return $errors; } $hash = $this->gateway->getUserHash($email); if (!password_verify($password, $hash)) { $errors[] = new FieldValidationFail("password", "invalid password"); } return $errors; } }