Skip to content
Snippets Groups Projects
Commit 01805df0 authored by michael.minelli's avatar michael.minelli
Browse files

EnonceRoutes => Add template checking on enonce creation

parent a870ad24
No related branches found
No related tags found
No related merge requests found
......@@ -40,6 +40,11 @@ class EnonceRoutes implements RoutesManager {
members : {
trim : true,
notEmpty: true
},
template: {
optional: true,
trim : true,
notEmpty: true
}
};
......@@ -48,10 +53,22 @@ class EnonceRoutes implements RoutesManager {
}
private async createEnonce(req: ApiRequest, res: express.Response) {
const params: { name: string, members: string } = req.body;
const params: { name: string, members: string, template: string | null } = req.body;
const gitlabMembers: Array<GitlabUser> = JSON.parse(params.members) as Array<GitlabUser>;
const repository: GitlabRepository = await GitlabHelper.createRepository(params.name, Config.enonce.default.description.replace('{{ENONCE_NAME}}', params.name), Config.enonce.default.visibility, Config.enonce.default.initReadme, Config.gitlab.group.enonces, Config.enonce.default.sharedRunnersEnabled, Config.enonce.default.wikiEnabled, Config.enonce.default.template);
let template: string = Config.enonce.default.template;
if ( params.template ) {
template = params.template;
const templateAccess = await GitlabHelper.checkTemplateAccess(template, req);
if ( templateAccess !== StatusCodes.OK ) {
return res.status(templateAccess).send();
} else {
template = `${ Config.gitlab.urls[0].replace(/^([a-z]{3,5}:\/{2})?(.*)/, `$1${ Config.gitlab.account.username }:${ Config.gitlab.account.token }@$2`) }${ template }.git`;
}
}
const repository: GitlabRepository = await GitlabHelper.createRepository(params.name, Config.enonce.default.description.replace('{{ENONCE_NAME}}', params.name), Config.enonce.default.visibility, Config.enonce.default.initReadme, Config.gitlab.group.enonces, Config.enonce.default.sharedRunnersEnabled, Config.enonce.default.wikiEnabled, template);
const members: Array<GitlabMember | false> = await Promise.all([ req.session.profile.userGitlabId, ...gitlabMembers.map(member => member.id) ].map(async (memberId: number): Promise<GitlabMember | false> => {
try {
return await GitlabHelper.addRepositoryMember(repository.id, memberId, GitlabAccessLevel.Maintainer);
......@@ -79,7 +96,7 @@ class EnonceRoutes implements RoutesManager {
});
}));
req.session.sendResponse(res, StatusCodes.OK, enonce);
req.session.sendResponse(res, StatusCodes.OK, enonce.toJsonObject());
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment