SATS/lib/cyclic-hash/decr

74 lines
1.8 KiB
Plaintext
Raw Normal View History

#!/usr/bin/php
<?php
#define('SECRET_FILE', '/home/sats/satsd/conf/machine.secret');
define('SECRET_FILE', '/home/xdrm-brackets/Desktop/git.xdrm.io/logauth-sats/lib/cyclic-hash/secret');
define('SECRET_SIZE', 250);
/* [1] Function that generates a random secret
=========================================================*/
function generate_secret(){
/* (1) Generate random set */
$charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_';
/* (2) Set useful variables */
$clen = strlen($charlist);
$secret = '';
/* (3) Generate random characters one by one */
for( $i = 0 ; $i < SECRET_SIZE ; $i++ )
$secret .= $charlist[rand(0, $clen - 1)];
/* (4) Return the secret */
return $secret;
}
/* [2] Fetch necessary data
=========================================================*/
/* (1) Fetch secret file */
$secret = @file_get_contents(SECRET_FILE);
/* (2) Check secret file format */
if( !is_string($secret) || !preg_match("/^(.{250}):(\d+)$/", $secret, $match) ){
// Generate new secret
$secret = generate_secret().':1000';
// Try to override the secret file
@file_put_contents(SECRET_FILE, $secret) && die(0) || die(127);
}
/* (3) Extract data */
$key = (string) $match[1];
$depth = (int) $match[2];
/* [3] If can decrement, decrement
=========================================================*/
if( $depth > 1 ){
/* (1) Decrement the depth */
$depth--;
/* (2) Try to override the secret file */
@file_put_contents(SECRET_FILE, "$key:$depth") && die(0) || die(127);
/* [4] If cannot decrement, generate new password
=========================================================*/
}else{
// Generate new secret
$secret = generate_secret().':1000';
// Try to override the secret file
file_put_contents(SECRET_FILE, $secret) && die(0) || die(127);
}
?>