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