Skip to content

Commit 3576b5e

Browse files
fix: testrepoconnect v2 w admin route (#1001)
Co-authored-by: Ferruh <63190600+ferruhcihan@users.noreply.github.com>
1 parent 25bfd5e commit 3576b5e

6 files changed

Lines changed: 92 additions & 30 deletions

File tree

src/api.authz.test.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -772,15 +772,30 @@ describe('API authz tests', () => {
772772
.expect('Content-Type', /json/)
773773
})
774774

775-
test('team member can test code repository url', async () => {
776-
jest.spyOn(otomiStack, 'getTestRepoConnect').mockResolvedValue({})
775+
test('team member can test own code repository url', async () => {
776+
jest.spyOn(otomiStack, 'getTestRepoConnect').mockResolvedValue({ status: 'success' })
777+
777778
await agent
778-
.get(`/v1/testRepoConnect`)
779-
.query({ url: data.repositoryUrl })
779+
.get(`/v2/teams/${teamId}/coderepos/testRepoConnect`)
780+
.query({
781+
url: data.repositoryUrl,
782+
})
780783
.set('Authorization', `Bearer ${teamMemberToken}`)
781784
.expect(200)
782785
})
783786

787+
test('team member cannot test other team code repository url', async () => {
788+
jest.spyOn(otomiStack, 'getTestRepoConnect').mockResolvedValue({ status: 'success' })
789+
790+
await agent
791+
.get(`/v2/teams/${otherTeamId}/coderepos/testRepoConnect`)
792+
.query({
793+
url: data.repositoryUrl,
794+
})
795+
.set('Authorization', `Bearer ${teamMemberToken}`)
796+
.expect(403)
797+
})
798+
784799
test('team member can get own internal repository urls', async () => {
785800
jest.spyOn(otomiStack, 'getInternalRepoUrls').mockResolvedValue([])
786801

src/api/v1/testRepoConnect.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Debug from 'debug'
2+
import { Response } from 'express'
3+
import { OpenApiRequestExt } from 'src/otomi-models'
4+
5+
const debug = Debug('otomi:api:v2:testRepoConnect')
6+
7+
/**
8+
* GET /v2/teams/{teamId}/coderepos/testRepoConnect
9+
* Test repository connection
10+
*/
11+
export const getTestRepoConnect = async (req: OpenApiRequestExt, res: Response): Promise<void> => {
12+
debug('getTestRepoConnect', { params: req.params, query: req.query })
13+
14+
const { teamId } = req.params as { teamId: string }
15+
const { url, secretName } = req.query as { url: string; secretName?: string }
16+
17+
const result = await req.otomi.getTestRepoConnect(url, teamId, secretName || '')
18+
19+
res.json(result)
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Debug from 'debug'
2+
import { Response } from 'express'
3+
import { OpenApiRequestExt } from 'src/otomi-models'
4+
5+
const debug = Debug('otomi:api:v2:testRepoConnect')
6+
7+
/**
8+
* GET /v2/testRepoConnectPlatform
9+
* Test repository connection as platform admin
10+
*/
11+
export const getTestRepoConnectPlatform = async (req: OpenApiRequestExt, res: Response): Promise<void> => {
12+
debug('testRepoConnectPlatform', req.query)
13+
14+
const { url, secret } = req.query as {
15+
url: string
16+
secret?: string
17+
}
18+
19+
res.json(await req.otomi.getTestRepoConnect(url, 'admin', secret || ''))
20+
}

src/openapi/api.yaml

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2721,26 +2721,50 @@ paths:
27212721
'404':
27222722
$ref: '#/components/responses/NotFound'
27232723

2724-
/v1/testRepoConnect:
2724+
/v2/testRepoConnectPlatform:
27252725
get:
2726-
operationId: testRepoConnect
2727-
x-eov-operation-handler: v1/testRepoConnect
2728-
description: Get test repo connect information from the git providers.
2726+
operationId: getTestRepoConnectPlatform
2727+
x-eov-operation-handler: v2/testRepoConnectPlatform
2728+
description: Test repository connection as platform admin
27292729
x-aclSchema: TestRepoConnect
27302730
parameters:
27312731
- name: url
27322732
in: query
2733-
description: URL of the repository
2733+
required: true
27342734
schema:
27352735
type: string
2736-
- name: teamId
2736+
- name: secret
27372737
in: query
2738-
description: Id of the team
27392738
schema:
27402739
type: string
2741-
- name: secret
2740+
responses:
2741+
'400':
2742+
$ref: '#/components/responses/BadRequest'
2743+
'404':
2744+
$ref: '#/components/responses/NotFound'
2745+
'200':
2746+
description: The request is successful.
2747+
content:
2748+
application/json:
2749+
schema:
2750+
$ref: '#/components/schemas/TestRepoConnect'
2751+
2752+
/v2/teams/{teamId}/coderepos/testRepoConnect:
2753+
parameters:
2754+
- $ref: '#/components/parameters/teamParams'
2755+
get:
2756+
operationId: getTestRepoConnect
2757+
x-eov-operation-handler: v2/teams/{teamId}/coderepos/testRepoConnect
2758+
description: Test repository connection
2759+
x-aclSchema: CodeRepo
2760+
parameters:
2761+
- name: url
2762+
in: query
2763+
required: true
2764+
schema:
2765+
type: string
2766+
- name: secretName
27422767
in: query
2743-
description: Name of the secret for private repositories
27442768
schema:
27452769
type: string
27462770
responses:

src/openapi/testrepoconnect.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
TestRepoConnect:
22
x-acl:
33
platformAdmin: [read-any]
4-
teamAdmin: [read-any]
5-
teamMember: [read-any]
64
properties:
75
url:
86
$ref: 'definitions.yaml#/url'

0 commit comments

Comments
 (0)