diff --git a/ExpressAPI/src/routes/EnonceRoutes.ts b/ExpressAPI/src/routes/EnonceRoutes.ts index 0df2c54b05de030d69b69e8f0c825d6a3647b57a..0abb9dc5c30e8a034c31f5c6bf1f32fee5f50a9f 100644 --- a/ExpressAPI/src/routes/EnonceRoutes.ts +++ b/ExpressAPI/src/routes/EnonceRoutes.ts @@ -33,11 +33,16 @@ class EnonceRoutes implements RoutesManager { } private readonly enonceValidator: ExpressValidator.Schema = { - name : { + name : { trim : true, notEmpty: true }, - members: { + 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()); } }