Skip to content

Commit f54fdfe

Browse files
feat: remove v1 endpoints (#1006)
* feat: removed coderepo v1 * feat: removed v1 builds * feat: remove v1 netpols * feat: remove v1 sealedsecrets * feat: remove v1 services * feat: remove v1 workloads * feat: removed v1 teams --------- Co-authored-by: svcAPLBot <174728082+svcAPLBot@users.noreply.github.com>
1 parent 25eca1a commit f54fdfe

41 files changed

Lines changed: 356 additions & 2597 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/api-v2.authz.test.ts

Lines changed: 126 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,47 +103,47 @@ describe('API V2 authz tests', () => {
103103
'getAplTeams',
104104
'getAplTeam',
105105
'editAplTeam',
106-
'deleteTeam',
106+
'deleteAplTeam',
107107
// Services
108108
'createAplService',
109109
'getAplService',
110110
'editAplService',
111-
'deleteService',
111+
'deleteAplService',
112112
'getAllAplServices',
113113
'getTeamAplServices',
114114
// Workloads
115115
'createAplWorkload',
116116
'getAplWorkload',
117117
'editAplWorkload',
118-
'deleteWorkload',
118+
'deleteAplWorkload',
119119
'getAllAplWorkloads',
120120
'getTeamAplWorkloads',
121121
// Sealed Secrets
122122
'createAplSealedSecret',
123123
'getAplSealedSecret',
124124
'editAplSealedSecret',
125-
'deleteSealedSecret',
125+
'deleteAplSealedSecret',
126126
'getAllAplSealedSecrets',
127127
'getAplSealedSecrets',
128128
// Code Repos
129129
'createAplCodeRepo',
130130
'getAplCodeRepo',
131131
'editAplCodeRepo',
132-
'deleteCodeRepo',
132+
'deleteAplCodeRepo',
133133
'getAllAplCodeRepos',
134134
'getTeamAplCodeRepos',
135135
// Builds
136136
'createAplBuild',
137137
'getAplBuild',
138138
'editAplBuild',
139-
'deleteBuild',
139+
'deleteAplBuild',
140140
'getAllAplBuilds',
141141
'getTeamAplBuilds',
142142
// Network Policies
143143
'createAplNetpol',
144144
'getAplNetpol',
145145
'editAplNetpol',
146-
'deleteNetpol',
146+
'deleteAplNetpol',
147147
'getAllAplNetpols',
148148
'getTeamAplNetpols',
149149
// Policies
@@ -155,7 +155,7 @@ describe('API V2 authz tests', () => {
155155
'connectCloudtty',
156156
'deleteCloudtty',
157157
// Other
158-
'createTeam',
158+
'createAplTeam',
159159
// Git migration
160160
'migrateGitSettings',
161161
// API status
@@ -180,6 +180,50 @@ describe('API V2 authz tests', () => {
180180
})
181181
}
182182
})
183+
184+
const team1 = {
185+
kind: 'AplTeamSettingSet',
186+
metadata: {
187+
name: 'team1',
188+
labels: {
189+
'apl.io/teamId': 'team1',
190+
},
191+
},
192+
spec: {
193+
selfService: {
194+
teamMembers: {
195+
createServices: true,
196+
editSecurityPolicies: true,
197+
},
198+
},
199+
},
200+
}
201+
202+
const team2 = {
203+
kind: 'AplTeamSettingSet',
204+
metadata: {
205+
name: 'team2',
206+
labels: {
207+
'apl.io/teamId': 'team2',
208+
},
209+
},
210+
spec: {
211+
selfService: {
212+
teamMembers: {
213+
createServices: false,
214+
editSecurityPolicies: false,
215+
},
216+
},
217+
},
218+
}
219+
220+
jest.spyOn(otomiStack, 'getAplTeams').mockReturnValue([team1, team2] as any)
221+
222+
jest.spyOn(otomiStack, 'getAplTeam').mockImplementation((teamId: string) => {
223+
if (teamId === 'team1') return team1 as any
224+
if (teamId === 'team2') return team2 as any
225+
throw new Error(`Team ${teamId} not found`)
226+
})
183227
})
184228

185229
describe('V2 Team Endpoints', () => {
@@ -678,6 +722,54 @@ describe('API V2 authz tests', () => {
678722
})
679723
})
680724

725+
describe('Code repository utility endpoints', () => {
726+
const data = {
727+
repositoryUrl: 'github.com/buildpacks/samples',
728+
}
729+
730+
test('team member can test own code repository url', async () => {
731+
jest.spyOn(otomiStack, 'getTestRepoConnect').mockResolvedValue({ status: 'success' })
732+
733+
await agent
734+
.get('/v2/teams/team1/coderepos/testRepoConnect')
735+
.query({
736+
url: data.repositoryUrl,
737+
})
738+
.set('Authorization', `Bearer ${teamMemberToken}`)
739+
.expect(200)
740+
})
741+
742+
test('team member cannot test other team code repository url', async () => {
743+
jest.spyOn(otomiStack, 'getTestRepoConnect').mockResolvedValue({ status: 'success' })
744+
745+
await agent
746+
.get('/v2/teams/team2/coderepos/testRepoConnect')
747+
.query({
748+
url: data.repositoryUrl,
749+
})
750+
.set('Authorization', `Bearer ${teamMemberToken}`)
751+
.expect(403)
752+
})
753+
754+
test('team member can get own internal repository urls', async () => {
755+
jest.spyOn(otomiStack, 'getInternalRepoUrls').mockResolvedValue([])
756+
757+
await agent
758+
.get('/v2/teams/team1/internalRepoUrls')
759+
.set('Authorization', `Bearer ${teamMemberToken}`)
760+
.expect(200)
761+
})
762+
763+
test('team member cannot get other internal repository urls', async () => {
764+
jest.spyOn(otomiStack, 'getInternalRepoUrls').mockResolvedValue([])
765+
766+
await agent
767+
.get('/v2/teams/team2/internalRepoUrls')
768+
.set('Authorization', `Bearer ${teamMemberToken}`)
769+
.expect(403)
770+
})
771+
})
772+
681773
describe('Cross-Team Access Denial', () => {
682774
test('team member cannot create code repo in other team', async () => {
683775
await agent
@@ -999,11 +1091,19 @@ describe('API V2 authz tests', () => {
9991091
.expect(200)
10001092
})
10011093

1002-
test('team member cannot update policy', async () => {
1094+
test('team member can update policy', async () => {
10031095
await agent
10041096
.put('/v2/teams/team1/policies/disallow-selinux')
10051097
.send(policyData)
10061098
.set('Authorization', `Bearer ${teamMemberToken}`)
1099+
.expect(200)
1100+
})
1101+
1102+
test('team member cannot update policy', async () => {
1103+
await agent
1104+
.put('/v2/teams/team2/policies/disallow-selinux')
1105+
.send(policyData)
1106+
.set('Authorization', `Bearer ${teamMemberToken}`)
10071107
.expect(403)
10081108
})
10091109

@@ -1177,15 +1277,25 @@ describe('API V2 authz tests', () => {
11771277
})
11781278

11791279
test('team member cannot create its own services when disabled', async () => {
1180-
jest.spyOn(otomiStack, 'createService').mockResolvedValue({} as any)
1280+
jest.spyOn(otomiStack, 'createAplService').mockResolvedValue({} as any)
1281+
11811282
await agent
1182-
.post('/v1/teams/team2/services')
1283+
.post('/v2/teams/team2/services')
11831284
.send({
1184-
name: 'newservice',
1185-
serviceType: 'ksvcPredeployed',
1186-
ingress: { type: 'cluster' },
1187-
networkPolicy: {
1188-
ingressPrivate: { mode: 'DenyAll' },
1285+
kind: 'AplTeamService',
1286+
metadata: {
1287+
name: 'newservice',
1288+
},
1289+
spec: {
1290+
serviceType: 'ksvcPredeployed',
1291+
ingress: {
1292+
type: 'cluster',
1293+
},
1294+
networkPolicy: {
1295+
ingressPrivate: {
1296+
mode: 'DenyAll',
1297+
},
1298+
},
11891299
},
11901300
})
11911301
.set('Content-Type', 'application/json')

0 commit comments

Comments
 (0)