add deploy button
// ==UserScript==
// @name duerox hacking
// @namespace http://tampermonkey.net/
// @version 0.1.1
// @description add deploy button
// @author nathan
// @match https://duerox.dustess.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=dustess.com
// @grant none
// ==/UserScript==
(function () {
'use strict';
function getElementsByXPath(xpath, parent) {
let results = [];
let query = document.evaluate(xpath, parent || document,
null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (let i = 0, length = query.snapshotLength; i < length; ++i) {
results.push(query.snapshotItem(i));
}
return results;
}
var fun = function () {
// 获取服务名
var apps = getElementsByXPath('//div[contains(@class, "appItemWrapper")]/div[contains(@class, "app_content")]/div[contains(@class, "app_content_name")]', document);
var env = ""
var env1 = getElementsByXPath('//span[contains(text(), "部署环境")]', document)[0].parentElement.children[1].innerText;
if (env1.startsWith("test")) {
env = env1 + ":test"
} else {
return
}
var urlParams = new URLSearchParams(window.location.search);
var project_id = urlParams.get('projectId');
console.log(`found ${apps.length} apps. env: ${env}, project_id: ${project_id}`);
for (let i = 0; i < apps.length; i++) {
let app = getElementsByXPath('//div[contains(@class, "appItemWrapper")]/div[contains(@class, "app_content")]/div[contains(@class, "app_content_name")]', document)[i];
let appname = app.innerText;
let fuck = document.createElement("button");
app.appendChild(fuck);
fuck.innerText = "ff";
fuck.onclick = function () {
const req = new XMLHttpRequest();
req.open("POST", "https://duerox.dustess.com/duerox-workbench-api/deploy/app");
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
req.setRequestHeader("Authorization", localStorage.getItem("duerox_token"));
req.send(JSON.stringify({ "app_name": appname, "env": env, "project_id": project_id, "force_check": false }));
alert("ok");
getElementsByXPath('//div[contains(@class, "appItemWrapper")]/div[contains(@class, "app_top")]/button')[i].click();
};
}
};
var interval_fun = setInterval(function () {
var env1 = getElementsByXPath('//span[contains(text(), "部署环境")]', document)[0].parentElement.children[1].innerText;
if (env1.startsWith("test") && getElementsByXPath('//div[contains(@class, "appItemWrapper")]/div[contains(@class, "app_content")]/div[contains(@class, "app_content_name")]', document).length > 0) {
fun();
clearInterval(interval_fun);
}
}, 1000)
})();