mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-20 02:11:36 +00:00
51 lines
1.2 KiB
PHP
Executable File
51 lines
1.2 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\ValidationRules;
|
|
|
|
use Illuminate\Contracts\Validation\Rule;
|
|
|
|
class SshKeyRule implements Rule
|
|
{
|
|
/**
|
|
* Determine if the validation rule passes.
|
|
*
|
|
* @param string $attribute
|
|
* @param mixed $value
|
|
* @return bool
|
|
*/
|
|
public function passes($attribute, $value)
|
|
{
|
|
$key_parts = explode(' ', $value, 3);
|
|
if (count($key_parts) < 2) {
|
|
return false;
|
|
}
|
|
if (count($key_parts) > 3) {
|
|
return false;
|
|
}
|
|
$algorithm = $key_parts[0];
|
|
$key = $key_parts[1];
|
|
if (! in_array($algorithm, ['ssh-rsa', 'ssh-dss'])) {
|
|
return false;
|
|
}
|
|
$key_base64_decoded = base64_decode($key, true);
|
|
if ($key_base64_decoded == false) {
|
|
return false;
|
|
}
|
|
$check = base64_decode(substr($key, 0, 16));
|
|
$check = preg_replace("/[^\w\-]/", '', $check);
|
|
if ((string) $check !== (string) $algorithm) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return array|\Illuminate\Contracts\Translation\Translator|string|null
|
|
*/
|
|
public function message()
|
|
{
|
|
return __('Invalid key');
|
|
}
|
|
}
|