mirror of
https://github.com/clitor-is-protocol/kevacoin-cli.git
synced 2025-03-13 05:41:21 +00:00
simplify _CLITOR_IS_ meta record
This commit is contained in:
parent
d5050d9901
commit
b5d0fc3ef5
312
cli/fix.php
312
cli/fix.php
@ -1,5 +1,11 @@
|
||||
<?php
|
||||
|
||||
// Init version
|
||||
define(
|
||||
'_CLITOR_IS_',
|
||||
'1.3.0'
|
||||
);
|
||||
|
||||
// Init helper
|
||||
function _exec(
|
||||
string $processor,
|
||||
@ -24,173 +30,163 @@ function _exec(
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check file exits
|
||||
if (!file_exists($argv[2]))
|
||||
// Check processor exits
|
||||
if (empty($argv[1]))
|
||||
{
|
||||
exit('filename does not exist!' . PHP_EOL);
|
||||
}
|
||||
|
||||
// Get file hash sum
|
||||
$md5file = md5_file(
|
||||
$argv[2]
|
||||
);
|
||||
|
||||
// Search namespace by md5file
|
||||
echo 'Get namespaces list...' . PHP_EOL;
|
||||
|
||||
$namespaces = _exec(
|
||||
$argv[1],
|
||||
'keva_list_namespaces'
|
||||
);
|
||||
|
||||
// Get _CLITOR_IS_ meta
|
||||
foreach ((array) $namespaces as $namespace)
|
||||
{
|
||||
echo sprintf(
|
||||
'Search for _CLITOR_IS_ match file MD5 %s ...' . PHP_EOL,
|
||||
$md5file
|
||||
print(
|
||||
'processor required' . PHP_EOL
|
||||
);
|
||||
|
||||
$meta = _exec(
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!file_exists($argv[1]))
|
||||
{
|
||||
print(
|
||||
'processor does not exist' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check namespace provided
|
||||
if (empty($argv[2]))
|
||||
{
|
||||
print(
|
||||
'namespace required' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check target file does not exist yet
|
||||
if (!file_exists($argv[3]))
|
||||
{
|
||||
print(
|
||||
'filename does not exist' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get namespace meta
|
||||
$clitoris = _exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"keva_get %s _CLITOR_IS_",
|
||||
$argv[2]
|
||||
)
|
||||
);
|
||||
|
||||
if (empty($clitoris->value))
|
||||
{
|
||||
print(
|
||||
'_CLITOR_IS_ not found for this namespace' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Validate protocol
|
||||
if (empty($clitoris->value))
|
||||
{
|
||||
print(
|
||||
'_CLITOR_IS_ not found' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Split content to smaller parts (according to the protocol limits)
|
||||
$pieces = str_split(
|
||||
base64_encode(
|
||||
file_get_contents(
|
||||
$argv[3]
|
||||
)
|
||||
),
|
||||
3072
|
||||
);
|
||||
|
||||
// Count total pieces
|
||||
$total = count(
|
||||
$pieces
|
||||
);
|
||||
|
||||
// Begin pieces saving
|
||||
foreach ($pieces as $key => $value)
|
||||
{
|
||||
// Check piece stored in blockchain is valid
|
||||
$piece = _exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"%s '%s' '%s'",
|
||||
'keva_get',
|
||||
$namespace->namespaceId,
|
||||
'_CLITOR_IS_'
|
||||
"keva_get %s %d",
|
||||
$argv[2],
|
||||
$key
|
||||
)
|
||||
);
|
||||
|
||||
if ($value = @json_decode($meta->value))
|
||||
// Piece value not found
|
||||
if (empty($piece->value))
|
||||
{
|
||||
if (
|
||||
isset($value->pieces) &&
|
||||
isset($value->pieces->total) &&
|
||||
isset($value->pieces->size) &&
|
||||
|
||||
isset($value->file) &&
|
||||
isset($value->file->md5) &&
|
||||
$value->file->md5 === $md5file
|
||||
)
|
||||
{
|
||||
// Meta found
|
||||
echo sprintf(
|
||||
'_CLITOR_IS_ found for this file with namespace %s' . PHP_EOL,
|
||||
$namespace->namespaceId
|
||||
);
|
||||
|
||||
// Split content to smaller parts using _CLITOR_IS_ size defined before
|
||||
$pieces = str_split(
|
||||
base64_encode(
|
||||
file_get_contents(
|
||||
$argv[2]
|
||||
)
|
||||
),
|
||||
$value->pieces->size
|
||||
);
|
||||
|
||||
// Count total pieces
|
||||
$total = count(
|
||||
$pieces
|
||||
);
|
||||
|
||||
// Validate pieces count
|
||||
if ($value->pieces->total !== $total)
|
||||
{
|
||||
echo '_CLITOR_IS_ have another pieces quantity' . PHP_EOL;
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Begin pieces saving
|
||||
foreach ($pieces as $key => $value)
|
||||
{
|
||||
// Check piece stored is valid
|
||||
$piece = _exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"%s '%s' '%s'",
|
||||
'keva_get',
|
||||
$namespace->namespaceId,
|
||||
$key
|
||||
)
|
||||
);
|
||||
|
||||
// Piece value not found
|
||||
if (empty($piece->value))
|
||||
{
|
||||
echo sprintf(
|
||||
'Piece %s/%s value not found, creating...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total
|
||||
);
|
||||
}
|
||||
|
||||
// Piece value invalid, begin blockchain record
|
||||
else if ($piece->value !== $value)
|
||||
{
|
||||
echo sprintf(
|
||||
'Piece %s/%s value invalid (%s <> %s), rewriting...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total,
|
||||
md5(
|
||||
$piece->value
|
||||
),
|
||||
md5(
|
||||
$value
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Piece valid
|
||||
else
|
||||
{
|
||||
echo sprintf(
|
||||
'Piece %s/%s - OK' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total
|
||||
);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
print_r(
|
||||
_exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"%s '%s' '%s' '%s'",
|
||||
'keva_put',
|
||||
$namespace->namespaceId,
|
||||
$key,
|
||||
$value
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// Apply delays to prevent too-long-mempool-chain reject
|
||||
$delay = isset($argv[3]) && $argv[3] > 0 ? (int) $argv[3] : 60;
|
||||
|
||||
echo sprintf(
|
||||
'Piece %s/%s sent, waiting %s seconds...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total,
|
||||
$delay
|
||||
);
|
||||
|
||||
sleep($delay);
|
||||
}
|
||||
|
||||
// Print result
|
||||
echo sprintf(
|
||||
'done! run to extract: php %s/get.php %s %s' . PHP_EOL,
|
||||
__DIR__,
|
||||
$argv[1],
|
||||
$namespace->namespaceId
|
||||
);
|
||||
|
||||
break;
|
||||
}
|
||||
printf(
|
||||
'Piece %s/%s value not found, create new record...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total
|
||||
);
|
||||
}
|
||||
|
||||
// Piece value invalid, begin blockchain record
|
||||
else if ($piece->value != $value)
|
||||
{
|
||||
printf(
|
||||
'Piece %s/%s value invalid, overwrite record...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total,
|
||||
);
|
||||
}
|
||||
|
||||
// Piece valid
|
||||
else
|
||||
{
|
||||
printf(
|
||||
'Piece %s/%s - OK' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total
|
||||
);
|
||||
|
||||
continue; // skip next operations for this piece
|
||||
}
|
||||
|
||||
// Record new piece
|
||||
print_r(
|
||||
_exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"keva_put %s %d %s",
|
||||
$argv[2],
|
||||
$key,
|
||||
$value
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// Apply delays to prevent too-long-mempool-chain reject
|
||||
$delay = isset($argv[3]) && $argv[3] > 0 ? (int) $argv[3] : 60;
|
||||
|
||||
printf(
|
||||
'Piece %s/%s sent, waiting %s seconds...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total,
|
||||
$delay
|
||||
);
|
||||
|
||||
sleep(
|
||||
$delay
|
||||
);
|
||||
}
|
||||
|
||||
echo 'Could not recover this file!' . PHP_EOL;
|
||||
// Done
|
||||
printf(
|
||||
'data successfully synced with namespace "%s"' . PHP_EOL,
|
||||
$argv[2]
|
||||
);
|
133
cli/get.php
133
cli/get.php
@ -1,5 +1,11 @@
|
||||
<?php
|
||||
|
||||
// Init version
|
||||
define(
|
||||
'_CLITOR_IS_',
|
||||
'1.3.0'
|
||||
);
|
||||
|
||||
// Init helper
|
||||
function _exec(
|
||||
string $processor,
|
||||
@ -24,71 +30,80 @@ function _exec(
|
||||
return false;
|
||||
}
|
||||
|
||||
// Validate arguments
|
||||
if (empty($argv[1]))
|
||||
{
|
||||
print(
|
||||
'processor required' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!file_exists($argv[1]))
|
||||
{
|
||||
print(
|
||||
'processor does not exist' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if (empty($argv[2]))
|
||||
{
|
||||
print(
|
||||
'namespace required' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if (empty($argv[3]))
|
||||
{
|
||||
print(
|
||||
'destination file required' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if (file_exists($argv[3]))
|
||||
{
|
||||
print(
|
||||
'destination file already exists' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get clitoris
|
||||
$clitoris = _exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
'%s %s "_CLITOR_IS_"',
|
||||
'keva_get',
|
||||
'keva_get %s "_CLITOR_IS_"',
|
||||
$argv[2]
|
||||
)
|
||||
);
|
||||
|
||||
print_r(
|
||||
$clitoris
|
||||
);
|
||||
|
||||
// Validate protocol
|
||||
if (empty($clitoris->value))
|
||||
{
|
||||
exit(
|
||||
sprintf(
|
||||
'%s does not contain _CLITOR_IS_' . PHP_EOL,
|
||||
$argv[2]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (!$clitoris = @json_decode(
|
||||
$clitoris->value
|
||||
))
|
||||
{
|
||||
exit(
|
||||
sprintf(
|
||||
'could not decode _CLITOR_IS_ of %s' . PHP_EOL,
|
||||
$argv[2]
|
||||
)
|
||||
print(
|
||||
'_CLITOR_IS_ not found' . PHP_EOL
|
||||
);
|
||||
}
|
||||
|
||||
if ($clitoris->version !== '1.0.0')
|
||||
{
|
||||
exit(
|
||||
sprintf(
|
||||
'_CLITOR_IS_ of %s not compatible!' . PHP_EOL,
|
||||
$argv[2]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (empty($clitoris->file->name))
|
||||
{
|
||||
exit(
|
||||
sprintf(
|
||||
'_CLITOR_IS_ format issue for %s!' . PHP_EOL,
|
||||
$argv[2]
|
||||
)
|
||||
);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Merge content data
|
||||
$chain = [];
|
||||
|
||||
foreach (
|
||||
(array)
|
||||
_exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
'%s %s "\d+"',
|
||||
'keva_filter',
|
||||
'keva_filter %s "\d+"',
|
||||
$argv[2]
|
||||
)
|
||||
) as $piece)
|
||||
@ -99,9 +114,11 @@ foreach (
|
||||
!isset($piece->height)
|
||||
)
|
||||
{
|
||||
exit(
|
||||
'please wait for all pieces sending complete!'
|
||||
print(
|
||||
'please wait for all pieces sending complete!' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Keep all key versions in memory
|
||||
@ -121,12 +138,16 @@ $pieces = [];
|
||||
|
||||
foreach ($chain as $key => $height)
|
||||
{
|
||||
|
||||
ksort(
|
||||
$height
|
||||
);
|
||||
|
||||
$pieces[$key] = $height[array_key_last($height)];
|
||||
$pieces[$key] = $height
|
||||
[
|
||||
array_key_last(
|
||||
$height
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
ksort(
|
||||
@ -134,21 +155,15 @@ ksort(
|
||||
);
|
||||
|
||||
// Save file to destination
|
||||
$filename = isset($argv[3]) ? $argv[3] : sprintf(
|
||||
'%s/../data/import/[kevacoin][%s]%s',
|
||||
__DIR__,
|
||||
$argv[2],
|
||||
$clitoris->file->name
|
||||
);
|
||||
|
||||
file_put_contents(
|
||||
$filename,
|
||||
$argv[3],
|
||||
base64_decode(
|
||||
implode('', $pieces)
|
||||
)
|
||||
);
|
||||
|
||||
echo sprintf(
|
||||
'saved to %s' . PHP_EOL,
|
||||
$filename
|
||||
printf(
|
||||
'namespace "%s" saved to "%s"' . PHP_EOL,
|
||||
$argv[2],
|
||||
$argv[3]
|
||||
);
|
153
cli/put.php
153
cli/put.php
@ -1,5 +1,11 @@
|
||||
<?php
|
||||
|
||||
// Init version
|
||||
define(
|
||||
'_CLITOR_IS_',
|
||||
'1.3.0'
|
||||
);
|
||||
|
||||
// Init helper
|
||||
function _exec(
|
||||
string $processor,
|
||||
@ -24,38 +30,71 @@ function _exec(
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check file exits
|
||||
if (!file_exists($argv[2]))
|
||||
// Check processor exits
|
||||
if (empty($argv[1]))
|
||||
{
|
||||
exit('filename does not exist!' . PHP_EOL);
|
||||
print(
|
||||
'processor required' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get file hash sum
|
||||
$md5file = md5_file(
|
||||
$argv[2]
|
||||
);
|
||||
if (!file_exists($argv[1]))
|
||||
{
|
||||
print(
|
||||
'processor does not exist' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check file exits
|
||||
if (empty($argv[2]))
|
||||
{
|
||||
print(
|
||||
'filename required' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!file_exists($argv[2]))
|
||||
{
|
||||
print(
|
||||
'filename does not exist' . PHP_EOL
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get file name
|
||||
$name = basename(
|
||||
$basename = basename(
|
||||
$argv[2]
|
||||
);
|
||||
|
||||
// Check filename not longer of protocol
|
||||
if (mb_strlen($name) > 255)
|
||||
if (mb_strlen($basename) > 255)
|
||||
{
|
||||
$name = $md5file;
|
||||
// Get file hash sum
|
||||
$basename = md5_file(
|
||||
$argv[2]
|
||||
);
|
||||
|
||||
// Dump event
|
||||
print(
|
||||
'Filename to long, used md5_file as key...' . PHP_EOL
|
||||
);
|
||||
}
|
||||
|
||||
// Split content to smaller parts, according to the protocol limits
|
||||
$size = isset($argv[3]) && $argv[3] <= 3072 ? (int) $argv[3] : 3072;
|
||||
|
||||
// Split content to smaller parts (according to the protocol limits)
|
||||
$pieces = str_split(
|
||||
base64_encode(
|
||||
file_get_contents(
|
||||
$argv[2]
|
||||
)
|
||||
),
|
||||
$size
|
||||
3072
|
||||
);
|
||||
|
||||
// Count total pieces
|
||||
@ -63,67 +102,35 @@ $total = count(
|
||||
$pieces
|
||||
);
|
||||
|
||||
// Get software protocol details
|
||||
$software = _exec(
|
||||
$argv[1],
|
||||
'-getinfo'
|
||||
);
|
||||
|
||||
print_r($software);
|
||||
|
||||
// Create namespace to collect there data pieces
|
||||
$ns = _exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"%s '%s'",
|
||||
'keva_namespace',
|
||||
$name
|
||||
"keva_namespace '%s'",
|
||||
str_replace(
|
||||
"'",
|
||||
"\'",
|
||||
$basename
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
print_r($ns);
|
||||
// Validate namespace created
|
||||
if (empty($ns->namespaceId))
|
||||
{
|
||||
print(
|
||||
'could not create namespace record' . PHP_EOL
|
||||
);
|
||||
|
||||
// Create meta description for the future generations
|
||||
exit;
|
||||
}
|
||||
|
||||
// Create meta record
|
||||
print_r(
|
||||
_exec(
|
||||
$argv[1],
|
||||
sprintf(
|
||||
"%s %s '%s' '%s'",
|
||||
'keva_put',
|
||||
$ns->namespaceId,
|
||||
'_CLITOR_IS_',
|
||||
json_encode(
|
||||
[
|
||||
'version' => '1.0.0',
|
||||
'model' =>
|
||||
[
|
||||
'name' => 'kevacoin',
|
||||
'software' =>
|
||||
[
|
||||
'version' => $software->version,
|
||||
'protocol' => $software->protocolversion
|
||||
]
|
||||
],
|
||||
'pieces' =>
|
||||
[
|
||||
'total' => $total,
|
||||
'size' => $size,
|
||||
],
|
||||
'file' =>
|
||||
[
|
||||
'name' => basename(
|
||||
$argv[2]
|
||||
),
|
||||
'mime' => mime_content_type(
|
||||
$argv[2]
|
||||
),
|
||||
'size' => filesize(
|
||||
$argv[2]
|
||||
),
|
||||
'md5' => $md5file
|
||||
]
|
||||
]
|
||||
)
|
||||
'keva_put %s %s %s', $ns->namespaceId, '_CLITOR_IS_', _CLITOR_IS_
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -147,20 +154,28 @@ foreach ($pieces as $key => $value)
|
||||
// Apply delays to prevent too-long-mempool-chain reject
|
||||
$delay = isset($argv[4]) && $argv[4] > 0 ? (int) $argv[4] : 60;
|
||||
|
||||
echo sprintf(
|
||||
printf(
|
||||
'%s/%s sent, waiting %s seconds...' . PHP_EOL,
|
||||
$key + 1,
|
||||
$total,
|
||||
$delay
|
||||
);
|
||||
|
||||
sleep($delay);
|
||||
sleep(
|
||||
$delay
|
||||
);
|
||||
}
|
||||
|
||||
// Print result
|
||||
echo sprintf(
|
||||
'done! run to extract: php %s/get.php %s %s' . PHP_EOL,
|
||||
// Done
|
||||
printf(
|
||||
'data successfully sent to namespace "%s"' . PHP_EOL,
|
||||
$ns->namespaceId
|
||||
);
|
||||
|
||||
printf(
|
||||
"run to extract: /usr/bin/php '%s/get.php' '%s' '%s' '/path/to/%s'" . PHP_EOL,
|
||||
__DIR__,
|
||||
$argv[1],
|
||||
$ns->namespaceId
|
||||
$ns->namespaceId,
|
||||
$basename
|
||||
);
|
Loading…
x
Reference in New Issue
Block a user