add StarUML

This commit is contained in:
wangpengfei
2024-02-19 23:37:47 +08:00
parent 5e13d54a41
commit eeaa34e4c3
2 changed files with 218 additions and 0 deletions

View File

@@ -0,0 +1,175 @@
/*
* Copyright (c) 2013-2014 Minkyu Lee. All rights reserved.
*
* NOTICE: All information contained herein is, and remains the
* property of Minkyu Lee. The intellectual and technical concepts
* contained herein are proprietary to Minkyu Lee and may be covered
* by Republic of Korea and Foreign Patents, patents in process,
* and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Minkyu Lee (niklaus.lee@gmail.com).
*
*/
const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const SK = "DF9B72CC966FBE3A46F99858C5AEE";
const packageJSON = require("../../package.json");
// Check License When File Save
const LICENSE_CHECK_PROBABILITY = 0.3;
const PRO_DIAGRAM_TYPES = [
"SysMLRequirementDiagram",
"SysMLBlockDefinitionDiagram",
"SysMLInternalBlockDiagram",
"SysMLParametricDiagram",
"BPMNDiagram",
"WFWireframeDiagram",
"AWSDiagram",
"GCPDiagram",
];
var status = false;
var licenseInfo = null;
/**
* Set Registration Status
* This function is out of LicenseManager class for the security reason
* (To disable changing License status by API)
* @private
* @param {boolean} newStat
* @return {string}
*/
function setStatus(licenseManager, newStat) {
if (status !== newStat) {
status = newStat;
licenseManager.emit("statusChanged", status);
}
}
/**
* @private
*/
class LicenseManager extends EventEmitter {
constructor() {
super();
this.projectManager = null;
}
isProDiagram(diagramType) {
return true;
}
/**
* Get Registration Status
* @return {string}
*/
getStatus() {
return status;
}
/**
* Get License Infomation
* @return {Object}
*/
getLicenseInfo() {
return licenseInfo;
}
findLicense() {
var licensePath = path.join(app.getUserPath(), "/license.key");
if (!fs.existsSync(licensePath)) {
licensePath = path.join(app.getAppPath(), "../license.key");
}
if (fs.existsSync(licensePath)) {
return licensePath;
} else {
return null;
}
}
/**
* Check license validity
*
* @return {Promise}
*/
validate() {
return new Promise((resolve, reject) => {
try {
// Local check
var file = this.findLicense();
if (!file) {
reject("License key not found");
} else {
var data = fs.readFileSync(file, "utf8");
licenseInfo = JSON.parse(data);
resolve(licenseInfo);
}
} catch (err) {
reject(err);
}
});
}
checkLicenseValidity() {
if (packageJSON.config.setappBuild) {
setStatus(this, true);
} else {
this.validate().then(
() => {
setStatus(this, true);
},
() => {
setStatus(this, false);
UnregisteredDialog.showDialog();
},
);
}
}
/**
* Check the license key in server and store it as license.key file in local
*
* @param {string} licenseKey
*/
register(licenseKey) {
return new Promise((resolve, reject) => {
var data = {
name: "QiuChenlyTeam",
product: "STARUML.V6",
licenseType: "PRO",
quantity: "99999",
timestamp: "1575275098",
licenseKey: "88888888888888",
crackedAuthor: "BilZzard"
}
if (data.product === packageJSON.config.product_id) {
var file = path.join(app.getUserPath(), "/license.key");
fs.writeFileSync(file, JSON.stringify(data, 2));
licenseInfo = data;
setStatus(this, true);
resolve(data);
}
});
}
htmlReady() {
this.projectManager.on("projectSaved", (filename, project) => {
var val = Math.floor(Math.random() * (1.0 / LICENSE_CHECK_PROBABILITY));
if (val === 0) {
this.checkLicenseValidity();
}
});
}
appReady() {
this.checkLicenseValidity();
}
}
module.exports = LicenseManager;

43
tool/StarUML/main.py Normal file
View File

@@ -0,0 +1,43 @@
import os
# 检查是否安装了 asar 命令
def check_asar_command():
return os.system("command -v asar > /dev/null 2>&1") == 0
if not check_asar_command():
print("草泥马先安装asar。")
exit(1)
# 获取用户输入的用户名
username = input("请输入用户名: ")
# 执行bash命令
bash_extract = """
cd /Applications/StarUML.app/Contents/Resources && asar extract app.asar app
"""
os.system(bash_extract)
# 复制license-manager.js文件到目标位置
destination_path = "/Applications/StarUML.app/Contents/Resources/app/src/engine/"
os.system("cp -f license-manager.js {}".format(destination_path))
# 将字符串中的"BilZzard"替换为用户输入的文本
with open(destination_path + "license-manager.js", 'r') as file:
js_content = file.read()
new_js_content = js_content.replace('QiuChenlyTeam', username)
# 将替换后的内容写回到js文件
with open(destination_path + "license-manager.js", 'w') as file:
file.write(new_js_content)
# 执行bash命令
print("需要修复app,看到提示后输入root密码。")
bash_pack = """
cd /Applications/StarUML.app/Contents/Resources &&
asar pack app app.asar &&
rm -rf app && sudo xattr -r -d com.apple.quarantine /Applications/StarUML.app
"""
os.system(bash_pack)
print("脚本执行完成。请打开后从设置-隐私与安全中打开!之后随便输入激活码即可激活!")