From 7b1414733bb314a41ef6393761b5b67a2d2f97fa Mon Sep 17 00:00:00 2001 From: Juan Picado Date: Mon, 13 May 2024 19:52:34 +0200 Subject: [PATCH] feat: migrateToSecureLegacySignature 6.x (#4643) * migrate to forceMigrateToSecureLegacySignature update dependencies * Update ci.yml * Update ci.yml * format * improve ci --- .github/workflows/ci.yml | 8 +- .../workflows/e2e-angular-cli-workflow.yml | 37 ----- .github/workflows/e2e-jest-workflow.yml | 6 +- package.json | 66 ++++----- src/index.ts | 5 +- src/lib/cli/commands/init.ts | 3 +- src/lib/config-path.ts | 135 ------------------ src/lib/config.ts | 2 +- src/lib/run-server.ts | 3 +- src/lib/utils.ts | 3 +- test/unit/modules/bootstrap/legacy.spec.ts | 3 +- .../unit/modules/bootstrap/run-server.spec.ts | 3 +- test/unit/modules/cli/cli.spec.ts | 3 +- test/unit/modules/config/config.spec.ts | 5 +- .../unit/modules/utils/api.__test.template.ts | 3 +- tsconfig.json | 4 +- yarn.lock | Bin 443306 -> 446592 bytes 17 files changed, 61 insertions(+), 228 deletions(-) delete mode 100644 src/lib/config-path.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 71ba34475..b59256cab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,12 @@ name: CI on: [push, pull_request] +permissions: + contents: read +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + jobs: ci: name: Node ${{ matrix.node_version }} @@ -10,7 +16,7 @@ jobs: fail-fast: false matrix: # only suported versions defined at https://nodejs.org/en/about/previous-releases - node_version: [18, 20, 21] + node_version: [18, 20, 21, 22] runs-on: ubuntu-latest diff --git a/.github/workflows/e2e-angular-cli-workflow.yml b/.github/workflows/e2e-angular-cli-workflow.yml index 8da2bf76b..dc46ef4a4 100644 --- a/.github/workflows/e2e-angular-cli-workflow.yml +++ b/.github/workflows/e2e-angular-cli-workflow.yml @@ -5,43 +5,6 @@ on: name: 'E2E Angular CLI with verdaccio' jobs: - npm7: - name: 'npm7:angular example' - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - - - name: 'Use Node.js' - uses: actions/setup-node@7c12f8017d5436eb855f1ed4399f037a36fbd9e8 # v2.5.2 - with: - node-version-file: '.nvmrc' - - name: 'install latest npm' - run: npm i -g npm@next-7 - - name: Install Dependencies - run: yarn install - - name: 'Run verdaccio in the background' - run: | - nohup yarn node ./scripts/run-verdaccio.js --config ./scripts/e2e-config.yaml & - - name: 'Ping to verdaccio' - run: | - npm ping --registry http://localhost:4873 - - name: 'Running the integration test' - run: | - source scripts/e2e-setup-ci.sh - echo "registry=http://localhost:4873" > ~/.npmrc - npm config set loglevel="silent" - npm config set fetch-retries="5" - npm config set fetch-retry-factor="50" - npm config set fetch-retry-mintimeout="20000" - npm config set fetch-retry-maxtimeout="80000" - npm install -g @angular/cli - ng new verdaccio-angular --interactive=false - - cd verdaccio-angular - npm install @angular-devkit/core@next @babel/preset-env @babel/core -D - - npm run ng build --aot npm8: name: 'npm8:angular example' runs-on: ubuntu-latest diff --git a/.github/workflows/e2e-jest-workflow.yml b/.github/workflows/e2e-jest-workflow.yml index e6bcb8895..5596f4f3c 100644 --- a/.github/workflows/e2e-jest-workflow.yml +++ b/.github/workflows/e2e-jest-workflow.yml @@ -202,8 +202,8 @@ jobs: yarn add left-pad --registry http://localhost:4873 --verbose echo "const leftPad = require('left-pad'); it('should resolve a module', () => { expect(typeof leftPad).toBe('function');});" | tee module.test.js yarn jest module.test.js - pnpm7: - name: 'pnpm:7:jest example' + pnpm9: + name: 'pnpm:9:jest example' runs-on: ubuntu-latest steps: @@ -214,7 +214,7 @@ jobs: with: node-version-file: '.nvmrc' - name: 'install latest pnpm' - run: npm i -g pnpm@latest-7 + run: npm i -g pnpm@latest-9 - name: Install Dependencies run: yarn install - name: 'Run verdaccio in the background' diff --git a/package.json b/package.json index 5b41aade9..7399e472c 100644 --- a/package.json +++ b/package.json @@ -19,22 +19,22 @@ "url": "https://opencollective.com/verdaccio" }, "dependencies": { - "@verdaccio/auth": "7.0.0-next-7.13", - "@verdaccio/config": "7.0.0-next-7.13", - "@verdaccio/core": "7.0.0-next-7.13", - "@verdaccio/hooks": "7.0.0-next-7.13", - "@verdaccio/loaders": "7.0.0-next-7.13", + "@verdaccio/auth": "7.0.0-next-7.15", + "@verdaccio/config": "7.0.0-next-7.15", + "@verdaccio/core": "7.0.0-next-7.15", + "@verdaccio/hooks": "7.0.0-next-7.15", + "@verdaccio/loaders": "7.0.0-next-7.15", "@verdaccio/local-storage": "10.3.4", - "@verdaccio/logger": "7.0.0-next-7.13", - "@verdaccio/middleware": "7.0.0-next-7.13", - "@verdaccio/proxy": "7.0.0-next-7.13", - "@verdaccio/search": "7.0.0-next-7.2", - "@verdaccio/signature": "7.0.0-next.3", + "@verdaccio/logger": "7.0.0-next-7.15", + "@verdaccio/middleware": "7.0.0-next-7.15", + "@verdaccio/proxy": "7.0.0-next-7.15", + "@verdaccio/search": "7.0.0-next-7.4", + "@verdaccio/signature": "7.0.0-next-7.5", "@verdaccio/streams": "10.2.1", - "@verdaccio/tarball": "12.0.0-next-7.13", - "@verdaccio/ui-theme": "7.0.0-next-7.13", - "@verdaccio/url": "12.0.0-next-7.13", - "@verdaccio/utils": "7.0.0-next-7.13", + "@verdaccio/tarball": "12.0.0-next-7.15", + "@verdaccio/ui-theme": "3.4.1", + "@verdaccio/url": "12.0.0-next-7.15", + "@verdaccio/utils": "7.0.0-next-7.15", "async": "3.2.5", "clipanion": "3.2.1", "compression": "1.7.4", @@ -53,32 +53,32 @@ "mkdirp": "1.0.4", "mv": "2.1.1", "pkginfo": "0.4.1", - "semver": "7.6.0", - "validator": "13.11.0", - "verdaccio-audit": "12.0.0-next-7.13", - "verdaccio-htpasswd": "12.0.0-next-7.13" + "semver": "7.6.2", + "validator": "13.12.0", + "verdaccio-audit": "12.0.0-next-7.15", + "verdaccio-htpasswd": "12.0.0-next-7.15" }, "devDependencies": { - "@babel/cli": "7.23.4", - "@babel/core": "7.23.7", - "@babel/eslint-parser": "7.23.3", - "@babel/node": "7.22.19", + "@babel/cli": "7.24.5", + "@babel/core": "7.24.5", + "@babel/eslint-parser": "7.24.5", + "@babel/node": "7.23.9", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/polyfill": "^7.12.1", - "@babel/preset-env": "7.23.8", - "@babel/preset-typescript": "7.23.3", + "@babel/preset-env": "7.24.5", + "@babel/preset-typescript": "7.24.1", "@babel/register": "7.23.7", - "@babel/runtime": "7.23.8", - "@octokit/rest": "20.0.2", + "@babel/runtime": "7.24.5", + "@octokit/rest": "20.1.1", "@trivago/prettier-plugin-sort-imports": "4.3.0", "@types/async": "3.2.24", "@types/express": "4.17.21", - "@types/express-serve-static-core": "4.17.42", + "@types/express-serve-static-core": "4.19.0", "@types/http-errors": "2.0.4", - "@types/jest": "29.5.11", - "@types/lodash": "4.14.202", - "@types/mime": "3.0.4", + "@types/jest": "29.5.12", + "@types/lodash": "4.17.1", + "@types/mime": "3.0.0", "@types/minimatch": "5.1.2", "@types/node": "20.11.7", "@types/semver": "7.5.6", @@ -109,13 +109,13 @@ "lockfile-lint": "4.13.2", "mockdate": "3.0.5", "nock": "13.5.0", - "prettier": "3.2.4", - "rimraf": "5.0.5", + "prettier": "3.2.5", + "rimraf": "5.0.7", "selfsigned": "2.4.1", "standard-version": "9.5.0", "supertest": "6.3.4", "ts-node": "10.9.2", - "typescript": "5.3.3", + "typescript": "5.4.5", "verdaccio-auth-memory": "10.2.2", "verdaccio-memory": "10.3.2" }, diff --git a/src/index.ts b/src/index.ts index 929743518..320649b9d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,3 @@ -export { parseConfigFile } from './lib/utils'; +export { ConfigBuilder, parseConfigFile, findConfigFile } from '@verdaccio/config'; export { startVerdaccio as default, startVerdaccio } from './lib/bootstrap'; -// Similar structure as v6 but with different functions -// this is a bridge for easy migration to v6 export { runServer } from './lib/run-server'; -export { ConfigBuilder } from '@verdaccio/config'; diff --git a/src/lib/cli/commands/init.ts b/src/lib/cli/commands/init.ts index 7049220d6..f9511b544 100644 --- a/src/lib/cli/commands/init.ts +++ b/src/lib/cli/commands/init.ts @@ -1,12 +1,11 @@ import { Command, Option } from 'clipanion'; import path from 'path'; +import { findConfigFile, parseConfigFile } from '@verdaccio/config'; import { warningUtils } from '@verdaccio/core'; import { ConfigYaml } from '@verdaccio/types'; import { listenDefaultCallback, startVerdaccio } from '../../bootstrap'; -import findConfigFile from '../../config-path'; -import { parseConfigFile } from '../../utils'; require('pkginfo')(module); const pkgVersion = module.exports.version; diff --git a/src/lib/config-path.ts b/src/lib/config-path.ts deleted file mode 100644 index 339ac24a8..000000000 --- a/src/lib/config-path.ts +++ /dev/null @@ -1,135 +0,0 @@ -import buildDebug from 'debug'; -import fs from 'fs'; -import _ from 'lodash'; -import mkdirp from 'mkdirp'; -import Path from 'path'; - -import { fileExists, folderExists } from './utils'; - -const debug = buildDebug('verdaccio:config'); - -const CONFIG_FILE = 'config.yaml'; -const XDG = 'xdg'; -const WIN = 'win'; -const WIN32 = 'win32'; -// eslint-disable-next-line -const pkgJSON = require('../../package.json'); - -export type SetupDirectory = { - path: string; - type: string; -}; - -/** - * Find and get the first config file that match. - * @return {String} the config file path - */ -function findConfigFile(configPath?: string): string { - if (typeof configPath !== 'undefined') { - return Path.resolve(configPath); - } - - const configPaths: SetupDirectory[] = getConfigPaths(); - debug('%o posible locations found', configPaths.length); - if (_.isEmpty(configPaths)) { - throw new Error('no configuration files can be processed'); - } - - const primaryConf: any = _.find(configPaths, (configLocation: any) => - fileExists(configLocation.path) - ); - if (typeof primaryConf !== 'undefined') { - debug('previous location exist already %s', primaryConf?.path); - return primaryConf.path; - } - - return createConfigFile(_.head(configPaths)).path; -} - -function createConfigFile(configLocation: any): SetupDirectory { - createConfigFolder(configLocation); - - const defaultConfig = updateStorageLinks(configLocation, readDefaultConfig()); - - fs.writeFileSync(configLocation.path, defaultConfig); - - return configLocation; -} - -function readDefaultConfig(): string { - return fs.readFileSync(require.resolve('../../conf/default.yaml'), 'utf-8'); -} - -function createConfigFolder(configLocation): void { - mkdirp.sync(Path.dirname(configLocation.path)); -} - -function updateStorageLinks(configLocation, defaultConfig): string { - if (configLocation.type !== XDG) { - return defaultConfig; - } - - // $XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored, - // If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used. - let dataDir = - process.env.XDG_DATA_HOME || Path.join(process.env.HOME as string, '.local', 'share'); - if (folderExists(dataDir)) { - dataDir = Path.resolve(Path.join(dataDir, pkgJSON.name, 'storage')); - return defaultConfig.replace(/^storage: .\/storage$/m, `storage: ${dataDir}`); - } - return defaultConfig; -} - -function getConfigPaths(): SetupDirectory[] { - const listPaths: SetupDirectory[] = [ - getXDGDirectory(), - getWindowsDirectory(), - getRelativeDefaultDirectory(), - getOldDirectory(), - ].reduce(function (acc, currentValue: any): SetupDirectory[] { - if (_.isUndefined(currentValue) === false) { - acc.push(currentValue); - } - return acc; - }, [] as SetupDirectory[]); - - return listPaths; -} - -const getXDGDirectory = (): SetupDirectory | void => { - const XDGConfig = getXDGHome() || (process.env.HOME && Path.join(process.env.HOME, '.config')); - - if (XDGConfig && folderExists(XDGConfig)) { - return { - path: Path.join(XDGConfig, pkgJSON.name, CONFIG_FILE), - type: XDG, - }; - } -}; - -const getXDGHome = (): string | void => process.env.XDG_CONFIG_HOME; - -const getWindowsDirectory = (): SetupDirectory | void => { - if (process.platform === WIN32 && process.env.APPDATA && folderExists(process.env.APPDATA)) { - return { - path: Path.resolve(Path.join(process.env.APPDATA, pkgJSON.name, CONFIG_FILE)), - type: WIN, - }; - } -}; - -const getRelativeDefaultDirectory = (): SetupDirectory => { - return { - path: Path.resolve(Path.join('.', pkgJSON.name, CONFIG_FILE)), - type: 'def', - }; -}; - -const getOldDirectory = (): SetupDirectory => { - return { - path: Path.resolve(Path.join('.', CONFIG_FILE)), - type: 'old', - }; -}; - -export default findConfigFile; diff --git a/src/lib/config.ts b/src/lib/config.ts index da7313846..08414434b 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -6,7 +6,7 @@ import { Config as ConfigCore } from '@verdaccio/config'; class Config extends ConfigCore { public constructor(config: any) { config.configPath = config.self_path; - super(config, { forceEnhancedLegacySignature: false }); + super(config, { forceMigrateToSecureLegacySignature: true }); } } diff --git a/src/lib/run-server.ts b/src/lib/run-server.ts index c5377c6c2..db655f55d 100644 --- a/src/lib/run-server.ts +++ b/src/lib/run-server.ts @@ -6,13 +6,12 @@ import https from 'https'; import _, { assign } from 'lodash'; import path from 'path'; +import { findConfigFile, parseConfigFile } from '@verdaccio/config'; import { Config, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types'; import endPointAPI from '../api/index'; import { getListListenAddresses } from './cli/utils'; -import findConfigFile from './config-path'; import { API_ERROR } from './constants'; -import { parseConfigFile } from './utils'; const debug = buildDebug('verdaccio'); diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 6c10890fa..db1b21672 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -4,7 +4,6 @@ import semver from 'semver'; import { URL } from 'url'; import validator from 'validator'; -import { parseConfigFile } from '@verdaccio/config'; // eslint-disable-next-line max-len import { errorUtils, validatioUtils } from '@verdaccio/core'; import { StringValue } from '@verdaccio/types'; @@ -472,4 +471,4 @@ export function hasLogin(config: Config) { return _.isNil(config?.web?.login) || config?.web?.login === true; } -export { buildTokenUtil as buildToken, parseConfigFile }; +export { buildTokenUtil as buildToken }; diff --git a/test/unit/modules/bootstrap/legacy.spec.ts b/test/unit/modules/bootstrap/legacy.spec.ts index 989d2d62d..ac354950a 100644 --- a/test/unit/modules/bootstrap/legacy.spec.ts +++ b/test/unit/modules/bootstrap/legacy.spec.ts @@ -1,7 +1,8 @@ import { join } from 'path'; +import { parseConfigFile } from '@verdaccio/config'; + import startVerdaccioDeault, { startVerdaccio } from '../../../../src'; -import { parseConfigFile } from '../../../../src/lib/utils'; describe('bootstrap legacy', () => { describe('startVerdaccio', () => { diff --git a/test/unit/modules/bootstrap/run-server.spec.ts b/test/unit/modules/bootstrap/run-server.spec.ts index 16594aefb..b1f563ffd 100644 --- a/test/unit/modules/bootstrap/run-server.spec.ts +++ b/test/unit/modules/bootstrap/run-server.spec.ts @@ -1,7 +1,8 @@ import { join } from 'path'; +import { parseConfigFile } from '@verdaccio/config'; + import { runServer } from '../../../../src'; -import { parseConfigFile } from '../../../../src/lib/utils'; describe('bootstrap modern', () => { describe('runServer', () => { diff --git a/test/unit/modules/cli/cli.spec.ts b/test/unit/modules/cli/cli.spec.ts index 7dc75b7c6..0532d975b 100644 --- a/test/unit/modules/cli/cli.spec.ts +++ b/test/unit/modules/cli/cli.spec.ts @@ -4,11 +4,12 @@ import os from 'os'; import path from 'path'; import selfsigned from 'selfsigned'; +import { parseConfigFile } from '@verdaccio/config'; + import startServer from '../../../../src'; import { getListListenAddresses } from '../../../../src/lib/cli/utils'; import { DEFAULT_DOMAIN, DEFAULT_PORT, DEFAULT_PROTOCOL } from '../../../../src/lib/constants'; import { setup } from '../../../../src/lib/logger'; -import { parseConfigFile } from '../../../../src/lib/utils'; import config from '../../partials/config'; setup([]); diff --git a/test/unit/modules/config/config.spec.ts b/test/unit/modules/config/config.spec.ts index 072172e77..622471adb 100644 --- a/test/unit/modules/config/config.spec.ts +++ b/test/unit/modules/config/config.spec.ts @@ -1,10 +1,11 @@ import _ from 'lodash'; import path from 'path'; +import { parseConfigFile } from '@verdaccio/config'; + import Config from '../../../../src/lib/config'; import { DEFAULT_REGISTRY, DEFAULT_UPLINK, ROLES, WEB_TITLE } from '../../../../src/lib/constants'; import { setup } from '../../../../src/lib/logger'; -import { parseConfigFile } from '../../../../src/lib/utils'; setup([]); @@ -61,7 +62,7 @@ const checkDefaultConfPackages = (config) => { expect(config.url_prefix).toBeUndefined(); expect(config.url_prefix).toBeUndefined(); expect(config.security).toEqual({ - api: { legacy: true }, + api: { legacy: true, migrateToSecureLegacySignature: true }, web: { sign: { expiresIn: '1h' }, verify: {} }, }); }; diff --git a/test/unit/modules/utils/api.__test.template.ts b/test/unit/modules/utils/api.__test.template.ts index 51e9c90a3..e189b6a48 100644 --- a/test/unit/modules/utils/api.__test.template.ts +++ b/test/unit/modules/utils/api.__test.template.ts @@ -11,9 +11,10 @@ import path from 'path'; import rimraf from 'rimraf'; import request from 'supertest'; +import { parseConfigFile } from '@verdaccio/config'; + import endPointAPI from '../../../../src/api/index'; import { setup } from '../../../../src/lib/logger'; -import { parseConfigFile } from '../../../../src/lib/utils'; import { DOMAIN_SERVERS } from '../../../functional/config.functional'; import { parseConfigurationFile } from '../../__helper'; import { addUser } from '../../__helper/api'; diff --git a/tsconfig.json b/tsconfig.json index 0cab61345..a4fbdafe6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,8 +11,8 @@ "rootDir": "./src", "outDir": "./build", "allowSyntheticDefaultImports": true, - "esModuleInterop": true, + "esModuleInterop": true }, "exclude": ["node_modules", "**/*.spec.ts"], - "include": ["src/**/*.ts", "types/*.d.ts"], + "include": ["src/**/*.ts", "types/*.d.ts"] } diff --git a/yarn.lock b/yarn.lock index 96e955823416960f83b6f90b1348f36b756f2fb3..e99c042707530073258d04dc8eddacef7248caa9 100644 GIT binary patch delta 28343 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

+garpvgF27}pl_izN6ZTtjgT);9*EMI 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 D