mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 01:27:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Invoice Ninja (https://invoiceninja.com).
 | 
						|
 *
 | 
						|
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
						|
 *
 | 
						|
 * @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @license https://www.elastic.co/licensing/elastic-license
 | 
						|
 */
 | 
						|
 | 
						|
namespace App\Utils\Traits;
 | 
						|
 | 
						|
use App\Libraries\MultiDB;
 | 
						|
use Hashids\Hashids;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class MakesHash.
 | 
						|
 */
 | 
						|
trait MakesHash
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Creates a simple alphanumeric Hash.
 | 
						|
     * @return string - asd89f7as89df6asf78as6fds
 | 
						|
     */
 | 
						|
    public function createHash() : string
 | 
						|
    {
 | 
						|
        return Str::random(config('ninja.key_length'));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a simple alphanumeric Hash which is prepended with a encoded database prefix.
 | 
						|
     *
 | 
						|
     * @param $db - Full database name
 | 
						|
     * @return string 01-asfas8df76a78f6a78dfsdf
 | 
						|
     */
 | 
						|
    public function createDbHash($db) : string
 | 
						|
    {
 | 
						|
        if (config('ninja.db.multi_db_enabled')) {
 | 
						|
            return  $this->getDbCode($db).'-'.Str::random(config('ninja.key_length'));
 | 
						|
        }
 | 
						|
 | 
						|
        return Str::random(config('ninja.key_length'));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $db - Full database name
 | 
						|
     * @return string - hashed and encoded int 01,02,03,04
 | 
						|
     */
 | 
						|
    public function getDbCode($db) : string
 | 
						|
    {
 | 
						|
        $hashids = new Hashids(config('ninja.hash_salt'), 10);
 | 
						|
 | 
						|
        return $hashids->encode(str_replace(MultiDB::DB_PREFIX, '', $db));
 | 
						|
    }
 | 
						|
 | 
						|
    public function encodePrimaryKey($value) : string
 | 
						|
    {
 | 
						|
        $hashids = new Hashids(config('ninja.hash_salt'), 10);
 | 
						|
 | 
						|
        return $hashids->encode($value);
 | 
						|
    }
 | 
						|
 | 
						|
    public function decodePrimaryKey($value, $return_string_failure = false)
 | 
						|
    {
 | 
						|
 | 
						|
        try {
 | 
						|
            $hashids = new Hashids(config('ninja.hash_salt'), 10);
 | 
						|
 | 
						|
            $decoded_array = $hashids->decode($value);
 | 
						|
 | 
						|
            if(isset($decoded_array[0]) ?? false) {
 | 
						|
                return $decoded_array[0];
 | 
						|
            } elseif($return_string_failure) {
 | 
						|
                return "Invalid Primary Key";
 | 
						|
            } else {
 | 
						|
                throw new \Exception('Invalid Primary Key');
 | 
						|
            }
 | 
						|
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            return response()->json(['error'=>'Invalid primary key'], 400);
 | 
						|
        }
 | 
						|
 | 
						|
        /*
 | 
						|
        try {
 | 
						|
            $hashids = new Hashids(config('ninja.hash_salt'), 10);
 | 
						|
 | 
						|
            $decoded_array = $hashids->decode($value);
 | 
						|
 | 
						|
            if (! is_array($decoded_array)) {
 | 
						|
                throw new \Exception('Invalid Primary Key');
 | 
						|
            }
 | 
						|
 | 
						|
            return $decoded_array[0];
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            return response()->json(['error'=>'Invalid primary key'], 400);
 | 
						|
        }
 | 
						|
        */
 | 
						|
    }
 | 
						|
 | 
						|
    public function transformKeys($keys)
 | 
						|
    {
 | 
						|
        if (is_array($keys)) {
 | 
						|
            foreach ($keys as &$value) {
 | 
						|
                $value = $this->decodePrimaryKey($value);
 | 
						|
            }
 | 
						|
 | 
						|
            return $keys;
 | 
						|
        } else {
 | 
						|
            return $this->decodePrimaryKey($keys);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |