Skip to content
Snippets Groups Projects
Commit a2f464ef authored by joel.vonderwe's avatar joel.vonderwe Committed by michael.minelli
Browse files

Add users to sonar projects

parent 24d3fdc4
Branches
No related tags found
No related merge requests found
...@@ -155,6 +155,48 @@ class SonarManager { ...@@ -155,6 +155,48 @@ class SonarManager {
return false; return false;
} }
} }
/**
* Return the sonar user login name associated with the gitlab username
* @param gitlabUsername Username to look up
*/
async findUserFromGitlabUser(gitlabUsername: string) {
const formData = new FormData();
formData.append('q', gitlabUsername);
const resp = await this.executeGetRequest<{ users: { login: string, name: string }[] }>(this.getApiUrl(SonarRoute.SEARCH_USER), formData);
for (const u of resp.users) {
if ( u.name == gitlabUsername ) {
return u.login;
}
}
return undefined;
}
async addUserToProject(username: string, projectKey: string, privileged: boolean) {
const permissions = ['user', 'codeviewer'];
if (privileged) {
permissions.push('issueadmin');
}
for (const perm of permissions) {
const formData = new FormData();
formData.append('projectKey', projectKey);
formData.append('permission', perm);
formData.append('login', username);
await this.executePostRequest(this.getApiUrl(SonarRoute.PROJECT_ADD_USER), formData)
}
}
async addGitlabUserToProject(gitlabUsername: string, projectKey: string, privileged: boolean) {
const username = await this.findUserFromGitlabUser(gitlabUsername);
if (username == undefined) {
return false;
}
await this.addUserToProject(username, projectKey, privileged);
return true;
}
} }
export default new SonarManager(); export default new SonarManager();
\ No newline at end of file
...@@ -203,6 +203,12 @@ class AssignmentRoutes implements RoutesManager { ...@@ -203,6 +203,12 @@ class AssignmentRoutes implements RoutesManager {
if ( sonarProject == undefined ) { if ( sonarProject == undefined ) {
return; return;
} }
await GlobalHelper.repoCreationFnExecCreator(req, res, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR, DojoStatusCode.ASSIGNMENT_CREATION_INTERNAL_ERROR, repository, sonarProject)(async () => {
if ( !(await Promise.all(params.members.map(member => SonarManager.addGitlabUserToProject(member.username, sonarProject!.project.key, true)))).every(Boolean) ) {
throw new Error();
}
}, 'Sonar add member error');
} }
const assignment: Assignment = await repoCreationFnExec(() => db.assignment.create({ const assignment: Assignment = await repoCreationFnExec(() => db.assignment.create({
......
...@@ -277,6 +277,25 @@ class ExerciseRoutes implements RoutesManager { ...@@ -277,6 +277,25 @@ class ExerciseRoutes implements RoutesManager {
if ( sonarProject == undefined ) { if ( sonarProject == undefined ) {
return; return;
} }
try {
for ( const u of assignment.staff ) {
const success = await SonarManager.addGitlabUserToProject(u.gitlabUsername, sonarProject.project.key, true);
if (!success) {
return GlobalHelper.repositoryCreationError('Sonar add member error', undefined, req, res, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_MEMBER, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_MEMBER, repository, sonarProject);
}
}
for ( const u of params.members ) {
const success = await SonarManager.addGitlabUserToProject(u.username, sonarProject.project.key, false);
if (!success) {
return GlobalHelper.repositoryCreationError('Sonar add member error', undefined, req, res, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_MEMBER, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_MEMBER, repository, sonarProject);
}
}
} catch ( error ) {
logger.error('Sonar add member error');
logger.error(error);
return GlobalHelper.repositoryCreationError('Sonar add member error', error, req, res, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR, repository, sonarProject);
}
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment