getRow ( 'SELECT c.`e-mail` mail, u.active FROM vn2008.Clientes c JOIN account.user u ON u.id = c.Id_Cliente WHERE u.name = #', [$_REQUEST['recoverUser']] ); if (!($user['active'] && $user['mail'])) return TRUE; $service = $this->service; $token = $service->createToken ($_REQUEST['recoverUser'], FALSE, TRUE); $url = $service->getUrl () ."#!form=account/conf&token=$token"; $report = new Vn\Web\Report ($db, 'recover-password', ['url' => $url]); $report->sendMail ($user['mail']); return TRUE; } const LOWERS = 'abcdefghijklmnopqrstuvwxyz'; const UPPERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const DIGITS = '1234567890'; const SYMBOLS = '!$%&()=.'; function genPassword ($db) { $restrictions = $db->getRow ( 'SELECT length, nUpper, nDigits, nPunct FROM account.userPassword'); $pass = []; $newPass = ''; $nAlpha = $restrictions['length'] - ( $restrictions['nUpper'] + $restrictions['nDigits'] + $restrictions['nPunct']); $this->genRands ($pass, self::LOWERS, $nAlpha); $this->genRands ($pass, self::UPPERS, $restrictions['nUpper']); $this->genRands ($pass, self::DIGITS, $restrictions['nDigits']); $this->genRands ($pass, self::SYMBOLS, $restrictions['nPunct']); for ($i = count ($pass) - 1; $i >= 0; $i--) { $rand = rand (0, $i); $newPass .= $pass[$rand]; array_splice ($pass, $rand, 1); } return $newPass; } function genRands (&$pass, $chars, $max) { $len = strlen ($chars) - 1; for ($i = 0; $i < $max; $i++) $pass[] = $chars[rand (0, $len)]; } }