feat(core): Add SSH key generation (#6006)

* basic prefs and ssh key generation

* review change

* cleanup save

* lint fix
This commit is contained in:
Michael Auerswald
2023-04-19 17:46:10 +02:00
committed by GitHub
parent 953198e092
commit 71ed1f410c
18 changed files with 313 additions and 19 deletions

View File

@@ -0,0 +1,38 @@
import { Container } from 'typedi';
import type { SuperAgentTest } from 'supertest';
import type { User } from '@db/entities/User';
import { License } from '@/License';
import * as testDb from '../shared/testDb';
import * as utils from '../shared/utils';
import { VersionControlService } from '../../../src/environments/versionControl/versionControl.service.ee';
let owner: User;
let authOwnerAgent: SuperAgentTest;
beforeAll(async () => {
Container.get(License).isVersionControlLicensed = () => true;
const app = await utils.initTestServer({ endpointGroups: ['versionControl'] });
owner = await testDb.createOwner();
authOwnerAgent = utils.createAuthAgent(app)(owner);
});
afterAll(async () => {
await testDb.terminate();
});
describe('GET /versionControl/preferences', () => {
test('should return Version Control preferences', async () => {
await Container.get(VersionControlService).generateAndSaveKeyPair();
await authOwnerAgent
.get('/versionControl/preferences')
.expect(200)
.expect((res) => {
return (
'privateKey' in res.body &&
'publicKey' in res.body &&
res.body.publicKey.includes('ssh-ed25519') &&
res.body.privateKey.includes('BEGIN OPENSSH PRIVATE KEY')
);
});
});
});

View File

@@ -23,6 +23,7 @@ type EndpointGroup =
| 'nodes'
| 'ldap'
| 'saml'
| 'versionControl'
| 'eventBus'
| 'license'
| 'variables';

View File

@@ -82,6 +82,8 @@ import { SamlService } from '@/sso/saml/saml.service.ee';
import { SamlController } from '@/sso/saml/routes/saml.controller.ee';
import { EventBusController } from '@/eventbus/eventBus.controller';
import { License } from '@/License';
import { VersionControlService } from '@/environments/versionControl/versionControl.service.ee';
import { VersionControlController } from '@/environments/versionControl/versionControl.controller.ee';
export const mockInstance = <T>(
ctor: new (...args: any[]) => T,
@@ -202,6 +204,14 @@ export async function initTestServer({
const samlService = Container.get(SamlService);
registerController(testServer.app, config, new SamlController(samlService));
break;
case 'versionControl':
const versionControlService = Container.get(VersionControlService);
registerController(
testServer.app,
config,
new VersionControlController(versionControlService),
);
break;
case 'nodes':
registerController(
testServer.app,

View File

@@ -0,0 +1,11 @@
import { generateSshKeyPair } from '../../src/environments/versionControl/versionControlHelper';
describe('Version Control', () => {
it('should generate an SSH key pair', () => {
const keyPair = generateSshKeyPair();
expect(keyPair.privateKey).toBeTruthy();
expect(keyPair.privateKey).toContain('BEGIN OPENSSH PRIVATE KEY');
expect(keyPair.publicKey).toBeTruthy();
expect(keyPair.publicKey).toContain('ssh-ed25519');
});
});