2023-03-09 20:49:35 +08:00
|
|
|
import * as io from '@actions/io';
|
2021-08-23 16:31:06 +08:00
|
|
|
import * as core from '@actions/core';
|
2023-03-09 20:49:35 +08:00
|
|
|
import * as fs from 'fs';
|
|
|
|
import * as path from 'path';
|
2021-04-05 18:02:27 +08:00
|
|
|
import os from 'os';
|
2019-11-16 08:01:13 +08:00
|
|
|
|
|
|
|
import * as auth from '../src/auth';
|
2023-03-09 20:49:35 +08:00
|
|
|
import {M2_DIR, MVN_SETTINGS_FILE} from '../src/constants';
|
2019-11-16 08:01:13 +08:00
|
|
|
|
2022-01-17 00:33:29 +08:00
|
|
|
const m2Dir = path.join(__dirname, M2_DIR);
|
|
|
|
const settingsFile = path.join(m2Dir, MVN_SETTINGS_FILE);
|
2019-11-21 02:25:21 +08:00
|
|
|
|
2019-11-16 08:01:13 +08:00
|
|
|
describe('auth tests', () => {
|
2021-04-05 18:02:27 +08:00
|
|
|
let spyOSHomedir: jest.SpyInstance;
|
2021-08-23 16:31:06 +08:00
|
|
|
let spyInfo: jest.SpyInstance;
|
2021-04-05 18:02:27 +08:00
|
|
|
|
2019-11-21 02:25:21 +08:00
|
|
|
beforeEach(async () => {
|
2019-11-16 08:01:13 +08:00
|
|
|
await io.rmRF(m2Dir);
|
2021-04-05 18:02:27 +08:00
|
|
|
spyOSHomedir = jest.spyOn(os, 'homedir');
|
|
|
|
spyOSHomedir.mockReturnValue(__dirname);
|
2021-08-23 16:31:06 +08:00
|
|
|
spyInfo = jest.spyOn(core, 'info');
|
|
|
|
spyInfo.mockImplementation(() => null);
|
2019-11-16 08:01:13 +08:00
|
|
|
}, 300000);
|
|
|
|
|
|
|
|
afterAll(async () => {
|
|
|
|
try {
|
|
|
|
await io.rmRF(m2Dir);
|
|
|
|
} catch {
|
|
|
|
console.log('Failed to remove test directories');
|
|
|
|
}
|
2021-04-05 18:02:27 +08:00
|
|
|
jest.resetAllMocks();
|
|
|
|
jest.clearAllMocks();
|
|
|
|
jest.restoreAllMocks();
|
2019-11-16 08:01:13 +08:00
|
|
|
}, 100000);
|
|
|
|
|
2019-12-11 02:03:33 +08:00
|
|
|
it('creates settings.xml in alternate locations', async () => {
|
|
|
|
const id = 'packages';
|
2019-12-20 03:28:11 +08:00
|
|
|
const username = 'UNAMI';
|
|
|
|
const password = 'TOLKIEN';
|
2019-12-11 02:03:33 +08:00
|
|
|
|
|
|
|
const altHome = path.join(__dirname, 'runner', 'settings');
|
2022-01-17 00:33:29 +08:00
|
|
|
const altSettingsFile = path.join(altHome, MVN_SETTINGS_FILE);
|
2019-12-11 02:03:33 +08:00
|
|
|
await io.rmRF(altHome); // ensure it doesn't already exist
|
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
await auth.createAuthenticationSettings(
|
|
|
|
id,
|
|
|
|
username,
|
|
|
|
password,
|
|
|
|
altHome,
|
|
|
|
true
|
|
|
|
);
|
2019-12-11 02:03:33 +08:00
|
|
|
|
|
|
|
expect(fs.existsSync(m2Dir)).toBe(false);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(false);
|
|
|
|
|
|
|
|
expect(fs.existsSync(altHome)).toBe(true);
|
|
|
|
expect(fs.existsSync(altSettingsFile)).toBe(true);
|
|
|
|
expect(fs.readFileSync(altSettingsFile, 'utf-8')).toEqual(
|
|
|
|
auth.generate(id, username, password)
|
|
|
|
);
|
|
|
|
|
|
|
|
await io.rmRF(altHome);
|
|
|
|
}, 100000);
|
|
|
|
|
2020-05-02 19:33:15 +08:00
|
|
|
it('creates settings.xml with minimal configuration', async () => {
|
2019-11-29 04:40:08 +08:00
|
|
|
const id = 'packages';
|
2019-12-20 03:28:11 +08:00
|
|
|
const username = 'UNAME';
|
|
|
|
const password = 'TOKEN';
|
2019-11-16 08:01:13 +08:00
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
await auth.createAuthenticationSettings(
|
|
|
|
id,
|
|
|
|
username,
|
|
|
|
password,
|
|
|
|
m2Dir,
|
|
|
|
true
|
|
|
|
);
|
2019-11-16 08:01:13 +08:00
|
|
|
|
|
|
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
2023-03-09 20:49:35 +08:00
|
|
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
|
|
|
auth.generate(id, username, password)
|
|
|
|
);
|
2019-11-16 08:01:13 +08:00
|
|
|
}, 100000);
|
2019-11-21 02:25:21 +08:00
|
|
|
|
2020-05-02 19:33:15 +08:00
|
|
|
it('creates settings.xml with additional configuration', async () => {
|
2019-12-07 03:46:35 +08:00
|
|
|
const id = 'packages';
|
2020-05-02 19:33:15 +08:00
|
|
|
const username = 'UNAME';
|
|
|
|
const password = 'TOKEN';
|
|
|
|
const gpgPassphrase = 'GPG';
|
2019-12-07 03:46:35 +08:00
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
await auth.createAuthenticationSettings(
|
|
|
|
id,
|
|
|
|
username,
|
|
|
|
password,
|
|
|
|
m2Dir,
|
|
|
|
true,
|
|
|
|
gpgPassphrase
|
|
|
|
);
|
2019-12-07 03:46:35 +08:00
|
|
|
|
|
|
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
|
|
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
2020-05-02 19:33:15 +08:00
|
|
|
auth.generate(id, username, password, gpgPassphrase)
|
2019-12-07 03:46:35 +08:00
|
|
|
);
|
|
|
|
}, 100000);
|
|
|
|
|
2020-05-02 19:33:15 +08:00
|
|
|
it('overwrites existing settings.xml files', async () => {
|
|
|
|
const id = 'packages';
|
|
|
|
const username = 'USERNAME';
|
|
|
|
const password = 'PASSWORD';
|
2019-11-29 04:40:08 +08:00
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
fs.mkdirSync(m2Dir, {recursive: true});
|
2020-05-02 19:33:15 +08:00
|
|
|
fs.writeFileSync(settingsFile, 'FAKE FILE');
|
2019-12-20 03:28:11 +08:00
|
|
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
2019-11-29 04:40:08 +08:00
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
await auth.createAuthenticationSettings(
|
|
|
|
id,
|
|
|
|
username,
|
|
|
|
password,
|
|
|
|
m2Dir,
|
|
|
|
true
|
|
|
|
);
|
2019-11-21 02:25:21 +08:00
|
|
|
|
2019-12-20 03:28:11 +08:00
|
|
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
2023-03-09 20:49:35 +08:00
|
|
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
|
|
|
auth.generate(id, username, password)
|
|
|
|
);
|
2021-04-05 18:02:27 +08:00
|
|
|
}, 100000);
|
|
|
|
|
|
|
|
it('does not overwrite existing settings.xml files', async () => {
|
|
|
|
const id = 'packages';
|
|
|
|
const username = 'USERNAME';
|
|
|
|
const password = 'PASSWORD';
|
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
fs.mkdirSync(m2Dir, {recursive: true});
|
2021-04-05 18:02:27 +08:00
|
|
|
fs.writeFileSync(settingsFile, 'FAKE FILE');
|
|
|
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
await auth.createAuthenticationSettings(
|
|
|
|
id,
|
|
|
|
username,
|
|
|
|
password,
|
|
|
|
m2Dir,
|
|
|
|
false
|
|
|
|
);
|
2021-04-05 18:02:27 +08:00
|
|
|
|
|
|
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
|
|
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
|
|
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual('FAKE FILE');
|
2019-11-21 02:25:21 +08:00
|
|
|
}, 100000);
|
2019-12-11 01:26:51 +08:00
|
|
|
|
2020-05-02 19:33:15 +08:00
|
|
|
it('generates valid settings.xml with minimal configuration', () => {
|
2019-12-11 01:26:51 +08:00
|
|
|
const id = 'packages';
|
2019-12-20 03:28:11 +08:00
|
|
|
const username = 'USER';
|
2019-12-11 01:26:51 +08:00
|
|
|
const password = '&<>"\'\'"><&';
|
|
|
|
|
2020-05-02 19:33:15 +08:00
|
|
|
const expectedSettings = `<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
|
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
|
|
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
|
|
|
|
<servers>
|
|
|
|
<server>
|
|
|
|
<id>${id}</id>
|
|
|
|
<username>\${env.${username}}</username>
|
|
|
|
<password>\${env.&<>"''"><&}</password>
|
|
|
|
</server>
|
|
|
|
</servers>
|
|
|
|
</settings>`;
|
|
|
|
|
|
|
|
expect(auth.generate(id, username, password)).toEqual(expectedSettings);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('generates valid settings.xml with additional configuration', () => {
|
|
|
|
const id = 'packages';
|
|
|
|
const username = 'USER';
|
|
|
|
const password = '&<>"\'\'"><&';
|
|
|
|
const gpgPassphrase = 'PASSPHRASE';
|
|
|
|
|
|
|
|
const expectedSettings = `<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
|
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
|
|
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
|
|
|
|
<servers>
|
|
|
|
<server>
|
|
|
|
<id>${id}</id>
|
|
|
|
<username>\${env.${username}}</username>
|
|
|
|
<password>\${env.&<>"''"><&}</password>
|
|
|
|
</server>
|
|
|
|
<server>
|
|
|
|
<id>gpg.passphrase</id>
|
|
|
|
<passphrase>\${env.${gpgPassphrase}}</passphrase>
|
|
|
|
</server>
|
|
|
|
</servers>
|
|
|
|
</settings>`;
|
|
|
|
|
2023-03-09 20:49:35 +08:00
|
|
|
expect(auth.generate(id, username, password, gpgPassphrase)).toEqual(
|
|
|
|
expectedSettings
|
|
|
|
);
|
2019-12-11 01:26:51 +08:00
|
|
|
});
|
2019-11-16 08:01:13 +08:00
|
|
|
});
|