Files
EasySoft-ZenTaoPMS/bin/encryptext.php
2012-07-12 02:20:49 +00:00

199 lines
8.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
if(empty($argv[1])) die('Must request a param');
$filePath = $argv[1];
$users = empty($argv[2]) ? 0 : $argv[2];
$company = empty($argv[3]) ? '' : $argv[3];
$type = empty($argv[4]) ? '' : $argv[4];
$ip = empty($argv[5]) ? '' : $argv[5];
$mac = empty($argv[6]) ? '' : $argv[6];
$dirName = basename($filePath);
echo "Removing file\n";
`rm -rf /tmp/$dirName`;
echo "Copying file\n";
`cp -rf $filePath /tmp`;
include dirname(dirname(__FILE__)) . '/framework/control.class.php';
$filePath = "/tmp/$dirName";
$defaultValue = "";
$moduleDir = $filePath . '/module/';
$modules = glob($moduleDir . '*');
echo "Seting default value for control\n";
$notice = <<<EOD
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dli'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<title>Error</title>
</head>
<body>
您版本的用户数是{\$properties['user']['value']},已经超过该版本的人数限制,请联系我们<br>
email<a href='mailto:zentao@cnezsoft.com'>zentao@cnezsoft.com</a><br>
电话4006 889923<br>
网址:<a href='http://www.zentao.net/goto.php?item=buypro'>www.zentao.net</a><br>
<br><br>
The number of users is {\$properties['user']['value']} for the edition and has exceeded the limit, please contact us.<br>
email:<a href='mailto:zentao@cnezsoft.com'>zentao@cnezsoft.com</a><br>
tel:4006 889923<br>
Web:<a href='http://www.zentao.net/goto.php?item=buypro'>www.zentao.net</a><br>
</body>
</html>
EOD;
$limitUser =<<<EOD
if(function_exists('ioncube_license_properties')) \$properties = ioncube_license_properties();
\$user = \$this->dao->select("COUNT('*') as count")->from(TABLE_USER)->where('deleted')->eq(0)->fetch();
if(!empty(\$properties['user']) and \$properties['user']['value'] < \$user->count) die("$notice");
EOD;
$limitFunc =<<<EOD
public function __construct()
{
parent::__construct();
$limitUser
}
EOD;
foreach($modules as $module)
{
$controlPath = $module . '/control.php';
$className = basename($module);
if(file_exists($controlPath))
{
echo "Seting value for $className\n";
include $controlPath;
$reflection = new ReflectionClass($className);
if(method_exists($className, '__construct'))
{
$construct = new ReflectionMethod($className, '__construct');
$fileName = $construct->getFileName();
$controlContent = file_get_contents($controlPath);
$controlLines = explode("\n", $controlContent);
if($controlPath == $fileName)
{
$endLine = $construct->getEndLine() - 1;
$controlLines[$endLine] = $limitUser . "\n" . $controlLines[$endLine];
}
else
{
$methods = $reflection->getMethods();
$startLine = $methods[0]->getStartLine() - 1;
$controlLines[$startLine] = $limitFunc . "\n" . $controlLines[$startLine];
}
$controlContent = join("\n", $controlLines);
file_put_contents($controlPath, $controlContent);
}
foreach($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method)
{
$methodName = strtolower($method->name);
/* This method is not extend from parent */
if($method->getFileName() != $controlPath) continue;
if($methodName == '__construct') continue;
$params = $method->getParameters();
foreach($params as $param)
{
$paramName = $param->getName();
if($param->isDefaultValueAvailable()) $defaultValue .= "\$paramDefaultValue['$className']['$methodName']['$paramName'] = '" . $param->getDefaultValue() . "';\n";
}
}
}
/* Set ext control default value.*/
$extControlPath = $module . '/ext/control/';
if(is_dir($extControlPath))
{
echo "Seting value for extension of $className\n";
chdir($extControlPath);
$extControls = glob($extControlPath . '*');
if(empty($extControls)) continue;
foreach($extControls as $extControl)
{
$methodName = strtolower(substr(basename($extControl), 0, strrpos(basename($extControl), '.')));
$extFile = file_get_contents($extControl);
$extLines = explode("\n", $extFile);
foreach($extLines as $line)
{
$line = trim($line);
if(preg_match("/^class +($className) +extends +/i", $line, $class) == 1) $extClassName = strtolower($class[1]);
if(preg_match("/^class +(my$className) +extends +/i", $line, $class) == 1) $extClassName = strtolower($class[1]);
if(preg_match("/^(public)?\s+function\s+$methodName/i", $line) == 1)
{
$params = strstr($line, '(');
if(preg_match('/^(.+)$/', $params) == 0) continue;
$params = trim(str_replace(array('(', ')'), '', $params));
$params = preg_replace('/, *\$/', ',\$', $params);
$params = explode(',$', trim($params, '$'));
foreach($params as $param)
{
if(strpos($param, '=') === false) continue;
$pair = explode('=', $param);
$paramName = trim($pair[0]);
$paramValue = trim(end($pair));
$defaultValue .= "\$paramDefaultValue['$extClassName']['$methodName']['$paramName'] = $paramValue;\n";
}
}
}
}
}
}
if($defaultValue)
{
echo "Writing default value to file\n";
$valueFile = "<?php\n";
$valueFile .= $defaultValue;
$tmp = $filePath . '/tmp/';
$defaultDir = $tmp . 'defaultvalue/';
if(!is_dir($tmp))
{
mkdir($tmp);
chmod($tmp, 0777);
}
if(!is_dir($defaultDir))
{
mkdir($defaultDir);
chmod($defaultDir, 0777);
}
file_put_contents($defaultDir . basename($filePath) . '.php', $valueFile);
}
$file = "/tmp/$dirName";
/* encrypt file*/
echo "Encrypting extension\n";
if(!is_dir('/tmp/encrypt'))mkdir("/tmp/encrypt");
$withLicense = '';
$order->account = $company;
$order->users = $users;
$order->ip = $ip;
$order->mac = $mac;
$order->type = $type;
$passphrase = empty($order->account) ? 'try' : $order->account;
createLicense($order, $dirName, '/tmp/encrypt/');
$withLicense = "--with-license config/license/" . basename($file) . $order->account . ".txt --passphrase $passphrase";
exec("/usr/local/ioncube/ioncube_encoder5 --copy config.php --copy phpexcel/ --copy tmp/ --copy hook/ --copy framework/ --copy config/ --copy view/ --copy lang/ $withLicense $file --update-target --into /tmp/encrypt/", $outError);
foreach($outError as $error)
{
$errorFile = substr($error, 0 , strpos($error, ':'));
$relativeFile = substr($errorFile, strrpos($errorFile, '/' . basename($file) . '/') + 1) . "\n";
echo "Copying $errorFile\n";
`cp $errorFile /tmp/encrypt/$relativeFile`;
}
echo "Ziping extension\n";
if(file_exists("/tmp/encrypt/$dirName$company.zip")) `rm /tmp/encrypt/$dirName$company.zip`;
`cd /tmp/encrypt/; zip -rm -9 $dirName$company.zip $dirName`;
echo "Finished\n";
function createLicense($order, $saveName, $encryptPath)
{
echo "Creating license.\n";
$property = $order->users == 0 ? '' : "--property user=$order->users";
$expire = empty($order->account) ? '--expire-in 180d' : '';
if(!is_dir($encryptPath . $saveName))mkdir($encryptPath . $saveName);
if(!is_dir($encryptPath . $saveName . "/config"))mkdir($encryptPath . $saveName . '/config');
if(!is_dir($encryptPath . $saveName . "/config/license"))mkdir($encryptPath . $saveName . "/config/license");
$server = empty($order->ip) ? '' : $order->ip;
$server = !empty($order->mac) ? empty($server) ? "'{{$order->mac}}'" : "'$server{{$order->mac}}'" : $server;
$server = empty($server) ? '' : '--allowed-server ' . $server;
$expire = $order->type == 'year' ? "--expire-in 365d" : $expire;
$expire = $order->type == 'try' ? "--expire-in 30d" : $expire;
$expire = is_numeric($order->type) ? "--expire-in {$order->type}d" : $expire;
$passphrase = empty($order->account) ? 'try' : $order->account;
$license = $encryptPath . $saveName . '/config/license/' . $saveName . $order->account . '.txt';
echo `/usr/local/ioncube/make_license $property $expire --passphrase $passphrase -o $license`;
}