mirror of
https://github.com/Bubka/2FAuth.git
synced 2025-04-10 18:48:17 +02:00
Move method from model to the Logo service
This commit is contained in:
parent
e540e2bb26
commit
9b634dd55f
@ -320,7 +320,7 @@ public function setCounterAttribute($value)
|
|||||||
*/
|
*/
|
||||||
public function getOTP()
|
public function getOTP()
|
||||||
{
|
{
|
||||||
Log::info(sprintf('OTP requested for TwoFAccount #%s', $this->id));
|
Log::info(sprintf('OTP requested for TwoFAccount (%s)', $this->id ? 'id:'.$this->id: 'preview'));
|
||||||
|
|
||||||
// Early exit if the model has an undecipherable secret
|
// Early exit if the model has an undecipherable secret
|
||||||
if (strtolower($this->secret) === __('errors.indecipherable')) {
|
if (strtolower($this->secret) === __('errors.indecipherable')) {
|
||||||
@ -352,7 +352,7 @@ public function getOTP()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::info(sprintf('New OTP generated for TwoFAccount #%s', $this->id));
|
Log::info(sprintf('New OTP generated for TwoFAccount (%s)', $this->id ? 'id:'.$this->id: 'preview'));
|
||||||
|
|
||||||
return $OtpDto;
|
return $OtpDto;
|
||||||
|
|
||||||
@ -441,7 +441,7 @@ public function fillWithURI(string $uri, bool $isSteamTotp = false)
|
|||||||
$this->icon = $this->storeImageAsIcon($this->generator->getParameter('image'));
|
$this->icon = $this->storeImageAsIcon($this->generator->getParameter('image'));
|
||||||
}
|
}
|
||||||
if (!$this->icon) {
|
if (!$this->icon) {
|
||||||
$this->icon = $this->defaultLogo();
|
$this->icon = $this->getDefaultIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::info(sprintf('TwoFAccount filled with an URI'));
|
Log::info(sprintf('TwoFAccount filled with an URI'));
|
||||||
@ -584,16 +584,11 @@ private function storeImageAsIcon(string $url)
|
|||||||
*
|
*
|
||||||
* @return string|null The icon
|
* @return string|null The icon
|
||||||
*/
|
*/
|
||||||
private function defaultLogo()
|
private function getDefaultIcon()
|
||||||
{
|
{
|
||||||
$logoService = App::make(LogoService::class);
|
$logoService = App::make(LogoService::class);
|
||||||
$logoFilename = $logoService->getLogo($this->service);
|
|
||||||
|
|
||||||
if ($logoFilename) {
|
return $logoService->getIcon($this->service);
|
||||||
$newFilename = Str::random(40).'.svg';
|
|
||||||
return Storage::disk('icons')->put($newFilename, Storage::disk('logos')->get($logoFilename)) ? $newFilename : null;
|
|
||||||
}
|
|
||||||
else return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
class LogoService
|
class LogoService
|
||||||
{
|
{
|
||||||
@ -26,22 +27,40 @@ public function __construct()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch a logo for the given service and set it as an icon
|
||||||
|
*
|
||||||
|
* @param string $serviceName Name of the service to fetch a logo for
|
||||||
|
* @return string|null The icon filename or null if no logo has been found
|
||||||
|
*/
|
||||||
|
public function getIcon(string $serviceName)
|
||||||
|
{
|
||||||
|
$logoFilename = $this->getLogo($serviceName);
|
||||||
|
|
||||||
|
if ($logoFilename) {
|
||||||
|
$newFilename = Str::random(40).'.svg';
|
||||||
|
return Storage::disk('icons')->put($newFilename, Storage::disk('logos')->get($logoFilename)) ? $newFilename : null;
|
||||||
|
}
|
||||||
|
else return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the logo's filename for a given service
|
* Return the logo's filename for a given service
|
||||||
*
|
*
|
||||||
* @param string $serviceName Name of the service to fetch a logo for
|
* @param string $serviceName Name of the service to fetch a logo for
|
||||||
* @return string|null The logo filename or null if no logo has been found
|
* @return string|null The logo filename or null if no logo has been found
|
||||||
*/
|
*/
|
||||||
public function getLogo(string $serviceName) : string
|
public function getLogo(string $serviceName)
|
||||||
{
|
{
|
||||||
$domain = $this->tfas->get(strtolower($serviceName));
|
$domain = $this->tfas->get($this->cleanDomain($serviceName));
|
||||||
$logoFilename = $domain.'.svg';
|
$logoFilename = $domain.'.svg';
|
||||||
|
|
||||||
if ($domain && !Storage::disk('logos')->exists($logoFilename)) {
|
if ($domain && !Storage::disk('logos')->exists($logoFilename)) {
|
||||||
$this->fetchLogo($logoFilename);
|
$this->fetchLogo($logoFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Storage::disk('logos')->exists($logoFilename) ? $logoFilename : '';
|
return Storage::disk('logos')->exists($logoFilename) ? $logoFilename : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -97,7 +116,7 @@ protected function cacheTfaDirectorySource() : void
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch a logo and store it to the disk
|
* Fetch and cache a logo from 2fa.Directory repository
|
||||||
*
|
*
|
||||||
* @param string $logoFile Logo filename to fetch
|
* @param string $logoFile Logo filename to fetch
|
||||||
* @return void
|
* @return void
|
||||||
@ -118,4 +137,13 @@ protected function fetchLogo(string $logoFile) : void
|
|||||||
Log::error(sprintf('Fetching of logo "%s" failed.', $logoFile));
|
Log::error(sprintf('Fetching of logo "%s" failed.', $logoFile));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function cleanDomain($domain) : string
|
||||||
|
{
|
||||||
|
return strtolower(str_replace(['+'], ['plus'], $domain));
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user