130 lines
4.2 KiB
PHP
130 lines
4.2 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Utility;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Config;
|
||
use Exception;
|
||
use Schema;
|
||
|
||
class LibraryController extends Controller
|
||
{
|
||
public static function getFileVersion()
|
||
{
|
||
try {
|
||
$app = Config::get('app.version');
|
||
if ($app) {
|
||
return preg_replace('/[^0-9,.]/', '', $app);
|
||
} else {
|
||
return 0;
|
||
}
|
||
} catch (Exception $ex) {
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
public static function getDatabaseVersion()
|
||
{
|
||
try {
|
||
$database = self::isDatabaseSetup();
|
||
if ($database == true) {
|
||
if (Schema::hasColumn('settings_system', 'version')) {
|
||
return \DB::table('settings_system')->where('id', '=', '1')->first()->version;
|
||
} else {
|
||
return 0;
|
||
}
|
||
} else {
|
||
return 0;
|
||
}
|
||
} catch (Exception $ex) {
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
public static function isDatabaseSetup()
|
||
{
|
||
try {
|
||
if (Schema::hasTable('settings_system')) {
|
||
return true;
|
||
}
|
||
} catch (Exception $e) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public static function encryptByFaveoPublicKey($plaintext)
|
||
{
|
||
try {
|
||
// Compress the data to be sent
|
||
$plaintext = gzcompress($plaintext);
|
||
|
||
// Get the public Key of the recipient
|
||
$path = storage_path('app'.DIRECTORY_SEPARATOR.'faveo-public.key');
|
||
$key_content = file_get_contents($path);
|
||
|
||
//dd($path);
|
||
$publicKey = openssl_pkey_get_public($key_content);
|
||
//dd($publicKey);
|
||
$a_key = openssl_pkey_get_details($publicKey);
|
||
|
||
// Encrypt the data in small chunks and then combine and send it.
|
||
$chunkSize = ceil($a_key['bits'] / 8) - 11;
|
||
$output = '';
|
||
|
||
while ($plaintext) {
|
||
$chunk = substr($plaintext, 0, $chunkSize);
|
||
$plaintext = substr($plaintext, $chunkSize);
|
||
$encrypted = '';
|
||
if (!openssl_public_encrypt($chunk, $encrypted, $publicKey)) {
|
||
throw new Exception('Failed to encrypt data');
|
||
}
|
||
$output .= $encrypted;
|
||
}
|
||
openssl_free_key($publicKey);
|
||
|
||
// This is the final encrypted data to be sent to the recipient
|
||
$encrypted = $output;
|
||
|
||
return $encrypted;
|
||
} catch (Exception $ex) {
|
||
dd($ex);
|
||
}
|
||
}
|
||
|
||
public static function decryptByFaveoPrivateKey($encrypted)
|
||
{
|
||
try {
|
||
//$encrypted = p¥Ùn¿olÓ¥9)OÞݸÔvh§=Ìtt1rkC‰É§%YœfÐS\BâkHW€mùÌØg¹+VŠ¥²?áÙ{/<¶¡£e¡ˆr°(V)Öíàr„Ž]K9¤ÿÖ¡Åmž”üÈoò״µºŽ06¼e€rœ['4çhH¾ö:¨œ–S„œ¦,|¤ÇqÂrÈŸd+ml‡ uötφûóŽ&›áyÙ(ÆŒÁ$‘¥±Zj*îàÒöL‘ˆD†aÉö_§è¶°·V„Þú]%ÅR*B=žéršæñ*i+á±èç|c¹ÑߟF$;
|
||
// Get the private Key
|
||
$path = storage_path('app'.DIRECTORY_SEPARATOR.'faveo-private.key');
|
||
$key_content = file_get_contents($path);
|
||
if (!$privateKey = openssl_pkey_get_private($key_content)) {
|
||
die('Private Key failed');
|
||
}
|
||
$a_key = openssl_pkey_get_details($privateKey);
|
||
|
||
// Decrypt the data in the small chunks
|
||
$chunkSize = ceil($a_key['bits'] / 8);
|
||
$output = '';
|
||
|
||
while ($encrypted) {
|
||
$chunk = substr($encrypted, 0, $chunkSize);
|
||
$encrypted = substr($encrypted, $chunkSize);
|
||
$decrypted = '';
|
||
if (!openssl_private_decrypt($chunk, $decrypted, $privateKey)) {
|
||
die('Failed to decrypt data');
|
||
}
|
||
$output .= $decrypted;
|
||
}
|
||
openssl_free_key($privateKey);
|
||
|
||
// Uncompress the unencrypted data.
|
||
$output = gzuncompress($output);
|
||
|
||
echo '<br /><br /> Unencrypted Data: '.$output;
|
||
} catch (Exception $ex) {
|
||
dd($ex);
|
||
}
|
||
}
|
||
}
|