Update project directory structure and usage instructions

This commit is contained in:
zpj80231
2025-07-21 09:41:39 +08:00
parent 802e5c6227
commit 9ba58c756e
4 changed files with 144 additions and 2 deletions
+142
View File
@@ -0,0 +1,142 @@
// ==UserScript==
// @name MyJBLS
// @namespace https://jbls.ide-soft.com
// @version 2024-04-17
// @description tampermonkey magic script for jetbrains, generate activation code for jetbrains plugin,use tampermonkey https://chromewebstore.google.com/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/dhdgffkkebhmkfjojejmpbldmpobfkfo to install this script
// @author anonymous
// @match https://plugins.jetbrains.com/
// @match https://plugins.jetbrains.com/*
// @grant GM_setClipboard
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant window.onurlchange
// @run-at document-end
// @license MIT
// ==/UserScript==
(function () {
const maxAttempts = 50;
const retryInterval = 100;
const backendBaseUrl = "https://jbls.ide-soft.com";
const codes = ["YTD", "QDGO", "MF", "DG", "PS", "QA", "IIE", "YTWE", "FLS", "DLE", "RFU", "PPS", "PCWMP", "II", "TCC", "RSU", "PCC", "RC", "PCE", "FLIJ", "TBA", "DL", "SPP", "QDCLD", "SPA", "DMCLP", "PSW", "GW", "PSI", "IIU", "DMU", "PWS", "HB", "WS", "PCP", "KT", "DCCLT", "RSCLT", "WRS", "RSC", "RRD", "TC", "IIC", "QDPY", "DPK", "DC", "PDB", "DPPS", "QDPHP", "GO", "HCC", "RDCPPP", "QDJVMC", "CL", "DM", "CWML", "FLL", "RR", "QDJS", "RS", "RM", "DS", "MPS", "DPN", "US", "CLN", "DPCLT", "RSV", "MPSIIP", "DB", "QDANDC", "AC", "QDJVM", "PRB", "RD", "CWMR", "SP", "RS0", "DP", "RSF", "PGO", "QDPYC", "PPC", "PC", "EHS", "RSCHB", "FL", "QDNET", "JCD"];
async function findElementWithRetry(cssSelector, timeout = 5000) {
const maxAttempts = timeout / retryInterval;
for (let attempts = 0; attempts < maxAttempts; attempts++) {
const element = document.querySelector(cssSelector);
if (element) {
return element;
}
await new Promise((resolve) => setTimeout(resolve, retryInterval));
}
throw new Error(
`Element with selector '${cssSelector}' not found after ${maxAttempts} attempts.`
);
}
async function addButton() {
("use strict");
GM_addStyle(`
.jetbra-button {
margin: 10px 0 0 10px;
}
`);
const url = window.location.href;
if (!url.startsWith("https://plugins.jetbrains.com/plugin/")) {
return;
}
const pluginId = url.split("/")[4].split("-")[0];
const pluginDetail = await fetch(
`https://plugins.jetbrains.com/api/plugins/${pluginId}`
).then((r) => r.json());
const parentElement = await findElementWithRetry(
".plugin-header__controls-panel > div:first-child"
);
if (
parentElement.querySelector(".refill-button") ||
!pluginDetail.purchaseInfo
) {
return;
}
const originalButton = await findElementWithRetry(
'.plugin-header__controls-panel button[data-test="button"]'
);
const buttonClasses = originalButton.className;
if(document.getElementsByClassName("jetbra-button").length>0){
return;
}
const newButton = document.createElement("button");
newButton.setAttribute("type", "button");
newButton.className = `${buttonClasses} jetbra-button`;
newButton.textContent = "Generate Code";
originalButton.parentNode.insertBefore(
newButton,
originalButton.nextSibling
);
newButton.addEventListener("click", async () => {
let ls = window.localStorage;
let licenseeName = ls.getItem("licenseeName");
if (!licenseeName) {
licenseeName =
window.prompt("Please enter the licensee name:") || "SuperMan";
ls.setItem("licenseeName", licenseeName);
}
if (!pluginDetail.purchaseInfo) {
window.alert("This plugin is not a paid plugin in the market");
return;
}
codes.push(pluginDetail.purchaseInfo.productCode);
const currentDate = new Date();
currentDate.setFullYear(currentDate.getFullYear() + 1);
const paidUpTo = currentDate.toISOString().slice(0, 10);
const data = {
licenseeName,
codes,
paidUpTo
};
try {
GM_xmlhttpRequest({
method: "POST",
url: backendBaseUrl + "/api/generateLicense",
headers: {
"Content-Type": "application/json",
},
data: JSON.stringify(data),
onload: function (response) {
const data = JSON.parse(response.responseText);
if (data.error || !data.license) {
console.log(response.responseText);
window.alert(`${data.error} will jump to the oauth page,then go back try again.`);
setTimeout(() => {
window.open(backendBaseUrl + "/oauth2/authorize", "_blank");
}, 1000);
return;
}
let license = data.license;
GM_setClipboard(license, "text");
window.alert("The activation code has been copied to your clipboard");
},
});
} catch (error) {
console.error("Error generating license:", error);
window.alert("An error occurred while generating the license.");
}
});
}
window.onload = function() {
addButton();
};
if (!window.onurlchange) {
window.addEventListener("urlchange", () => {
addButton();
});
}
})();
+1
View File
@@ -0,0 +1 @@
0BPHFG2RS6-eyJsaWNlbnNlSWQiOiIwQlBIRkcyUlM2IiwibGljZW5zZWVOYW1lIjoiVGVzdCBvbmx5IiwibGljZW5zZWVUeXBlIjoiUEVSU09OQUwiLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJJSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjUtMDQtMjIiLCJwYWlkVXBUbyI6IjIyMjUtMDMtMDMiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUENXTVAiLCJmYWxsYmFja0RhdGUiOiIyMDI1LTA0LTIyIiwicGFpZFVwVG8iOiIyMjI1LTAzLTAzIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjUtMDQtMjIiLCJwYWlkVXBUbyI6IjIyMjUtMDMtMDMiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyNDA0MTJQUEFNMDAwMDA1IiwiaGFzaCI6IjU2MzUxMzI3XC8wOjE1NDIyNzYwNzQiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6dHJ1ZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOnRydWUsInRyaWFsIjpmYWxzZSwiYWlBbGxvd2VkIjp0cnVlfQ==-Kr6K+UbgYFKoFZSOVMFB2gANjOZc+MDzq/J9uCL2ERutuiUAakFSNrkgKV/K0QF91Kgc05vZyFjCeUnbTu1LHkk2V6FX5xIXkcejl2yIraZAczCEUmWFbQH9y/ioumX86lqLoHyhEdf7CgYc9Xzw6vaYt1YSDmySODL1QEGUm2PWodGCqOnkh8Malmr1ZqT1+XOh0x+ht4abyGIUlgi0ptHhyzc7LdiqxqroBtgvRgHJCsmM/o2ikELMa+ExTv2+TkagP9Z53FKuj5OHFnF80kFhKtPOi+9U7vyaYcpYLKpPCyvhr/+gR+pu0ExYJnGpp0wSq6Wxxxs3i3t9zjtmYXY0Lia/bcBdkhO6qUXN8mt1QudkMT57Xc6o0aGLhG3X2YrPwuv8rCRoECrTjf1ea/F3ogiQQBbS5yScY5psufD8eIOTSjKGDIqE7EMoPGA5sFNmv5Yyxzhfsd/+qay21fsR0PyIJoxXanDZzGqu5ek6F55tgVek07ctUJ1qX6eoWBgaQA4v1DGMFFyUDuCaT6NRP5UI0P+sxncY92fcDhvGQvQAEjDJjSe6TykPxfViMdY0xtAhTwUPedHUfPtI7G10mmljjAFx6ebyCRjqz7oZqnsXRBYvstxBhlvJ1WDqWU1y2uk8YEEnEVMJj8MEh/2yYQ5SH59yWAgp8qKzpSo=-LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVxakNDQXBLZ0F3SUJBZ0lHQVkzemdyR0xNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1CZ3hGakFVQmdOVkJBTU0KRFVwbGRGQnliMlpwYkdVZ1EwRXdIaGNOTWpRd01qSTNNVFl3TURBd1doY05NelF3TWpJM01UWXdNREF3V2pBVQpNUkl3RUFZRFZRUUREQWxxWlhSaWNtRnBibk13Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLCkFvSUNBUUMvaStCR1cxWFZRVyswb1BFSXhBazNaN1ZOSnVJWUJTZ2ZWMnBZY09UUWJFMjhXSUR4V0FmWUk3cS8KOFNicVdoRXF2SVU1UElnSjNxSENCODF6L0xSV1ZxSlRWZ1U5ZjVhWm44QkM0QW9JS2t4SXAvT2sxQ3NCUHFUTgpTODlaeWdaOVRrOTNjTmVES3RhUHZySzFlUDhDZzRTeEQ1U2ZsWWVLbWVEbjM4VVh0MWM4YVN1a0ZlaGxvZUxWCkgzSFcxSEdCMDVXTHNldHhLWEhLditKUmJSai9vNHdCKzFaYjB4VUx1Z05CRUE1bVpDcjM2dnBJemR3OFdHUDcKRWFLMDFZZGRvTkVsZVgwcjhBUWVXaTlKSVB0OXFDNXlQeXlZdCsrNFhMZng1NnJjNFU4YkJUb04vaDV3SlNvawoxYVJkVnp5MkpMWTAyNHF4ZXF3dk5kRzZ0TitrenNLZks2RXQ0VzA1MkMwZFBpeHhBNDZ0SThlTTVpUExoSWdTClZUMU5EQ3pCNGpib0FwS3JjdnJUc3lONDJyTWhrc1ltYXBQOW9Mdy9GM2xISXZSTnlPZDNBb2hGR1JVTWVXK3AKYm9ISjZYNHdlQTVsR0JKb0tPKzVyVEE0TFl4WDg2QXRWUWlHM3pXZW1kVmxwRWxIMkZHZHNiQkpjdHFUWm5DbwpJUW9oaGpBcE5STE1iZHExZVVDNjhpemIyOHFzWHRQZGh5K2hUckR6RXJTTE9lQkNpODh5YTJrMURoYllrejVsCnFYRExQRG5OZVdLRmVEbHBNeS8ycDRaNVFVTzNRZ0NOeUUzbFZLRG05Y05sb0N5VlQ2S3JrekhVZVpIV0NJK1cKS011QXFweHkxWDFVcnpWSHdFTnRDUDZNVlY1cmE4M21vQWJvQXl1dWJkMGJvdS81ZFFJREFRQUJNQTBHQ1NxRwpTSWIzRFFFQkN3VUFBNElDQVFCeENMNXIxU0NZNmdqSlIwdHJTZ3pYaStEZUlvZVZaemg3SkJBcTR3WmdDWW9aCnRYT3A5TTdWUEZTRmFBNlRBMTU4b0w5RWlRdnVsd2JIUjV4MHllQVVYQXhQdE1sam95VmM1dzRqRDZhVFhkeXQKU3ZRdUZyWWlCU1JWU0dueloxY1pKUVFhSzFhWDR5dmhyU0F5bnB5RkJEdUlUaVl2bDQvbDdTN3JTRDdKTjdaWQpzUlJjWHBwWVRDMDBhTHJ3UUxEdk5qSzhSNUoxMk03cTFHWjhqNGpHcVV6Yk9nV1VoTFJKUmg1Z0ExUTdYbmUrCjlSdE1BblVVQk9OUjFVQzNMWXNZbjRIZ3VEUGdHYXBDdktEQXZoU2NFbUs2S2JNQkY5eTlTSzc3aHFueWV1VUsKMHBDNWdybWo1TjByUEhYL1gwcmZrMldDaDgwM2dpdnpRWVAyOWdTMzRaeTk2Y3RKeWJaZUU0dklSdWdFT3JKTQpUUHdvR0UwOG5MVjNJOEZwTS9NOWFhZ3R6WE10OC9PaTFMczB3d1RJQUdMTGNJVUVxNDVjcElGa2xzSzFydjFRClRhcDRZT1dTSUN1Nkd0Tis0MFhIVTRxNDRPdFJMQ3ZXR2tWZ002Wk40RlRnQWJseUtYeDdoT1ZSN3V6UlhWcXUKRUE5WHlWVDV3RDBCaWpUSVkrS1Y0RHNFNmNUeXd5OU85Kzl5byszeW82a2k5VDJMeFkrZkRVTlIxY2dvY0tnaApHUmhEREhjQlFZSlMwaGcyZUJUcnFPTUpMUUU3ckV3NC9RQXdNanNiTEVOUENtb3orZjFhVmVUYTk3SGZkaks0CjlkRUczZmRLaDI3dHFGMFRZazRkVlVMUy9CU2FSd2R6UHdoNm4vVkZmeXllMmFzazNFL3QwT2pnTks1TVNRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=