id; self::clearLog(); self::out("启动成功"); $_SESSION["times"] = 0; Timer::add(1, function () { $_var_0 = Db::name("signlog")->where("in_status", "1")->find(); if ($_var_0) { $_var_1 = Db::name("signlog")->where("in_id", $_var_0["in_id"])->update(["in_status" => 2]); if ($_var_1) { Db::name("sign")->where("in_aid", $_var_0["in_aid"])->update(["in_status" => 2]); self::zsign($_var_0); $_SESSION["times"]++; self::out("空闲 已执行任务 " . $_SESSION["times"] . " \n"); } } }); } static function zsign($sign) { $_var_2 = "[" . $sign["in_id"] . "]" . $sign["in_aname"]; self::out($_var_2 . " 加入队列 "); $_var_3 = Db::name("cert")->where("in_name", $sign["in_cert"])->find(); $_var_4 = trim(IN_CERT_PATH . $_var_3["in_dir"] . ".zip"); $_var_5 = IN_TMP_PATH . $_var_3["in_dir"]; if (!$_var_3 || !is_file($_var_4)) { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => -2]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => -2]); self::out($_var_2 . " 签名失败 证书文件不存在"); return null; } $_var_6 = new PclZip($_var_4); $_var_6->extract(PCLZIP_OPT_PATH, $_var_5); $_var_7 = $_var_5 . "/" . $_var_3["in_dir"] . ".mobileprovision"; $_var_8 = $_var_5 . "/" . $_var_3["in_dir"] . ".p12"; if (!is_file($_var_7) || !is_file($_var_8)) { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => -2]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => -2]); self::out($_var_2 . " 签名失败 证书文件不存在"); return null; } self::out($_var_2 . " 开始解析"); $_var_9 = IN_ATTACHMENT_PATH . $sign["in_ipa"]; if (!is_file($_var_9)) { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => -1]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => -1]); self::out($_var_2 . " 解析失败 IPA包不存在"); return null; } $_var_10 = self::unzip($_var_9); $_var_11 = $_var_3["p12_pwd"]; $_var_12 = str_replace("/data/attachment/", "/data/tmp/", $_var_9); $_var_13 = "export LANG=\"zh_CN.UTF-8\";export LC_ALL=\"zh_CN.UTF-8\";"; $_var_14 = $_var_13 . " " . IN_STATIC_PATH . "sign_tools/zsign/zsign -k " . $_var_8 . " -p " . $_var_11 . " -m " . $_var_7 . " -o " . $_var_12 . " -z 9 " . $_var_10; Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => 3]); Db::name("sign")->where("in_id", $sign["in_aid"])->update(["in_status" => 3]); self::out($_var_2 . " 解析完成 => 开始签名 "); exec($_var_14, $_var_15); $_var_15 = json_encode($_var_15); if (strstr($_var_15, "Signed OK!")) { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => 4]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => 4]); self::out($_var_2 . " 签名完成 => 开始打包 "); if (strstr($_var_15, "Archive OK!")) { $_var_16 = db("appid")->where("in_id", $sign["in_aid"])->find(); if (IN_REMOTE && (IN_MANDATORY_REMOTE || $_var_16["remote"])) { $_var_17 = IN_REMOTE == 1 ? new Qiniuoss() : new Aliyunoss(); $_var_18 = $_var_17->upload($_var_16["in_app"], $_var_12); if ($_var_18) { $_var_18 = $_var_17->refresh([$_var_18["domain_src"]]); } } else { @rename($_var_12, $_var_9); } Db::name("signlog")->where(array("in_id" => $sign["in_id"]))->update(array("in_status" => 5, "in_addtime" => date("Y-m-d H:i:s"))); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => 5, "in_time" => time()]); self::out("[" . $sign["in_id"] . "]" . $sign["in_aname"] . " 打包完成 "); Db::name("appid")->where(array("in_id" => $sign["in_aid"]))->dec("in_resign")->update(array("in_type" => 1, "in_team" => $sign["in_cert"], "in_updatetime" => time())); self::out("[" . $sign["in_id"] . "]" . $sign["in_aname"] . " 扣费完成 "); $_var_19 = $_var_16 = db("app")->where("in_appid", $sign["in_aid"])->order("in_id desc")->value("in_id"); Db::name("app")->where(array("in_id" => $_var_19))->update(array("in_type" => 1, "in_team" => $sign["in_cert"], "in_desc" => "在线企业签名", "in_addtime" => time())); self::out("[" . $sign["in_id"] . "]" . $sign["in_aname"] . " 更新版本记录完成 "); } elseif (strstr($_var_15, "Archive Failed!")) { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => -3]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => -3]); self::out($_var_2 . " 打包失败 "); } } elseif (strstr($_var_15, "Signed Failed!")) { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => -2]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => -2]); self::out($_var_2 . " 签名失败 "); } else { Db::name("signlog")->where("in_id", $sign["in_id"])->update(["in_status" => -2]); Db::name("sign")->where("in_aid", $sign["in_aid"])->update(["in_status" => -2]); self::out($_var_2 . " 签名失败 IPA包有错误"); } self::out($_var_2 . " 签名任务结束 \n"); } static function unzip($_var_20) { $_var_21 = str_replace("/attachment/", "/ipadir/", $_var_20); if (is_empty_dir($_var_21)) { creatdir($_var_21); $_var_22 = "export LANG=\"zh_CN.UTF-8\";export LC_ALL=\"zh_CN.UTF-8\";"; exec($_var_22 . " unzip -O CP936 -d " . $_var_21 . " " . $_var_20, $_var_23); } chmod($_var_21, 0755); if (is_dir($_var_21 . "/__MACOSX/")) { destroyDir($_var_21 . "/__MACOSX/"); } if (file_exists($_var_21 . "/Entitlements.plist")) { @unlink($_var_21 . "/Entitlements.plist"); } $_var_24 = scandir($_var_21 . "/Payload/"); foreach ($_var_24 as $_var_25) { if ($_var_25 != "." && $_var_25 != ".." && is_dir($_var_21 . "/Payload/" . $_var_25)) { clearbom($_var_21 . "/Payload/" . $_var_25 . "/Info.plist"); } } return is_empty_dir($_var_21) ? $_var_20 : $_var_21; } public static function onMessage($_var_26, $_var_27) { $_SESSION["uid"] = $_var_26; self::out($_var_26 . " onMessage " . $_SERVER["REMOTE_ADDR"]); $_var_28 = json_decode($_var_27, true); if (!$_var_28) { return; } $_var_29 = $_var_28["uid"] ?? $_SESSION["uid"] ?? ""; $_var_30 = $_var_28["group"] ?? ""; $_var_31 = $_var_28["type"] ?? ""; $_var_32 = $_var_28["param"] ?? []; $_var_33 = md5("sign_mac"); switch ($_var_31) { case "pong": return; case "oauth": if (isset($_var_32["site"])) { $_var_34 = Db::name("secret")->where("in_site", $_var_32["site"])->count(); if ($_var_34) { $_SESSION["uid"] = $_var_29; Gateway::bindUid($_var_26, $_var_29); $_var_35["msg"] = "login success ! welcome " . $_var_29 . " !"; if ($_var_30) { Gateway::joinGroup($_var_26, $_var_30); $_var_35["msg"] = "login success ! welcome " . $_var_30 . " " . $_var_29 . " !"; } $_var_35 = array_merge($_var_35, action("test/index/cert", $_var_32)); $_var_35["type"] = "cert"; self::sendToCurrentClient($_var_35); } else { self::sendToCurrentClient(["msg" => $_var_29 . " - 未授权"]); } } else { self::sendToCurrentClient(["msg" => $_var_29 . " - 未授权"]); } return; case "sign": if ($_var_29) { if (Gateway::isUidOnline($_var_33)) { $_var_32["datetime"] = date("Y-m-d H:i:s"); self::sendToUid(["type" => "sign", "param" => $_var_32], $_var_33); } else { self::sendToCurrentClient(["msg" => "签名设备无响应"]); } } else { self::sendToCurrentClient(["msg" => $_var_29 . " - 未授权"]); } return; case $_var_33: if ($_var_29 == $_var_33) { $_SESSION["uid"] = $_var_29; Gateway::bindUid($_var_26, $_var_29); $_var_35["msg"] = "login success ! welcome " . $_var_29 . " !"; self::sendToCurrentClient($_var_35); } else { self::sendToCurrentClient(["msg" => $_var_29 . " - 未授权"]); } return; default: self::sendToCurrentClient(["msg" => "type : " . $_var_31 . " is undefined"]); self::sendToAll(["msg" => "sendToAll"]); } } public static function onClose($_var_36) { self::out("onClose"); if (isset($_SESSION["uid"])) { Gateway::sendToAll(json_encode(["client_id" => $_var_36, "type" => "offline", "uid" => $_SESSION["uid"]])); } } public static function sendToUid($ret = [], $uid = '') { $ret["time"] = time(); return Gateway::sendToUid($uid, json_encode($ret)); } public static function sendToGroup($_var_37 = [], $_var_38 = '') { $_var_37["time"] = time(); return Gateway::sendToGroup($_var_38, json_encode($_var_37)); } public static function sendToAll($_var_39 = [], $_var_40 = '', $_var_41 = '') { $_var_39["time"] = time(); return Gateway::sendToAll(json_encode($_var_39)); } public static function sendToCurrentClient($_var_42 = []) { $_var_42["time"] = time(); return Gateway::sendToCurrentClient(json_encode($_var_42)); } static function out(string $msg = '', bool $worker = true) { $_var_43 = date("H:i:s"); $_var_44 = $_SESSION["uid"]; $_var_45 = debug_backtrace()[0]["line"]; echo $msg = "进程" . $_var_44 . " [" . $_var_43 . "] (" . $_var_45 . ") >> " . $msg . " \n"; self::log($msg); } static function log($_var_46) { $_var_47 = date("Y-m-d H"); $_var_48 = $_SESSION["uid"]; @file_put_contents("runtime/worker/[" . $_var_48 . "][" . $_var_47 . "].log", $_var_46, FILE_APPEND); } static function clearLog() { $_var_49 = date("Y-m-d H"); $_var_50 = $_SESSION["uid"]; @file_put_contents("runtime/worker/[" . $_var_50 . "][" . $_var_49 . "].log", ""); } } function clearbom($f) { if (is_file($f)) { $_var_51 = file_get_contents($f); if (strstr($_var_51, "\xef\xbb\xbf")) { $_var_51 = trim($_var_51, "\xef\xbb\xbf"); file_put_contents($f, $_var_51); } } }