123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <?php
- // by 请勿倒卖,已申请软著,否则追究法律责任
- include_once "source/system/db.class.php";
- use GatewayWorker\Lib\Gateway;
- use Workerman\Lib\Timer;
- use think\facade\Db;
- class Events
- {
- public static function onWorkerStart($worker)
- {
- $_SESSION["uid"] = $worker->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);
- }
- }
- }
|