<?php
//----------------------------------------------------------------------
// src/Services/Security/PasswordTools.php
//----------------------------------------------------------------------
namespace App\Services\Security;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Access;
use App\Entity\Communication\Sms\Sms;
use App\Services\LogTools;
class PasswordTools
{
public function __construct(ManagerRegistry $doctrine, LogTools $logTools)
{
$this->em = $doctrine->getManager();
$this->logTools = $logTools;
}
// http://jaspreetchahal.org/php-random-password-generator-function/
public function generatePassword($length)
{
$lowercase = "qwertyuiopasdfghjklzxcvbnm";
$uppercase = "ASDFGHJKLZXCVBNMQWERTYUIOP";
$numbers = "1234567890";
//$specialcharacters = "{}[];:,./<>?_+~!@#";
$specialcharacters = "+!@#";
$randomCode = "";
$length = abs($length);
$lengthSlice = $length / 4;
$max = strlen($lowercase) - 1;
for ($x = 0; $x < $lengthSlice; $x++)
{
$i = random_int(0, $max);
$randomCode .= $lowercase[$i];
}
$max = strlen($uppercase) - 1;
for ($x = 0; $x < $lengthSlice; $x++)
{
$i = random_int(0, $max);
$randomCode .= $uppercase[$i];
}
$max = strlen($specialcharacters) - 1;
for ($x = 0; $x < abs($length/3); $x++)
{
$i = random_int(0, $max);
$randomCode .= $specialcharacters[$i];
}
$max = strlen($numbers) - 1;
for ($x = $lengthSlice * 2; $x < $length; $x++)
{
$i = random_int(0, $max);
$randomCode .= $numbers[$i];
}
return str_shuffle($randomCode);
}
public function generateAlphaNumCode($length)
{
$lowercase = "qwertyuiopasdfghjklzxcvbnm";
$numbers = "1234567890";
$randomCode = "";
$length = abs($length);
$lengthSlice = $length / 2;
$max = strlen($lowercase) - 1;
for ($x = 0; $x < $lengthSlice; $x++)
{
$i = random_int(0, $max);
$randomCode .= $lowercase[$i];
}
$max = strlen($numbers) - 1;
for ($x = 0; $x < $lengthSlice; $x++)
{
$i = random_int(0, $max);
$randomCode .= $numbers[$i];
}
return str_shuffle($randomCode);
}
public function isValidPassword($password)
{
$uppercase = preg_match('@[A-Z]@', $password);
$lowercase = preg_match('@[a-z]@', $password);
$number = preg_match('@[0-9]@', $password);
//$specialChars = preg_match('@[^\w]@', $password);
if(!$uppercase || !$lowercase || !$number || strlen($password) < 8)
{
return false;
}
return true;
}
public function generateUniqueActivationCode()
{
$accessRep = $this->em->getRepository(Access::class);
do {
$code = $this->generateAlphaNumCode(20);
$doppelganger = $accessRep->findOneByActivationCode($code);
}while ($doppelganger !== null);
return $code;
}
public function generateSmsClientResponseCode()
{
do
{
$code = $this->generateAlphaNumCode(20);
$doppelganger = $this->em->getRepository(Sms::class)->findOneByClientResponseCode($code);
if ($doppelganger === null)
{
return $code;
}
}while ($doppelganger !== null);
}
public function generateUniqId()
{
$uniqCode = uniqId('icod_');
return $uniqCode;
}
}