mirror of
https://github.com/laurent22/joplin.git
synced 2025-01-02 12:47:41 +02:00
Plugin Repo: Disallow invalid plugin version numbers
This commit is contained in:
parent
cf661b454b
commit
bbe4d09260
@ -1539,6 +1539,12 @@ packages/lib/services/plugins/utils/validatePluginId.js.map
|
|||||||
packages/lib/services/plugins/utils/validatePluginId.test.d.ts
|
packages/lib/services/plugins/utils/validatePluginId.test.d.ts
|
||||||
packages/lib/services/plugins/utils/validatePluginId.test.js
|
packages/lib/services/plugins/utils/validatePluginId.test.js
|
||||||
packages/lib/services/plugins/utils/validatePluginId.test.js.map
|
packages/lib/services/plugins/utils/validatePluginId.test.js.map
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.d.ts
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.js.map
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.test.d.ts
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.test.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.test.js.map
|
||||||
packages/lib/services/rest/Api.d.ts
|
packages/lib/services/rest/Api.d.ts
|
||||||
packages/lib/services/rest/Api.js
|
packages/lib/services/rest/Api.js
|
||||||
packages/lib/services/rest/Api.js.map
|
packages/lib/services/rest/Api.js.map
|
||||||
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -1530,6 +1530,12 @@ packages/lib/services/plugins/utils/validatePluginId.js.map
|
|||||||
packages/lib/services/plugins/utils/validatePluginId.test.d.ts
|
packages/lib/services/plugins/utils/validatePluginId.test.d.ts
|
||||||
packages/lib/services/plugins/utils/validatePluginId.test.js
|
packages/lib/services/plugins/utils/validatePluginId.test.js
|
||||||
packages/lib/services/plugins/utils/validatePluginId.test.js.map
|
packages/lib/services/plugins/utils/validatePluginId.test.js.map
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.d.ts
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.js.map
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.test.d.ts
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.test.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginVersion.test.js.map
|
||||||
packages/lib/services/rest/Api.d.ts
|
packages/lib/services/rest/Api.d.ts
|
||||||
packages/lib/services/rest/Api.js
|
packages/lib/services/rest/Api.js
|
||||||
packages/lib/services/rest/Api.js.map
|
packages/lib/services/rest/Api.js.map
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
import validatePluginVersion from './validatePluginVersion';
|
||||||
|
|
||||||
|
describe('validatePluginVersion', () => {
|
||||||
|
|
||||||
|
test('should validate a version number', () => {
|
||||||
|
const okCases = [
|
||||||
|
'1.2.3',
|
||||||
|
'3',
|
||||||
|
'1.3-beta',
|
||||||
|
'10-re',
|
||||||
|
'4-ALPHA',
|
||||||
|
];
|
||||||
|
|
||||||
|
const errorCases = [
|
||||||
|
'',
|
||||||
|
'3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817',
|
||||||
|
'0.14.1 OHNO',
|
||||||
|
'-',
|
||||||
|
'-1.5',
|
||||||
|
'1.6-',
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const t of okCases) {
|
||||||
|
expect(() => validatePluginVersion(t)).not.toThrow();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const t of errorCases) {
|
||||||
|
expect(() => validatePluginVersion(t)).toThrow();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
14
packages/lib/services/plugins/utils/validatePluginVersion.ts
Normal file
14
packages/lib/services/plugins/utils/validatePluginVersion.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
export default function(version: string): void {
|
||||||
|
if (!version || !version.length) throw new Error('Version number cannot be empty');
|
||||||
|
|
||||||
|
const maxLength = 64;
|
||||||
|
if (version.length > 64) throw new Error(`Version number cannot be longer than ${maxLength} characters`);
|
||||||
|
|
||||||
|
const patternStart = '^[0-9a-zA-Z].*$';
|
||||||
|
const patternEnd = '^.*[0-9a-zA-Z]$';
|
||||||
|
const pattern = '^[0-9a-zA-Z-.]+$';
|
||||||
|
|
||||||
|
if (!version.match(new RegExp(patternStart))) throw new Error(`Version number must match pattern /${patternStart}/`);
|
||||||
|
if (!version.match(new RegExp(patternEnd))) throw new Error(`Version number must match pattern /${patternEnd}/`);
|
||||||
|
if (!version.match(new RegExp(pattern))) throw new Error(`Version number must match pattern /${pattern}/`);
|
||||||
|
}
|
@ -4,6 +4,7 @@ import * as fs from 'fs-extra';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as process from 'process';
|
import * as process from 'process';
|
||||||
import validatePluginId from '@joplin/lib/services/plugins/utils/validatePluginId';
|
import validatePluginId from '@joplin/lib/services/plugins/utils/validatePluginId';
|
||||||
|
import validatePluginVersion from '@joplin/lib/services/plugins/utils/validatePluginVersion';
|
||||||
import { execCommand2, resolveRelativePathWithinDir, gitPullTry, gitRepoCleanTry, gitRepoClean } from '@joplin/tools/tool-utils.js';
|
import { execCommand2, resolveRelativePathWithinDir, gitPullTry, gitRepoCleanTry, gitRepoClean } from '@joplin/tools/tool-utils.js';
|
||||||
import checkIfPluginCanBeAdded from './lib/checkIfPluginCanBeAdded';
|
import checkIfPluginCanBeAdded from './lib/checkIfPluginCanBeAdded';
|
||||||
import updateReadme from './lib/updateReadme';
|
import updateReadme from './lib/updateReadme';
|
||||||
@ -61,6 +62,7 @@ async function extractPluginFilesFromPackage(existingManifests: any, workDir: st
|
|||||||
// manifest properties are checked when the plugin is loaded into the app.
|
// manifest properties are checked when the plugin is loaded into the app.
|
||||||
const manifest = await readJsonFile(manifestFilePath);
|
const manifest = await readJsonFile(manifestFilePath);
|
||||||
validatePluginId(manifest.id);
|
validatePluginId(manifest.id);
|
||||||
|
validatePluginVersion(manifest.version);
|
||||||
|
|
||||||
manifest._npm_package_name = packageName;
|
manifest._npm_package_name = packageName;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user