%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/Uuid/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/Uuid/UuidHelper.php |
<?php
/**
* This file is part of the Passwords App
* created by Marius David Wieschollek
* and licensed under the AGPL.
*/
namespace OCA\Passwords\Helper\Uuid;
use Exception;
use OCA\Passwords\Services\LoggingService;
use OCA\Passwords\Helper\Random\Randomizer;
/**
* Class UuidHelper
*
* @package OCA\Passwords\Helper\Uuid
*/
class UuidHelper {
/**
* UuidHelper constructor.
*
* @param LoggingService $logger
* @param Randomizer $randomizer
*/
public function __construct(protected LoggingService $logger, protected Randomizer $randomizer) {
}
/**
* @return string
*/
public function generateUuid(): string {
try {
return $this->generateUuidV4();
} catch(Exception $e) {
$this->logger->error('Could not generate UUIDv4');
$this->logger->logException($e);
return $this->generateFallbackUuid();
}
}
/**
* @return string
* @throws Exception
*/
protected function generateUuidV4(): string {
return implode('-', [
bin2hex($this->randomizer->getBytes(4)),
bin2hex($this->randomizer->getBytes(2)),
bin2hex(chr((ord($this->randomizer->getBytes(1)) & 0x0F) | 0x40)).bin2hex($this->randomizer->getBytes(1)),
bin2hex(chr((ord($this->randomizer->getBytes(1)) & 0x3F) | 0x80)).bin2hex($this->randomizer->getBytes(1)),
bin2hex($this->randomizer->getBytes(6))
]);
}
/**
* @return string
*/
protected function generateFallbackUuid(): string {
$string = uniqid().uniqid().uniqid();
return substr($string, 0, 8).'-'.
substr($string, 8, 4).'-'.
substr($string, 12, 4).'-'.
substr($string, 16, 4).'-'.
substr($string, 20, 12);
}
}