|
|
@@ -1,4 +1,5 @@ |
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成模块
|
|
|
|
*
|
|
|
@@ -9,53 +10,49 @@ |
|
|
|
* @link https://www.dedebiz.com
|
|
|
|
*/
|
|
|
|
@set_time_limit(0);
|
|
|
|
require_once(dirname(__FILE__)."/config.php");
|
|
|
|
require_once(dirname(__FILE__)."/../include/dedemodule.class.php");
|
|
|
|
require_once(dirname(__FILE__) . "/config.php");
|
|
|
|
require_once(dirname(__FILE__) . "/../include/dedemodule.class.php");
|
|
|
|
CheckPurview('sys_module');
|
|
|
|
if(empty($action)) $action = '';
|
|
|
|
if (empty($action)) $action = '';
|
|
|
|
|
|
|
|
if($action=='')
|
|
|
|
{
|
|
|
|
if ($action == '') {
|
|
|
|
$modules = array();
|
|
|
|
require_once(dirname(__FILE__)."/templets/module_make.htm");
|
|
|
|
require_once(dirname(__FILE__) . "/templets/module_make.htm");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
/*-------------
|
|
|
|
//生成项目
|
|
|
|
function Makemodule()
|
|
|
|
--------------*/
|
|
|
|
else if($action=='make')
|
|
|
|
{
|
|
|
|
require_once(DEDEINC.'/dedehttpdown.class.php');
|
|
|
|
--------------*/ else if ($action == 'make') {
|
|
|
|
require_once(DEDEINC . '/dedehttpdown.class.php');
|
|
|
|
|
|
|
|
// 校验私钥,确定开发者身份
|
|
|
|
$devURL = DEDECDNURL."/developers/$dev_id.json";
|
|
|
|
$devURL = DEDECDNURL . "/developers/$dev_id.json";
|
|
|
|
$dhd = new DedeHttpDown();
|
|
|
|
$dhd->OpenUrl($devURL);
|
|
|
|
$devContent = $dhd->GetHtml();
|
|
|
|
$devInfo = (array)json_decode($devContent);
|
|
|
|
if (($devInfo['auth_at']+60*60*24*365) < time()) {
|
|
|
|
ShowMsg("您的开发者账号已经过期,请登录www.dedebiz.com重新申请!","-1");
|
|
|
|
if (($devInfo['auth_at'] + 60 * 60 * 24 * 365) < time()) {
|
|
|
|
ShowMsg("您的开发者账号已经过期,请登录www.dedebiz.com重新申请!", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
$filelist = str_replace("\r", "\n", trim($filelist));
|
|
|
|
$filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
|
|
|
|
if($filelist=='')
|
|
|
|
{
|
|
|
|
ShowMsg("对不起,你没有指定模块的文件列表,因此不能创建项目!","-1");
|
|
|
|
if ($filelist == '') {
|
|
|
|
ShowMsg("对不起,你没有指定模块的文件列表,因此不能创建项目!", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
if (empty($dev_id)) {
|
|
|
|
ShowMsg("开发者ID不能为空!","-1");
|
|
|
|
ShowMsg("开发者ID不能为空!", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
if (empty($priv)) {
|
|
|
|
ShowMsg("请填写开发者私钥信息","-1");
|
|
|
|
ShowMsg("请填写开发者私钥信息", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
if (strlen($modulname) > 150) {
|
|
|
|
ShowMsg("模块名称过长","-1");
|
|
|
|
ShowMsg("模块名称过长", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
@@ -65,78 +62,74 @@ else if($action=='make') |
|
|
|
"dev_id" => $devInfo['dev_id'],
|
|
|
|
));
|
|
|
|
// 私钥加密模块信息
|
|
|
|
openssl_private_encrypt($enstr,$encotent,$priv);
|
|
|
|
openssl_private_encrypt($enstr, $encotent, $priv);
|
|
|
|
|
|
|
|
$moduleInfo = base64url_encode($encotent);
|
|
|
|
|
|
|
|
openssl_public_decrypt($encotent,$decontent,$devInfo['pub_key']);
|
|
|
|
|
|
|
|
openssl_public_decrypt($encotent, $decontent, $devInfo['pub_key']);
|
|
|
|
|
|
|
|
$minfo = (array)json_decode($decontent);
|
|
|
|
|
|
|
|
if ($minfo['module_name'] != $modulname || $minfo['dev_id'] != $devInfo['dev_id']) {
|
|
|
|
ShowMsg("开发者私钥校验失败,请确保填写正确的开发者私钥","-1");
|
|
|
|
ShowMsg("开发者私钥校验失败,请确保填写正确的开发者私钥", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
//去除转义
|
|
|
|
foreach($_POST as $k=>$v) $$k = stripslashes($v);
|
|
|
|
foreach ($_POST as $k => $v) $$k = stripslashes($v);
|
|
|
|
|
|
|
|
if(!isset($autosetup)) $autosetup = 0;
|
|
|
|
if(!isset($autodel)) $autodel = 0;
|
|
|
|
$mdir = DEDEDATA.'/module';
|
|
|
|
$hashcode = md5($modulname.$devInfo['dev_id']);
|
|
|
|
$moduleFilename = $mdir.'/'.$hashcode.'.xml';
|
|
|
|
if (!isset($autosetup)) $autosetup = 0;
|
|
|
|
if (!isset($autodel)) $autodel = 0;
|
|
|
|
$mdir = DEDEDATA . '/module';
|
|
|
|
$hashcode = md5($modulname . $devInfo['dev_id']);
|
|
|
|
$moduleFilename = $mdir . '/' . $hashcode . '.xml';
|
|
|
|
$menustring = base64_encode($menustring);
|
|
|
|
$indexurl = str_replace('=', '**', $indexurl);
|
|
|
|
$dm = new DedeModule($mdir);
|
|
|
|
|
|
|
|
if($dm->HasModule($hashcode))
|
|
|
|
{
|
|
|
|
if ($dm->HasModule($hashcode)) {
|
|
|
|
$dm->Clear();
|
|
|
|
ShowMsg("对不起,你指定同名模块已经存在,因此不能创建项目!<br>如果你要更新这个模块,请先删除:module/{$hashcode}.xml","-1");
|
|
|
|
ShowMsg("对不起,你指定同名模块已经存在,因此不能创建项目!<br>如果你要更新这个模块,请先删除:module/{$hashcode}.xml", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
$readmef = $setupf = $uninstallf = '';
|
|
|
|
|
|
|
|
if(empty($readmetxt))
|
|
|
|
{
|
|
|
|
move_uploaded_file($readme, $mdir."/{$hashcode}-r.html") or die("你没填写说明或上传说明文件!");
|
|
|
|
$readmef = $dm->GetEncodeFile($mdir."/{$hashcode}-r.html", TRUE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$readmetxt = "<p style='line-height:150%'>".$readmetxt;
|
|
|
|
if (empty($readmetxt)) {
|
|
|
|
move_uploaded_file($readme, $mdir . "/{$hashcode}-r.html") or die("你没填写说明或上传说明文件!");
|
|
|
|
$readmef = $dm->GetEncodeFile($mdir . "/{$hashcode}-r.html", TRUE);
|
|
|
|
} else {
|
|
|
|
$readmetxt = "<p style='line-height:150%'>" . $readmetxt;
|
|
|
|
$readmetxt = preg_replace("#[\r\n]{1,}#", "<br />\r\n", $readmetxt);
|
|
|
|
$readmetxt .= "</p>";
|
|
|
|
$readmef = base64_encode(trim($readmetxt));
|
|
|
|
}
|
|
|
|
|
|
|
|
if($autosetup==0)
|
|
|
|
{
|
|
|
|
move_uploaded_file($setup,$mdir."/{$hashcode}-s.php") or die("你没上传,或系统无法把setup文件移动到 module 目录!");
|
|
|
|
$setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php",TRUE);
|
|
|
|
|
|
|
|
if ($autosetup == 0) {
|
|
|
|
move_uploaded_file($setup, $mdir . "/{$hashcode}-s.php") or die("你没上传,或系统无法把setup文件移动到 module 目录!");
|
|
|
|
$setupf = $dm->GetEncodeFile($mdir . "/{$hashcode}-s.php", TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if($autodel==0)
|
|
|
|
{
|
|
|
|
move_uploaded_file($uninstall, $mdir."/{$hashcode}-u.php") or die("你没上传,或系统无法把uninstall文件移动到 module 目录!");
|
|
|
|
$uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php", TRUE);
|
|
|
|
if ($autodel == 0) {
|
|
|
|
move_uploaded_file($uninstall, $mdir . "/{$hashcode}-u.php") or die("你没上传,或系统无法把uninstall文件移动到 module 目录!");
|
|
|
|
$uninstallf = $dm->GetEncodeFile($mdir . "/{$hashcode}-u.php", TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(trim($setupsql40)=='') $setupsql40 = '';
|
|
|
|
if (trim($setupsql40) == '') $setupsql40 = '';
|
|
|
|
else $setupsql40 = base64_encode(trim($setupsql40));
|
|
|
|
|
|
|
|
//if(trim($setupsql41)=='') $setupsql41 = '';
|
|
|
|
//else $setupsql41 = base64_encode(trim($setupsql41));
|
|
|
|
|
|
|
|
if(trim($delsql)=='') $delsql = '';
|
|
|
|
if (trim($delsql) == '') $delsql = '';
|
|
|
|
else $delsql = base64_encode(trim($delsql));
|
|
|
|
$pub_key = base64url_encode($devInfo['pub_key']);
|
|
|
|
|
|
|
|
$modulinfo = "<module>
|
|
|
|
<baseinfo>
|
|
|
|
name={$modulname}
|
|
|
|
dev_id={$devInfo['dev_id']}
|
|
|
|
pubkey={$pub_key}
|
|
|
|
info={$moduleInfo}
|
|
|
|
time={$mtime}
|
|
|
|
hash={$hashcode}
|
|
|
@@ -174,19 +167,17 @@ $filelist |
|
|
|
";
|
|
|
|
|
|
|
|
$filelists = explode("\n", $filelist);
|
|
|
|
foreach($filelists as $v)
|
|
|
|
{
|
|
|
|
$v = trim($v);
|
|
|
|
if(!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
|
|
|
|
foreach ($filelists as $v) {
|
|
|
|
$v = trim($v);
|
|
|
|
if (!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
|
|
|
|
}
|
|
|
|
//测试无误后编译安装包
|
|
|
|
$fp = fopen($moduleFilename, 'w');
|
|
|
|
fwrite($fp, $modulinfo);
|
|
|
|
fwrite($fp, "<modulefiles>\r\n");
|
|
|
|
foreach($filelists as $v)
|
|
|
|
{
|
|
|
|
$v = trim($v);
|
|
|
|
if(!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
|
|
|
|
foreach ($filelists as $v) {
|
|
|
|
$v = trim($v);
|
|
|
|
if (!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
|
|
|
|
}
|
|
|
|
fwrite($fp, "</modulefiles>\r\n");
|
|
|
|
fwrite($fp, "</module>\r\n");
|
|
|
@@ -197,37 +188,34 @@ $filelist |
|
|
|
/*-------------
|
|
|
|
//修改项目
|
|
|
|
function editModule()
|
|
|
|
--------------*/
|
|
|
|
else if($action=='edit')
|
|
|
|
{
|
|
|
|
--------------*/ else if ($action == 'edit') {
|
|
|
|
$filelist = str_replace("\r", "\n", trim($filelist));
|
|
|
|
$filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
|
|
|
|
if($filelist=="")
|
|
|
|
{
|
|
|
|
ShowMsg("对不起,你没有指定模块的文件列表,因此不能创建项目!","-1");
|
|
|
|
if ($filelist == "") {
|
|
|
|
ShowMsg("对不起,你没有指定模块的文件列表,因此不能创建项目!", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
if (empty($dev_id)) {
|
|
|
|
ShowMsg("开发者ID不能为空!","-1");
|
|
|
|
ShowMsg("开发者ID不能为空!", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
if (empty($priv)) {
|
|
|
|
ShowMsg("请填写开发者私钥信息","-1");
|
|
|
|
ShowMsg("请填写开发者私钥信息", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// 校验私钥,确定开发者身份
|
|
|
|
$devURL = DEDECDNURL."/developers/$dev_id.json";
|
|
|
|
$devURL = DEDECDNURL . "/developers/$dev_id.json";
|
|
|
|
$dhd = new DedeHttpDown();
|
|
|
|
$dhd->OpenUrl($devURL);
|
|
|
|
$devContent = $dhd->GetHtml();
|
|
|
|
$devInfo = (array)json_decode($devContent);
|
|
|
|
if (($devInfo['auth_at']+60*60*24*365) < time()) {
|
|
|
|
ShowMsg("您的开发者账号已经过期,请登录www.dedebiz.com重新申请!","-1");
|
|
|
|
if (($devInfo['auth_at'] + 60 * 60 * 24 * 365) < time()) {
|
|
|
|
ShowMsg("您的开发者账号已经过期,请登录www.dedebiz.com重新申请!", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
if (strlen($modulname) > 150) {
|
|
|
|
ShowMsg("模块名称过长","-1");
|
|
|
|
ShowMsg("模块名称过长", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
@@ -237,63 +225,62 @@ else if($action=='edit') |
|
|
|
"dev_id" => $devInfo['dev_id'],
|
|
|
|
));
|
|
|
|
// 私钥加密模块信息
|
|
|
|
openssl_private_encrypt($enstr,$encotent,$priv);
|
|
|
|
openssl_private_encrypt($enstr, $encotent, $priv);
|
|
|
|
|
|
|
|
$moduleInfo = base64url_encode($encotent);
|
|
|
|
|
|
|
|
openssl_public_decrypt($encotent,$decontent,$devInfo['pub_key']);
|
|
|
|
|
|
|
|
openssl_public_decrypt($encotent, $decontent, $devInfo['pub_key']);
|
|
|
|
|
|
|
|
$minfo = (array)json_decode($decontent);
|
|
|
|
|
|
|
|
if ($minfo['module_name'] != $modulname || $minfo['dev_id'] != $devInfo['dev_id']) {
|
|
|
|
ShowMsg("开发者私钥校验失败,请确保填写正确的开发者私钥","-1");
|
|
|
|
ShowMsg("开发者私钥校验失败,请确保填写正确的开发者私钥", "-1");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
//已经去除转义
|
|
|
|
foreach($_POST as $k=>$v) $$k = stripslashes($v);
|
|
|
|
if(!isset($autosetup)) $autosetup = 0;
|
|
|
|
if(!isset($autodel)) $autodel = 0;
|
|
|
|
$mdir = DEDEDATA.'/module';
|
|
|
|
foreach ($_POST as $k => $v) $$k = stripslashes($v);
|
|
|
|
if (!isset($autosetup)) $autosetup = 0;
|
|
|
|
if (!isset($autodel)) $autodel = 0;
|
|
|
|
$mdir = DEDEDATA . '/module';
|
|
|
|
$hashcode = $hash;
|
|
|
|
$moduleFilename = $mdir.'/'.$hashcode.'.xml';
|
|
|
|
$moduleFilename = $mdir . '/' . $hashcode . '.xml';
|
|
|
|
$modulname = str_replace('=', '', $modulname);
|
|
|
|
$indexurl = str_replace('=', '**', $indexurl);
|
|
|
|
$menustring = base64_encode($menustring);
|
|
|
|
$dm = new DedeModule($mdir);
|
|
|
|
$readmef = base64_encode($readmetxt);
|
|
|
|
$setupf = $uninstallf = '';
|
|
|
|
|
|
|
|
|
|
|
|
//编译setup文件
|
|
|
|
if(is_uploaded_file($setup))
|
|
|
|
{
|
|
|
|
move_uploaded_file($setup, $mdir."/{$hashcode}-s.php") or die("你没上传,或系统无法把setup文件移动到 module 目录!");
|
|
|
|
$setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php", TRUE);
|
|
|
|
if (is_uploaded_file($setup)) {
|
|
|
|
move_uploaded_file($setup, $mdir . "/{$hashcode}-s.php") or die("你没上传,或系统无法把setup文件移动到 module 目录!");
|
|
|
|
$setupf = $dm->GetEncodeFile($mdir . "/{$hashcode}-s.php", TRUE);
|
|
|
|
} else {
|
|
|
|
if($autosetup==0) $setupf = base64_encode($dm->GetSystemFile($hashcode, 'setup'));
|
|
|
|
if ($autosetup == 0) $setupf = base64_encode($dm->GetSystemFile($hashcode, 'setup'));
|
|
|
|
}
|
|
|
|
|
|
|
|
//编译uninstall文件
|
|
|
|
if(is_uploaded_file($uninstall))
|
|
|
|
{
|
|
|
|
move_uploaded_file($uninstall,$mdir."/{$hashcode}-u.php") or die("你没上传,或系统无法把uninstall文件移动到 module 目录!");
|
|
|
|
$uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php",true);
|
|
|
|
//编译uninstall文件
|
|
|
|
if (is_uploaded_file($uninstall)) {
|
|
|
|
move_uploaded_file($uninstall, $mdir . "/{$hashcode}-u.php") or die("你没上传,或系统无法把uninstall文件移动到 module 目录!");
|
|
|
|
$uninstallf = $dm->GetEncodeFile($mdir . "/{$hashcode}-u.php", true);
|
|
|
|
} else {
|
|
|
|
if($autodel==0) $uninstallf = base64_encode($dm->GetSystemFile($hashcode,'uninstall'));
|
|
|
|
if ($autodel == 0) $uninstallf = base64_encode($dm->GetSystemFile($hashcode, 'uninstall'));
|
|
|
|
}
|
|
|
|
|
|
|
|
if(trim($setupsql40)=='') $setupsql40 = '';
|
|
|
|
if (trim($setupsql40) == '') $setupsql40 = '';
|
|
|
|
else $setupsql40 = base64_encode(htmlspecialchars_decode(trim($setupsql40)));
|
|
|
|
//if(trim($setupsql41)=='') $setupsql41 = '';
|
|
|
|
//else $setupsql41 = base64_encode(trim($setupsql41));
|
|
|
|
|
|
|
|
if(trim($delsql)=='') $delsql = '';
|
|
|
|
if (trim($delsql) == '') $delsql = '';
|
|
|
|
else $delsql = base64_encode(strip_tags(trim($delsql)));
|
|
|
|
|
|
|
|
$modulinfo = "<module>
|
|
|
|
<baseinfo>
|
|
|
|
name={$modulname}
|
|
|
|
dev_id={$devInfo['dev_id']}
|
|
|
|
pubkey={$devInfo['pub_key']}
|
|
|
|
info={$moduleInfo}
|
|
|
|
time={$mtime}
|
|
|
|
hash={$hashcode}
|
|
|
@@ -330,30 +317,27 @@ $filelist |
|
|
|
</systemfile>
|
|
|
|
";
|
|
|
|
|
|
|
|
if($rebuild=='yes')
|
|
|
|
{
|
|
|
|
if ($rebuild == 'yes') {
|
|
|
|
$filelists = explode("\n", $filelist);
|
|
|
|
foreach($filelists as $v)
|
|
|
|
{
|
|
|
|
$v = trim($v);
|
|
|
|
if(!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__),$v);
|
|
|
|
foreach ($filelists as $v) {
|
|
|
|
$v = trim($v);
|
|
|
|
if (!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
|
|
|
|
}
|
|
|
|
//测试无误后编译安装包
|
|
|
|
$fp = fopen($moduleFilename, 'w');
|
|
|
|
fwrite($fp, $modulinfo."\r\n");
|
|
|
|
fwrite($fp, $modulinfo . "\r\n");
|
|
|
|
fwrite($fp, "<modulefiles>\r\n");
|
|
|
|
foreach($filelists as $v)
|
|
|
|
{
|
|
|
|
foreach ($filelists as $v) {
|
|
|
|
$v = trim($v);
|
|
|
|
if(!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__),$v,$fp);
|
|
|
|
if (!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
|
|
|
|
}
|
|
|
|
fwrite($fp,"</modulefiles>\r\n");
|
|
|
|
fwrite($fp,"</module>\r\n");
|
|
|
|
fwrite($fp, "</modulefiles>\r\n");
|
|
|
|
fwrite($fp, "</module>\r\n");
|
|
|
|
fclose($fp);
|
|
|
|
} else {
|
|
|
|
$fxml = $dm->GetFileXml($hashcode);
|
|
|
|
$fp = fopen($moduleFilename, 'w');
|
|
|
|
fwrite($fp, $modulinfo."\r\n");
|
|
|
|
fwrite($fp, $modulinfo . "\r\n");
|
|
|
|
fwrite($fp, $fxml);
|
|
|
|
fclose($fp);
|
|
|
|
}
|
|
|
|