Skip to content

Instantly share code, notes, and snippets.

@trandaison
Last active June 2, 2025 14:32
Show Gist options
  • Save trandaison/40b1d83618ae8e3d2da59df8c395093a to your computer and use it in GitHub Desktop.
Save trandaison/40b1d83618ae8e3d2da59df8c395093a to your computer and use it in GitHub Desktop.
Get full version of StarUML

Note: This is the guide for v 2.x.

For the v3, please follow this url: https://blog.csdn.net/sam_shan/article/details/80585240 Thanks @liy-cn for contributing.

For the v6, please follow the comment below: https://gist.github.com/trandaison/40b1d83618ae8e3d2da59df8c395093a?permalink_comment_id=5079514#gistcomment-5079514

StarUML

Download: StarUML.io

Crack

Source: jorgeancal

After installing StartUML successfully, modify LicenseManagerDomain.js as follow:

/**
 * File name: LicenseManagerDomain.js
 * Mac OS: /Applications/StarUML.app/Contents/www/license/node/
 * Linux: /opt/staruml/www/license/node/
 */

(function () {
    "use strict";
 
    var NodeRSA = require('node-rsa');
 
    function validate(PK, name, product, licenseKey) {
        return{
           name: "sontd",
           product: "StarUML",
           licenseType: "vip",
           quantity: "unlimited",
           licenseKey: "no, thanks!"
        };
    }
 
    function init(domainManager) {
        if (!domainManager.hasDomain("LicenseManager")) {
            domainManager.registerDomain("LicenseManager", {major: 0, minor: 1});
        }
        domainManager.registerCommand(
            "LicenseManager", // domain name
            "validate",       // command name
            validate,         // command handler function
            false,            // this command is synchronous in Node ("false" means synchronous")
            "Validate License",
            [
                {
                    name: "PK",
                    type: "string",
                    description: "PK"
                },
                {
                    name: "name",
                    type: "string",
                    description: "name of license owner"
                },
                {
                    name: "product",
                    type: "string",
                    description: "product name"
                },
                {
                    name: "licenseKey",
                    type: "string",
                    description: "license key"
                }
            ],
            [
                {
                    name: "result", // return values
                    type: "object",
                    description: "result"
                }
            ]
        );
    }
 
    exports.init = init;
 
}());

Now, open it and go to Help > Enter License and you have to write the name and the licence key which you have written on LicenseManagerDomain.js. In this example would be the next:

name: "sontd"
License Key: "no, thanks!"

Enjoy it!

@badrelmazaz
Copy link

This worked for me on v5.0.1 (Linux).

* All commands were run as root

* Probably should have StarUML closed during this process

* I recommend backing up your StarUML directory


1. Install `asar` via `npm`
npm i asar -g
2. Extract source
cd <path_to_staruml>/resources/ # mine was /opt/StarUML/resources/
asar extract app.asar app
3. Edit `license-manager.js`
<text_editor> app/src/engine/license-manager.js

Change this

  checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to this

  checkLicenseValidity () {
    // if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    // } else {
    //   this.validate().then(() => {
    //     setStatus(this, true)
    //   }, () => {
    //     setStatus(this, false)
    //     UnregisteredDialog.showDialog()
    //   })
    // }
  }
4. Repackage app
asar pack app app.asar

Next time you run StarUML, it should behave as a licensed version.
Source

this is worked in MacOS Big Sur thanks bro

Thanks this worked also on Windows 10

@deron-dev
Copy link

deron-dev commented Feb 6, 2023

An update from my initial post.

This worked for me on v5.0.1 v5.1.0 (Linux).

  1. Install asar via npm
npm i asar -g
  1. Extract source
cd <path_to_staruml>/resources/ # mine was /opt/StarUML/resources/
asar extract app.asar app
  1. Edit src/engine/license-manager.js

change this

  checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to this

  checkLicenseValidity () {
      setStatus(this, true)
  }

and this

  register (licenseKey) {
    return new Promise((resolve, reject) => {
      $.post(app.config.validation_url, {licenseKey: licenseKey})
        .done(data => {
          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)
          } else {
            setStatus(this, false)
            reject('unmatched') /* License is for old version */
          }
        })
        .fail(err => {
          setStatus(this, false)
          if (err.status === 499) { /* License key not exists */
            reject('invalid')
          } else {
            reject()
          }
        })
    })
  }

to this

  register (licenseKey) {
    return new Promise(() => { setStatus(this, false) })
  }

  1. Repackage app
asar pack app app.asar

Next time you run StarUML, it should behave as a licensed version.

Source (Nonfunctional as of this post)
Source on Wayback
Original Post

@deron-dev
Copy link

This page has been saved in the Wayback Machine

@joseph19993d
Copy link

Any for windows ?

@deron-dev
Copy link

@joseph19993d, asar is an npm package, so I think you should still be able to get it on Windows; thus, the process should be similar to above

You would just have to find where StarUML is installed on Windows.

@what0o0
Copy link

what0o0 commented Aug 31, 2023

An update from my initial post.

This worked for me on v5.0.1 v5.1.0 (Linux).

  • All commands were run as root
  • You may need to run commands as root if your StarUML directory is not owned by your user
  • Probably should have StarUML closed during this process
  • I recommend backing up your StarUML directory
  1. Install asar via npm
npm i asar -g
  1. Extract source
cd <path_to_staruml>/resources/ # mine was /opt/StarUML/resources/
asar extract app.asar app
  1. Edit src/engine/license-manager.js

change this

  checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to this

  checkLicenseValidity () {
      setStatus(this, true)
  }

and this

  register (licenseKey) {
    return new Promise((resolve, reject) => {
      $.post(app.config.validation_url, {licenseKey: licenseKey})
        .done(data => {
          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)
          } else {
            setStatus(this, false)
            reject('unmatched') /* License is for old version */
          }
        })
        .fail(err => {
          setStatus(this, false)
          if (err.status === 499) { /* License key not exists */
            reject('invalid')
          } else {
            reject()
          }
        })
    })
  }

to this

  register (licenseKey) {
    return new Promise(() => { setStatus(this, false) })
  }
  1. Repackage app
asar pack app app.asar

Next time you run StarUML, it should behave as a licensed version.

Source (Nonfunctional as of this post) Source on Wayback Original Post

checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to

checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, true)
      })
    }
  }

This worked for me on v5.1.0 by Windows 11

@havencozy
Copy link

thanks you, it worked for me on Windows 10

@fefebrians
Copy link

This file LicenseManagerDomain.js didn't came after my StarUML installing 4.1.6. as well as the www folder. I did the StarUML install through sudo dpkg -i (StarUML.deb file), I already try to create a new folder: www with the LicenseManagerDomain.js file on it but when I try to insert the license key no success, I would like to know how could I solve it? My OS is Ubuntu 20.04

it is true ,last i try this , but not work

@KresnaB
Copy link

KresnaB commented Dec 23, 2023

An update from my initial post.
This worked for me on v5.0.1 v5.1.0 (Linux).

  • All commands were run as root
  • You may need to run commands as root if your StarUML directory is not owned by your user
  • Probably should have StarUML closed during this process
  • I recommend backing up your StarUML directory
  1. Install asar via npm
npm i asar -g
  1. Extract source
cd <path_to_staruml>/resources/ # mine was /opt/StarUML/resources/
asar extract app.asar app
  1. Edit src/engine/license-manager.js

change this

  checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to this

  checkLicenseValidity () {
      setStatus(this, true)
  }

and this

  register (licenseKey) {
    return new Promise((resolve, reject) => {
      $.post(app.config.validation_url, {licenseKey: licenseKey})
        .done(data => {
          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)
          } else {
            setStatus(this, false)
            reject('unmatched') /* License is for old version */
          }
        })
        .fail(err => {
          setStatus(this, false)
          if (err.status === 499) { /* License key not exists */
            reject('invalid')
          } else {
            reject()
          }
        })
    })
  }

to this

  register (licenseKey) {
    return new Promise(() => { setStatus(this, false) })
  }
  1. Repackage app
asar pack app app.asar

Next time you run StarUML, it should behave as a licensed version.
Source (Nonfunctional as of this post) Source on Wayback Original Post

checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to

checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, true)
      })
    }
  }

This work for 6.0.1, but i can't export the diagram. I recommend using 5.1.0

@samonysh
Copy link

samonysh commented Apr 8, 2024

An update from my initial post.
This worked for me on v5.0.1 v5.1.0 (Linux).

  • All commands were run as root
  • You may need to run commands as root if your StarUML directory is not owned by your user
  • Probably should have StarUML closed during this process
  • I recommend backing up your StarUML directory
  1. Install asar via npm
npm i asar -g
  1. Extract source
cd <path_to_staruml>/resources/ # mine was /opt/StarUML/resources/
asar extract app.asar app
  1. Edit src/engine/license-manager.js

change this

  checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to this

  checkLicenseValidity () {
      setStatus(this, true)
  }

and this

  register (licenseKey) {
    return new Promise((resolve, reject) => {
      $.post(app.config.validation_url, {licenseKey: licenseKey})
        .done(data => {
          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)
          } else {
            setStatus(this, false)
            reject('unmatched') /* License is for old version */
          }
        })
        .fail(err => {
          setStatus(this, false)
          if (err.status === 499) { /* License key not exists */
            reject('invalid')
          } else {
            reject()
          }
        })
    })
  }

to this

  register (licenseKey) {
    return new Promise(() => { setStatus(this, false) })
  }
  1. Repackage app
asar pack app app.asar

Next time you run StarUML, it should behave as a licensed version.
Source (Nonfunctional as of this post) Source on Wayback Original Post

checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, false)
        UnregisteredDialog.showDialog()
      })
    }
  }

to

checkLicenseValidity () {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true)
    } else {
      this.validate().then(() => {
        setStatus(this, true)
      }, () => {
        setStatus(this, true)
      })
    }
  }

This work for 6.0.1, but i can't export the diagram. I recommend using 5.1.0

If you want to export the diagram, you also need to edit src/engine/diagram-export.js.
You should comment these codes below the comment // Draw watermark if application is not registered, beacuse there is a problem occored when checking license.

@racstan
Copy link

racstan commented Apr 18, 2024

Thanks buddy it worked

@korovkaK22
Copy link

@EZaykov
Thanks a lot! 6.0.1 still working

@h-chayma
Copy link

@EZaykov
Thanks a lot! 6.1.0 and still working

@arthiccc
Copy link

arthiccc commented May 2, 2024

@phgnam
Copy link

phgnam commented May 4, 2024

macOS Sonoma with version 6.1.0 still working
path /Applications/StarUML.app/Contents/Resources
https://gist.github.com/trandaison/40b1d83618ae8e3d2da59df8c395093a?permalink_comment_id=5016455#gistcomment-5016455

@gochi20
Copy link

gochi20 commented May 7, 2024

currently 6.1.0 is working but i cant export a diagram

@fedpo2
Copy link

fedpo2 commented May 23, 2024

imagen
shows this error when trying to export to pdf.

on debian.

@ImZeera
Copy link

ImZeera commented Sep 18, 2024

Thank u @MinskThD . It Worked, i appreciated bro.

@RDreamStudios
Copy link

RDreamStudios commented Sep 29, 2024

It worked for me in StarUML 6.2.2 with these codes, it also solved the problem to export diagram as a PRO User: https://gist.github.com/RodyDesigner/394c00db555119ea50eea7eb158312ad

have a good day!!

@Pipoo13
Copy link

Pipoo13 commented Oct 15, 2024

Thank u @MinskThD . It Worked, i appreciated bro.

hahah its work too

@MadisonJames2
Copy link

Thank you

@LorenBregant
Copy link

Hello, my language is not English, so I will use a translator.
I did the following and it worked for me on Linux (StarUML v6.2.2).
Modify the entire contents of src/engine/license-manager.js
(to find the file I followed the instructions in one of the previous comments)

const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const packageJSON = require("../../package.json");

const PRO_DIAGRAM_TYPES = [
  "SysMLRequirementDiagram",
  "SysMLBlockDefinitionDiagram",
  "SysMLInternalBlockDiagram",
  "SysMLParametricDiagram",
  "BPMNDiagram",
  "WFWireframeDiagram",
  "AWSDiagram",
  "GCPDiagram",
];

var status = true;
var licenseInfo = {
  product: packageJSON.config.product_id,
  licenseType: "free", 
  quantity: 1,
};

/**
 * @private
 */
class LicenseManager extends EventEmitter {
  constructor() {
    super();
    this.projectManager = null;
  }

  isProDiagram(diagramType) {
    return PRO_DIAGRAM_TYPES.includes(diagramType);
  }

  /**
   * Get Registration Status
   * @return {string}
   */
  getStatus() {
    return status;
  }

  /**
   * Get License Information
   * @return {Object}
   */
  getLicenseInfo() {
    return licenseInfo;
  }

  /**
   */
  validate() {
    return Promise.resolve(licenseInfo);
  }

  /**
   */
  async checkLicenseValidity() {
    setStatus(this, true); 
  }

  /**
   *
   * @param {string} licenseKey
   */
  register(licenseKey) {
    return Promise.resolve(licenseInfo);
  }

  htmlReady() {}

  appReady() {
    this.checkLicenseValidity();
  }
}

module.exports = LicenseManager;

It worked for me so far, I hope it works for someone else too.

@Medsalemabdi
Copy link

Hello, my language is not English, so I will use a translator. I did the following and it worked for me on Linux (StarUML v6.2.2). Modify the entire contents of src/engine/license-manager.js (to find the file I followed the instructions in one of the previous comments)

const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const packageJSON = require("../../package.json");

const PRO_DIAGRAM_TYPES = [
  "SysMLRequirementDiagram",
  "SysMLBlockDefinitionDiagram",
  "SysMLInternalBlockDiagram",
  "SysMLParametricDiagram",
  "BPMNDiagram",
  "WFWireframeDiagram",
  "AWSDiagram",
  "GCPDiagram",
];

var status = true;
var licenseInfo = {
  product: packageJSON.config.product_id,
  licenseType: "free", 
  quantity: 1,
};

/**
 * @private
 */
class LicenseManager extends EventEmitter {
  constructor() {
    super();
    this.projectManager = null;
  }

  isProDiagram(diagramType) {
    return PRO_DIAGRAM_TYPES.includes(diagramType);
  }

  /**
   * Get Registration Status
   * @return {string}
   */
  getStatus() {
    return status;
  }

  /**
   * Get License Information
   * @return {Object}
   */
  getLicenseInfo() {
    return licenseInfo;
  }

  /**
   */
  validate() {
    return Promise.resolve(licenseInfo);
  }

  /**
   */
  async checkLicenseValidity() {
    setStatus(this, true); 
  }

  /**
   *
   * @param {string} licenseKey
   */
  register(licenseKey) {
    return Promise.resolve(licenseInfo);
  }

  htmlReady() {}

  appReady() {
    this.checkLicenseValidity();
  }
}

module.exports = LicenseManager;

It worked for me so far, I hope it works for someone else too.

Works perfectly thanks :)

@Nother01
Copy link

Nother01 commented Oct 25, 2024

For ease of use, I took the license and watermark management logic and put it into a bash script, if that helps people code

@SebaG20xx
Copy link

For ease of use, I took the license and watermark management logic and put it into a bash script, if that helps people

https://github.com/Nother01/Crack_StarUML 

I ported the bash script to PowerShell
Repo

@aouniR
Copy link

aouniR commented Nov 7, 2024

Instructions:

  1. Copy and paste this updated code into the app/src/engine/license-manager.js file.
  2. Run the following command to repackage the app: asar pack app app.asar

Updated Code:

const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const packageJSON = require("../../package.json");

const SK = "DF9B72CC966FBE3A46F99858C5AEE";

// 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 PRO_DIAGRAM_TYPES.includes(diagramType);
  }

  /**
   * Get Registration Status
   * @return {string}
   */
  getStatus() {
    return status;
  }

  /**
   * Get License Information
   * @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) => {
      // Skip all validation and assume license is valid
      resolve('License is valid');  // Directly resolve the promise
    });
  }

  /**
   * Return evaluation period status
   * @Private
   * @return {number} Remaining days
   */
  checkEvaluationPeriod() {
    return 30;  // Always return a valid evaluation period (30 days remaining)
  }

  async checkLicenseValidity() {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true);
    } else {
      try {
        // Always consider the license valid without validation
        const result = await this.validate();
        setStatus(this, true);
      } catch (err) {
        const remains = this.checkEvaluationPeriod();
        const isExpired = remains < 0;
        const result = await UnregisteredDialog.showDialog(remains);
        setStatus(this, false);
        if (isExpired) {
          app.quit();
        }
      }
    }
  }

  /**
   * 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) => {
      // Skip the server-side validation and assume success
      var data = { product: packageJSON.config.product_id, licenseKey: licenseKey };
      var file = path.join(app.getUserPath(), "/license.key");
      fs.writeFileSync(file, JSON.stringify(data, null, 2));
      licenseInfo = data;
      setStatus(this, true);
      resolve(data); // Always resolve as successful
    });
  }

  htmlReady() {}

  appReady() {
    this.checkLicenseValidity();
  }
}

module.exports = LicenseManager; 

@khaled3233
Copy link

Thank you all

@MtMath
Copy link

MtMath commented Apr 28, 2025

Currently 6.3.2 is working, Thank you guys

@dwicahyo-dev
Copy link

Worked on v6.3.2. Thanks guys

@riven-lol
Copy link

Instructions:

  1. Copy and paste this updated code into the app/src/engine/license-manager.js file.
  2. Run the following command to repackage the app: asar pack app app.asar

Updated Code:

const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const packageJSON = require("../../package.json");

const SK = "DF9B72CC966FBE3A46F99858C5AEE";

// 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 PRO_DIAGRAM_TYPES.includes(diagramType);
  }

  /**
   * Get Registration Status
   * @return {string}
   */
  getStatus() {
    return status;
  }

  /**
   * Get License Information
   * @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) => {
      // Skip all validation and assume license is valid
      resolve('License is valid');  // Directly resolve the promise
    });
  }

  /**
   * Return evaluation period status
   * @Private
   * @return {number} Remaining days
   */
  checkEvaluationPeriod() {
    return 30;  // Always return a valid evaluation period (30 days remaining)
  }

  async checkLicenseValidity() {
    if (packageJSON.config.setappBuild) {
      setStatus(this, true);
    } else {
      try {
        // Always consider the license valid without validation
        const result = await this.validate();
        setStatus(this, true);
      } catch (err) {
        const remains = this.checkEvaluationPeriod();
        const isExpired = remains < 0;
        const result = await UnregisteredDialog.showDialog(remains);
        setStatus(this, false);
        if (isExpired) {
          app.quit();
        }
      }
    }
  }

  /**
   * 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) => {
      // Skip the server-side validation and assume success
      var data = { product: packageJSON.config.product_id, licenseKey: licenseKey };
      var file = path.join(app.getUserPath(), "/license.key");
      fs.writeFileSync(file, JSON.stringify(data, null, 2));
      licenseInfo = data;
      setStatus(this, true);
      resolve(data); // Always resolve as successful
    });
  }

  htmlReady() {}

  appReady() {
    this.checkLicenseValidity();
  }
}

module.exports = LicenseManager; 

There is a problem when exporting the file to image (PNG, JPG), the App will ask for licenseType and this code is null, so it unable to export the Image

update function below to fix it, i didn't test on PRO Diagram yet, but it's working for export image

var licenseInfo = {
  licenseType: "PRO",
};

register(licenseKey) {
    return new Promise((resolve, reject) => {
      var data = {
        product: packageJSON.config.product_id,
        licenseKey: licenseKey,
        licenseType: "PRO",
      };
      var file = path.join(app.getUserPath(), "/license.key");
      fs.writeFileSync(file, JSON.stringify(data, null, 2));
      licenseInfo = data;
      setStatus(this, true);
      resolve(data);
    });
  }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment