";
public function initialize()
{
parent::initialize();
$this->Administrator(3);
if (in_array($this->action, ["index", "edit"])) {
$this->header();
}
}
public function __destruct()
{
if (in_array($this->action, ["index", "edit"])) {
$this->footer();
}
}
function index($map = [])
{
$this->search = SafeRequest("search", "get");
$this->search && ($map[] = ["iss|tid|kid|username", "like", "%" . $this->search . "%"]);
$this->type = SafeRequest("type", "get");
is_numeric($this->type) && ($map[] = ["type", "=", $this->type]);
$this->uid = SafeRequest("uid", "get");
is_numeric($this->uid) && ($map[] = ["user_id", $this->uid ? "<>" : "=", 0]);
$this->mapTime("create_time", true, $map);
$_var_0 = SafeRequest("iss", "get");
$_var_0 && ($map[] = ["iss", "=", $_var_0]);
$_var_1 = SafeRequest("page", "get");
$_var_2 = db("super_cert")->where($map)->order("id desc")->paginate(["page" => $_var_1]);
$_var_3 = db("super_cert")->where($map)->sum("total_count");
$_var_4 = db("super_cert")->where("limit_count", ">", 0)->where($map)->sum("limit_count");
$_var_5 = $_var_2->items();
$_var_6 = getRender($_var_2, $_var_1);
$_var_7 = $_var_2->total();
?>
searchForm("", "", function () {
?>
获取P8证书
where("id", $_var_11)->find();
?>
where("iss", $_var_17)->count())) {
reJSON("该证书已存在");
}
if ($_var_18) {
if (!$_var_21) {
reJSON("fastlane模式,开发者账号必须填");
}
if (!$_var_22) {
reJSON("fastlane模式,开发者密码必须填");
}
if (!$_var_23) {
reJSON("fastlane模式,双重验证手机必须填");
}
if (!$_var_24) {
reJSON("fastlane模式,专用密码必须填");
}
} else {
if (!$_var_19) {
reJSON("p8模式,kid必须填");
}
$_var_26 = IN_CERT_PATH . getCert($_var_17, $_var_19);
if (!empty($_FILES["p8"]) && $_FILES["p8"]["size"]) {
$_var_27 = $_FILES["p8"];
$_var_28 = $_var_27["name"];
$_var_29 = pathinfo($_var_28);
$_var_30 = strtolower($_var_29["extension"]);
if ($_var_30 != "p8") {
reJSON("p8文件错误,请上传正确的格式的p8文件");
}
$_var_31 = IN_CERT_PATH . bees_encrypt($_var_17) . "/";
if (!is_dir($_var_31)) {
@mkdir($_var_31, 0777, true);
}
@move_uploaded_file($_FILES["p8"]["tmp_name"], $_var_26);
}
if (!is_file($_var_26)) {
reJSON("p8文件错误,请上传正确的格式的p8文件");
}
}
$_var_32 = ["iss" => $_var_17, "kid" => $_var_19, "p8_file" => getCert($_var_17, $_var_19), "p12_file" => getCert($_var_17, $_var_19, "p12"), "mark" => $_var_20, "type" => $_var_18, "username" => $_var_21, "password" => $_var_22, "mobile" => $_var_23, "sp_password" => $_var_24];
if ($_var_16) {
$_var_33 = db("super_cert")->where("id", $_var_16)->update($_var_32);
} else {
$_var_32 = array_merge($_var_32, ["user_id" => 0, "team_id" => "", "tid" => "", "p12_pwd" => "123456", "limit_count" => 100, "total_count" => 0, "create_time" => time(), "status" => 1]);
$_var_34 = db("super_cert")->insertGetId($_var_32);
if ($_var_34) {
$_var_32["id"] = $_var_34;
$this->apicert($_var_32);
}
}
reJSON("提交成功", 200);
}
function update()
{
$_var_35 = SafeRequest("id") ?: $_var_35;
$_var_36 = db("super_cert")->where("id", $_var_35)->find();
if (!$_var_36) {
reJSON("证书不存在!");
}
$this->apicert($_var_36);
reJSON("更新成功", 200);
}
function apicert($_var_37)
{
$_var_38 = $_var_37["id"];
$_var_39 = $_var_37["status"];
if ($_var_37["type"]) {
if (empty($_var_37["username"]) || empty($_var_37["password"]) || empty($_var_37["mobile"])) {
reJSON($_var_37["id"] . "号证书信息遗漏,请联系管理员完善");
}
$_var_40 = "export LANG=\"en_US.UTF-8\";export LC_ALL=\"en_US.UTF-8\";export PATH=\"/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/rvm/gems/ruby-2.6.5/bin:/usr/local/rvm/gems/ruby-2.6.5@global/bin:/usr/local/rvm/rubies/ruby-2.6.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin:/root/bin\";export GEM_HOME=\"/usr/local/rvm/gems/ruby-2.6.5\";export GEM_PATH=\"/usr/local/rvm/gems/ruby-2.6.5:/usr/local/rvm/gems/ruby-2.6.5@global\";export FASTLANE_USER=\"" . $_var_37["username"] . "\";export FASTLANE_PASSWORD=\"" . $_var_37["password"] . "\";export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=\"" . $_var_37["sp_password"] . "\";export SPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER=\"+86 " . $_var_37["mobile"] . "\";export FASTLANE_SESSION='" . $_var_37["fastlane_session"] . "';cd " . IN_ROOT . "static/sign_tools/fastlane/;ruby saveCert.rb " . $_var_37["iss"] . " 1";
exec($_var_40, $_var_41, $_var_42);
creatdir(IN_TMP_PATH . "saveCert/");
file_put_contents(IN_TMP_PATH . "saveCert/" . $_var_37["username"] . time() . ".txt", $_var_40);
if (!empty($_var_41[0])) {
$_var_43 = json_decode($_var_41[0], true);
if (empty($_var_43) || !isset($_var_43["status"])) {
reJSON("处理失败,未能正常获取响应内容");
}
if ($_var_43["status"] == 0) {
reJSON("任务失败,消息提示:" . $_var_43["msg"]);
}
reJSON("处理成功");
}
reJSON("处理失败,提示:" . print_R($_var_41, true));
}
@certMoveToNew($_var_37);
$_var_44 = $_var_37["iss"];
$_var_45 = $_var_37["kid"];
$_var_46 = ["iss" => $_var_44, "kid" => $_var_45, "secret" => IN_CERT_PATH . getCert($_var_44, $_var_45)];
$_var_47 = new Client($_var_46);
$_var_47->setHeaders(["Authorization" => "Bearer " . $_var_47->getToken()]);
$_var_48 = $_var_47->api("certificates")->all(["filter[certificateType]" => "IOS_DISTRIBUTION"]);
if (isset($_var_48["errors"][0]["status"])) {
if (($_var_39 == 401 || $_var_39 == -1) && $_var_48["errors"][0]["status"] == 401) {
$_var_42 = -1;
} else {
$_var_42 = $_var_48["errors"][0]["status"];
}
$_var_49 = db("super_cert")->where("id", $_var_38)->update(["status" => $_var_42]);
reJSON($_var_48["errors"][0]["title"], 200);
}
if (count($_var_48["data"]) < 2) {
$_var_50 = $_var_47->api("certificates")->reg();
if ($_var_50["data"]) {
$_var_48["data"][] = $_var_50["data"];
}
}
$_var_51 = 0;
$_var_52 = "";
foreach (array_reverse($_var_48["data"]) as $_var_53 => $_var_37) {
$_var_54 = IN_CERT_PATH . getCert($_var_44, $_var_45, "cer");
file_put_contents($_var_54, base64_decode($_var_37["attributes"]["certificateContent"]));
$_var_55 = 123456;
$_var_56 = IN_CERT_PATH . "public/ios.key";
exec("openssl x509 -in " . $_var_54 . " -inform DER -outform PEM -out " . IN_CERT_PATH . getCert($_var_44, $_var_45, "pem") . " 2>&1", $_var_41, $_var_57);
file_put_contents(IN_TMP_PATH . "supercert_add_openssl.log", $_var_41);
exec("openssl pkcs12 -export -inkey " . $_var_56 . " -in " . IN_CERT_PATH . getCert($_var_44, $_var_45, "pem") . " -out " . IN_CERT_PATH . getCert($_var_44, $_var_45, "p12") . " -passout pass:" . $_var_55, $_var_41, $_var_57);
file_put_contents(IN_TMP_PATH . "supercert_add_openssl2.log", $_var_41);
if (file_get_contents(IN_CERT_PATH . getCert($_var_44, $_var_45, "p12"))) {
$_var_51 = $_var_37["id"];
$_var_52 = $_var_37["attributes"]["expirationDate"];
break 1;
} else {
$_var_47->api("certificates")->del($_var_37["id"]);
}
}
if (!$_var_51) {
reJSON("没有可使用的证书文件");
}
$_var_58 = $_var_47->api("device")->all(["limit" => 200]);
if (isset($_var_58["data"])) {
foreach ($_var_58["data"] as $_var_53 => $_var_59) {
if (!db("ios_device")->where("udid", $_var_59["attributes"]["udid"])->where("cert_iss", $_var_44)->count()) {
db("ios_device")->insert(["app_id" => 0, "udid" => $_var_59["attributes"]["udid"], "cert_iss" => $_var_44]);
}
}
if ($_var_39 != 0) {
$_var_60["status"] = 1;
}
$_var_60["tid"] = $_var_51;
$_var_60["total_count"] = $_var_58["meta"]["paging"]["total"];
$_var_60["limit_count"] = 100 - $_var_60["total_count"];
$_var_60["expirationDate"] = $_var_52 ? strtotime($_var_52) : time();
$_var_49 = db("super_cert")->where("id", $_var_38)->update($_var_60);
}
}
function del()
{
$_var_61 = intval(SafeRequest("id"));
$_var_62 = db("super_cert")->where("id", $_var_61)->find();
$_var_63 = db("super_cert")->where("id", $_var_61)->delete();
if ($_var_63) {
@certMoveToNew($_var_62);
@destroyDir(IN_CERT_PATH . bees_encrypt($_var_62["iss"]));
db("ios_device")->where("cert_iss", $_var_62["iss"])->delete();
}
reJSON("删除成功", 200);
}
function change_status()
{
$_var_64 = intval(SafeRequest("id"));
$_var_65 = intval(SafeRequest("status"));
db("super_cert")->where("id", $_var_64)->update(["status" => $_var_65]);
if ($_var_65) {
$this->update($_var_64);
}
reJSON("修改成功", 200);
}
function checkLogin()
{
$_var_66 = intval(SafeRequest("id"));
$_var_67 = db("super_cert")->where("id", $_var_66)->find();
if (!$_var_67) {
reJSON("证书不存在!");
}
if (empty($_var_67["username"]) || empty($_var_67["password"]) || empty($_var_67["mobile"])) {
reJSON($_var_67["id"] . "号证书信息遗漏,请联系管理员完善");
}
$_var_68 = "export LANG=\"en_US.UTF-8\";export LC_ALL=\"en_US.UTF-8\";export PATH=\"/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/rvm/gems/ruby-2.6.5/bin:/usr/local/rvm/gems/ruby-2.6.5@global/bin:/usr/local/rvm/rubies/ruby-2.6.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin:/root/bin\";export GEM_HOME=\"/usr/local/rvm/gems/ruby-2.6.5\";export GEM_PATH=\"/usr/local/rvm/gems/ruby-2.6.5:/usr/local/rvm/gems/ruby-2.6.5@global\";export FASTLANE_USER=\"" . $_var_67["username"] . "\";export FASTLANE_PASSWORD=\"" . $_var_67["password"] . "\";export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=\"" . $_var_67["sp_password"] . "\";export SPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER=\"+86 " . $_var_67["mobile"] . "\";export FASTLANE_SESSION='" . $_var_67["fastlane_session"] . "';cd " . IN_ROOT . "static/sign_tools/fastlane/;";
exec($_var_68 . "ruby checkLogin.rb", $_var_69, $_var_70);
creatdir(IN_TMP_PATH . "checkLogin/");
file_put_contents(IN_TMP_PATH . "checkLogin/" . $_var_67["username"] . time() . ".log", $_var_68 . "fastlane spaceauth;ruby checkLogin.rb");
if (!empty($_var_69[0])) {
$_var_71 = json_decode($_var_69[0], true);
if (empty($_var_71) || !isset($_var_71["status"])) {
reJSON("登录失败,未能正常获取响应内容");
}
if ($_var_71["status"] == 0) {
reJSON("登录失败,消息提示:" . $_var_71["msg"]);
}
$_var_71["session"] = base64_decode($_var_71["session"]);
if (empty($_var_71["session"])) {
reJSON("未能获取session");
}
if (strpos($_var_71["session"], "---\\n- !ruby/object:") === false) {
reJSON("session格式校验失败");
}
db("super_cert")->where("id", $_var_66)->update(["fastlane_session" => $_var_71["session"]]);
reJSON("登录正常,session更新成功");
}
reJSON("登录失败,提示:" . print_r($_var_69, true));
}
}