Skip to content

Commit 0d356f4

Browse files
committed
fix(permissions): fix permissions on repository/builds section
1 parent 16df217 commit 0d356f4

File tree

6 files changed

+240
-207
lines changed

6 files changed

+240
-207
lines changed

src/api/db/build.ts

Lines changed: 89 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ export function getBuilds(
1212
.query(q => {
1313
if (userId) {
1414
q.innerJoin('repositories', 'repositories.id', 'builds.repositories_id')
15-
.innerJoin('permissions', 'permissions.repositories_id', 'repositories.id')
16-
.where('permissions.users_id', userId)
17-
.andWhere(function() {
18-
this.where('permissions.permission', true).orWhere('repositories.public', true);
19-
});
15+
.innerJoin('permissions', 'permissions.repositories_id', 'repositories.id')
16+
.where('permissions.users_id', userId)
17+
.andWhere(function () {
18+
this.where('permissions.permission', true).orWhere('repositories.public', true);
19+
});
2020
} else {
2121
q.innerJoin('repositories', 'repositories.id', 'builds.repositories_id')
22-
.where('repositories.public', true);
22+
.where('repositories.public', true);
2323
}
2424

2525
if (filter === 'pr') {
@@ -29,10 +29,10 @@ export function getBuilds(
2929
}
3030

3131
q.orderBy('id', 'DESC')
32-
.offset(offset)
33-
.limit(limit);
32+
.offset(offset)
33+
.limit(limit);
3434
})
35-
.fetchAll({ withRelated: ['repository.permissions', 'jobs.runs' ]})
35+
.fetchAll({ withRelated: ['repository.permissions', 'jobs.runs'] })
3636
.then(builds => {
3737
if (!builds) {
3838
reject();
@@ -48,6 +48,7 @@ export function getBuilds(
4848
job.status = job.runs[job.runs.length - 1].status;
4949
}
5050

51+
delete job.runs;
5152
return job;
5253
});
5354

@@ -75,17 +76,19 @@ export function getBuild(id: number, userId?: number): Promise<any> {
7576
return new Promise((resolve, reject) => {
7677
new Build()
7778
.query(q => q.where('id', id))
78-
.fetch({ withRelated: [{'repository.permissions': (query) => {
79+
.fetch({
80+
withRelated: [{
81+
'repository.permissions': (query) => {
7982
if (userId) {
8083
query.where('permissions.users_id', userId)
81-
.andWhere('permissions.permission', true)
82-
.orWhere('public', true);
84+
.andWhere('permissions.permission', true)
85+
.orWhere('public', true);
8386
}
8487
}
8588
},
86-
'repository.access_token',
87-
'jobs.runs',
88-
'runs.job_runs']
89+
'repository.access_token',
90+
'jobs.runs',
91+
'runs.job_runs']
8992
})
9093
.then(build => {
9194
if (!build) {
@@ -140,13 +143,13 @@ export function getBuild(id: number, userId?: number): Promise<any> {
140143
new BuildRun()
141144
.query(q => {
142145
q.innerJoin('builds', 'builds.id', 'build_runs.build_id')
143-
.where('builds.repositories_id', build.repositories_id)
144-
.andWhere('builds.id', '<=', build.id)
145-
.whereNotNull('build_runs.start_time')
146-
.whereNotNull('build_runs.end_time')
147-
.orderBy('build_runs.id', 'desc');
146+
.where('builds.repositories_id', build.repositories_id)
147+
.andWhere('builds.id', '<=', build.id)
148+
.whereNotNull('build_runs.start_time')
149+
.whereNotNull('build_runs.end_time')
150+
.orderBy('build_runs.id', 'desc');
148151
})
149-
.fetch({ withRelated: 'job_runs'})
152+
.fetch({ withRelated: 'job_runs' })
150153
.then(lastBuild => {
151154
if (lastBuild) {
152155
build.lastBuild = lastBuild.toJSON();
@@ -165,45 +168,48 @@ export function getBuild(id: number, userId?: number): Promise<any> {
165168
export function getLastBuild(userId?: number): Promise<any> {
166169
return new Promise((resolve, reject) => {
167170
new Build().query(q => q.orderBy('id', 'desc'))
168-
.fetch({ withRelated: [{'repository.permissions': (query) => {
169-
if (userId) {
170-
query.where('permissions.users_id', userId)
171-
.andWhere('permissions.permission', true)
172-
.orWhere('public', true);
171+
.fetch({
172+
withRelated: [{
173+
'repository.permissions': (query) => {
174+
if (userId) {
175+
query.where('permissions.users_id', userId)
176+
.andWhere('permissions.permission', true)
177+
.orWhere('public', true);
178+
}
173179
}
180+
},
181+
'jobs.runs']
182+
})
183+
.then(build => {
184+
if (!build) {
185+
reject(build);
174186
}
175-
},
176-
'jobs.runs']})
177-
.then(build => {
178-
if (!build) {
179-
reject(build);
180-
}
181187

182-
build = build.toJSON();
183-
build.jobs = build.jobs.map(job => {
184-
if (job.runs.length > 0) {
185-
job.end_time = job.runs[job.runs.length - 1].end_time;
186-
job.start_time = job.runs[job.runs.length - 1].start_time;
187-
job.status = job.runs[job.runs.length - 1].status;
188-
}
188+
build = build.toJSON();
189+
build.jobs = build.jobs.map(job => {
190+
if (job.runs.length > 0) {
191+
job.end_time = job.runs[job.runs.length - 1].end_time;
192+
job.start_time = job.runs[job.runs.length - 1].start_time;
193+
job.status = job.runs[job.runs.length - 1].status;
194+
}
189195

190-
return job;
191-
});
196+
return job;
197+
});
192198

193-
userId = parseInt(<any>userId, 10);
194-
if (build.repository.permissions && build.repository.permissions.length) {
195-
let index = build.repository.permissions.findIndex(p => p.users_id === userId);
196-
if (index !== -1 && build.repository.permissions[index].permission) {
197-
build.hasPermission = true;
199+
userId = parseInt(<any>userId, 10);
200+
if (build.repository.permissions && build.repository.permissions.length) {
201+
let index = build.repository.permissions.findIndex(p => p.users_id === userId);
202+
if (index !== -1 && build.repository.permissions[index].permission) {
203+
build.hasPermission = true;
204+
} else {
205+
build.hasPermission = false;
206+
}
198207
} else {
199208
build.hasPermission = false;
200209
}
201-
} else {
202-
build.hasPermission = false;
203-
}
204210

205-
resolve(build);
206-
});
211+
resolve(build);
212+
});
207213
});
208214
}
209215

@@ -254,7 +260,7 @@ export function updateBuild(data: any): Promise<boolean> {
254260
export function getBuildRepositoryId(buildId: number): Promise<any> {
255261
return new Promise((resolve, reject) => {
256262
new Build({ id: buildId }).fetch()
257-
.then(build => !build ? reject(build) : resolve(build.toJSON().repositories_id));
263+
.then(build => !build ? reject(build) : resolve(build.toJSON().repositories_id));
258264
});
259265
}
260266

@@ -274,50 +280,50 @@ export function getBuildStatus(buildId: number): Promise<any> {
274280
return curr;
275281
} else if (curr === 'success' && accu !== 'failed'
276282
&& accu !== 'running' && accu !== 'queued') {
277-
return curr;
283+
return curr;
278284
}
279285

280286
return accu;
281287
})));
282288
});
283-
});
289+
});
284290
}
285291

286292
export function getDepracatedBuilds(build: any): Promise<any> {
287293
return new Promise((resolve, reject) => {
288294
new Build({ repositories_id: build.repositories_id })
289-
.query(q => {
290-
q.whereNull('end_time')
291-
.andWhereNot('id', build.id);
295+
.query(q => {
296+
q.whereNull('end_time')
297+
.andWhereNot('id', build.id);
292298

293-
if (build.pr) {
294-
q.where('pr', build.pr);
295-
}
296-
})
297-
.fetchAll()
298-
.then(builds => {
299-
if (!builds) {
300-
reject();
301-
}
299+
if (build.pr) {
300+
q.where('pr', build.pr);
301+
}
302+
})
303+
.fetchAll()
304+
.then(builds => {
305+
if (!builds) {
306+
reject();
307+
}
302308

303-
builds = builds.toJSON();
304-
if (!build.pr) {
305-
builds = builds.filter(b => {
306-
if (build.data.before) {
307-
return build.data.before === b.data.before;
308-
} else if (build.data.before_sha) {
309-
return build.data.before_sha === b.data.before_sha;
310-
} else if (build.data.object_attributes && build.data.object_attributes.before_sha) {
311-
return build.data.object_attributes.before_sha
312-
=== b.data.object_attributes.before_sha;
313-
}
309+
builds = builds.toJSON();
310+
if (!build.pr) {
311+
builds = builds.filter(b => {
312+
if (build.data.before) {
313+
return build.data.before === b.data.before;
314+
} else if (build.data.before_sha) {
315+
return build.data.before_sha === b.data.before_sha;
316+
} else if (build.data.object_attributes && build.data.object_attributes.before_sha) {
317+
return build.data.object_attributes.before_sha
318+
=== b.data.object_attributes.before_sha;
319+
}
314320

315-
return false;
316-
});
317-
}
318-
builds = builds.map(b => b.id);
321+
return false;
322+
});
323+
}
324+
builds = builds.map(b => b.id);
319325

320-
resolve(builds);
321-
});
326+
resolve(builds);
327+
});
322328
});
323329
}

0 commit comments

Comments
 (0)