UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

224 lines (221 loc) • 5.98 kB
/** * DevExtreme (esm/__internal/core/license/license_validation.js) * Version: 23.2.6 * Build date: Wed May 01 2024 * * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import _extends from "@babel/runtime/helpers/esm/extends"; var __rest = this && this.__rest || function(s, e) { var t = {}; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) { t[p] = s[p] } } if (null != s && "function" === typeof Object.getOwnPropertySymbols) { var i = 0; for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) { t[p[i]] = s[p[i]] } } } return t }; import errors from "../../../core/errors"; import { version as packageVersion } from "../../../core/version"; import { base64ToBytes } from "./byte_utils"; import { INTERNAL_USAGE_ID, PUBLIC_KEY } from "./key"; import { pad } from "./pkcs1"; import { compareSignatures } from "./rsa_bigint"; import { sha1 } from "./sha1"; import { TokenKind } from "./types"; var SPLITTER = "."; var FORMAT = 1; var RTM_MIN_PATCH_VERSION = 3; var GENERAL_ERROR = { kind: TokenKind.corrupted, error: "general" }; var VERIFICATION_ERROR = { kind: TokenKind.corrupted, error: "verification" }; var DECODING_ERROR = { kind: TokenKind.corrupted, error: "decoding" }; var DESERIALIZATION_ERROR = { kind: TokenKind.corrupted, error: "deserialization" }; var PAYLOAD_ERROR = { kind: TokenKind.corrupted, error: "payload" }; var VERSION_ERROR = { kind: TokenKind.corrupted, error: "version" }; var validationPerformed = false; function verifySignature(_ref) { var { text: text, signature: encodedSignature } = _ref; return compareSignatures({ key: PUBLIC_KEY, signature: base64ToBytes(encodedSignature), actual: pad(sha1(text)) }) } export function parseLicenseKey(encodedKey) { if (void 0 === encodedKey) { return GENERAL_ERROR } var parts = encodedKey.split(SPLITTER); if (2 !== parts.length || 0 === parts[0].length || 0 === parts[1].length) { return GENERAL_ERROR } if (!verifySignature({ text: parts[0], signature: parts[1] })) { return VERIFICATION_ERROR } var decodedPayload = ""; try { decodedPayload = atob(parts[0]) } catch (_a) { return DECODING_ERROR } var payload = {}; try { payload = JSON.parse(decodedPayload) } catch (_b) { return DESERIALIZATION_ERROR } var { customerId: customerId, maxVersionAllowed: maxVersionAllowed, format: format, internalUsageId: internalUsageId } = payload, rest = __rest(payload, ["customerId", "maxVersionAllowed", "format", "internalUsageId"]); if (void 0 !== internalUsageId) { return { kind: TokenKind.internal, internalUsageId: internalUsageId } } if (void 0 === customerId || void 0 === maxVersionAllowed || void 0 === format) { return PAYLOAD_ERROR } if (format !== FORMAT) { return VERSION_ERROR } return { kind: TokenKind.verified, payload: _extends({ customerId: customerId, maxVersionAllowed: maxVersionAllowed }, rest) } } function getLicenseCheckParams(_ref2) { var { licenseKey: licenseKey, version: version } = _ref2; var preview = false; try { var [major, minor, patch] = version.split(".").map(Number); preview = isNaN(patch) || patch < RTM_MIN_PATCH_VERSION; if (!licenseKey) { return { preview: preview, error: "W0019" } } var license = parseLicenseKey(licenseKey); if (license.kind === TokenKind.corrupted) { return { preview: preview, error: "W0021" } } if (license.kind === TokenKind.internal) { return { preview: preview, internal: true, error: license.internalUsageId === INTERNAL_USAGE_ID ? void 0 : "W0020" } } if (!(major && minor)) { return { preview: preview, error: "W0021" } } if (10 * major + minor > license.payload.maxVersionAllowed) { return { preview: preview, error: "W0020" } } return { preview: preview, error: void 0 } } catch (_a) { return { preview: preview, error: "W0021" } } } export function validateLicense(licenseKey) { var version = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : packageVersion; if (validationPerformed) { return } validationPerformed = true; var { preview: preview, internal: internal, error: error } = getLicenseCheckParams({ licenseKey: licenseKey, version: version }); if (error) { errors.log(preview ? "W0022" : error); return } if (preview && !internal) { errors.log("W0022") } } export function peekValidationPerformed() { return validationPerformed } export function setLicenseCheckSkipCondition() {} export default { validateLicense: validateLicense };