Skip to content

Commit 01a6a15

Browse files
committed
feat(sonarrqube): make admin group path configurable though console
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
1 parent 4d8a2f4 commit 01a6a15

4 files changed

Lines changed: 31 additions & 12 deletions

File tree

packages/shared/src/utils/const.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export const adminGroupPath = '/console/admin'
21
export const deleteValidationInput = 'DELETE'
32
export const forbiddenRepoNames = ['mirror', 'infra-apps', 'infra-observability']
43

plugins/sonarqube/src/functions.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { adminGroupPath } from '@cpn-console/shared'
21
import type { Project, StepCall } from '@cpn-console/hooks'
32
import { generateProjectKey, parseError } from '@cpn-console/hooks'
43
import type { VaultProjectApi } from '@cpn-console/vault-plugin/types/vault-project-api.js'
@@ -27,13 +26,17 @@ const projectPermissions = [
2726
'user',
2827
]
2928

30-
export async function initSonar() {
29+
export async function initSonar(config?: { adminGroupPath?: string }) {
30+
const adminGroupPath = config?.adminGroupPath
31+
if (!adminGroupPath) {
32+
throw new Error('adminGroupPath is required')
33+
}
3134
await setTemplatePermisions()
32-
await createAdminGroup()
33-
await setAdminPermisions()
35+
await createAdminGroup(adminGroupPath)
36+
await setAdminPermisions(adminGroupPath)
3437
}
3538

36-
async function createAdminGroup() {
39+
async function createAdminGroup(adminGroupPath: string) {
3740
const axiosInstance = getAxiosInstance()
3841
const adminGroup = await findGroupByName(adminGroupPath)
3942
if (!adminGroup) {
@@ -48,7 +51,7 @@ async function createAdminGroup() {
4851
}
4952
}
5053

51-
async function setAdminPermisions() {
54+
async function setAdminPermisions(adminGroupPath: string) {
5255
const axiosInstance = getAxiosInstance()
5356
for (const permission of globalPermissions) {
5457
await axiosInstance({

plugins/sonarqube/src/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import type { HookStepsNames, Plugin } from '@cpn-console/hooks'
1+
import type { DeclareModuleGenerator, HookStepsNames, Plugin } from '@cpn-console/hooks'
22
import { getStatus } from './check.js'
33
import { deleteProject, initSonar, setVariables, upsertProject } from './functions.js'
44
import infos from './infos.js'
55
import monitor from './monitor.js'
66

7-
function start(_options: unknown) {
7+
function start(options: unknown) {
8+
const config = (options as any)?.config?.sonarqube?.global
89
try {
9-
initSonar()
10+
initSonar(config)
1011
getStatus()
1112
} catch (_error) {}
1213
}
@@ -34,4 +35,5 @@ declare module '@cpn-console/hooks' {
3435
interface PluginResult {
3536
errors?: Partial<Record<HookStepsNames, unknown>>
3637
}
38+
interface Config extends DeclareModuleGenerator<typeof infos, 'global'> {}
3739
}

plugins/sonarqube/src/infos.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
import type { ServiceInfos } from '@cpn-console/hooks'
22
import { getConfig } from './tech.js'
33

4-
const infos: ServiceInfos = {
4+
const infos = {
55
name: 'sonarqube',
66
to: () => `${getConfig().url}/projects`,
77
title: 'SonarQube',
88
imgSrc: '/img/sonarqube.svg',
99
description: 'SonarQube permet à tous les développeurs d\'écrire un code plus propre et plus sûr',
10-
}
10+
config: {
11+
global: [{
12+
kind: 'text',
13+
key: 'adminGroupPath',
14+
permissions: {
15+
admin: { read: true, write: true },
16+
user: { read: false, write: false },
17+
},
18+
title: 'Chemin du groupe OIDC Admin',
19+
value: '/console/admin',
20+
description: 'Le chemin du groupe OIDC qui donne les droits d\'administrateur SonarQube',
21+
placeholder: '/console/admin',
22+
}],
23+
project: [],
24+
},
25+
} as const satisfies ServiceInfos
1126

1227
export default infos

0 commit comments

Comments
 (0)