This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
Commit e3b97c3b authored by Administrator's avatar Administrator
Browse files

Merge branch '369-confidential-issue' into 'development'

Fixed #369 und added automatic user registration in gitlab

See merge request sharing/codeability-sharing-platform!171
parents 9faa26b8 3d74249f
3 merge requests!1772023 März Release,!171Fixed #369 und added automatic user registration in gitlab,!146Put the sonar-analyze job into a separate stage
......@@ -11,6 +11,7 @@ import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.gitlab4j.api.Constants.TokenType;
......@@ -94,13 +95,23 @@ public class UserDetailsFetcher {
String email = (String) oidcUser.getAttribute("email");
User gitUser = gitLabApi.getUserApi().getUserByEmail(email);
userToken = requestGitLabUserToken(gitUser, gitLabApi);
if (gitUser == null) {
u.setLastModifiedDate(Instant.now());
modified = true;
return new UserDetailsInfo(userToken, modified);
// try to create the user
gitUser = createNewGitLabUserFor(oidcUser);
String generatedPassword = generatePassword();
gitLabApi.getUserApi().createUser(gitUser, generatedPassword, true);
gitUser = gitLabApi.getUserApi().getUserByEmail(email);
if (gitUser == null) {
// gitUser still null. Something went wrong?
u.setLastModifiedDate(Instant.now());
modified = true;
return new UserDetailsInfo(userToken, modified);
}
}
userToken = requestGitLabUserToken(gitUser, gitLabApi);
List<Membership> memberships = gitLabApi.getUserApi().getMemberships(gitUser.getId());
for (Membership membership : memberships) {
authorities.add(membership.getSourceName());
......@@ -125,6 +136,24 @@ public class UserDetailsFetcher {
return new UserDetailsInfo(userToken, modified);
}
private String generatePassword() {
return RandomStringUtils.random(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz=%$-.");
}
private User createNewGitLabUserFor(final OidcUser oidcUser) {
User gitUser = new User();
String email = oidcUser.getEmail();
gitUser.setEmail(email);
final Object nameAttribute = oidcUser.getAttribute("name");
String name = nameAttribute == null ? "unknown" : nameAttribute.toString();
gitUser.setName(name);
String userName = email.replace('@', '_');
gitUser.setUsername(userName);
return gitUser;
}
Optional<ImpersonationToken> requestGitLabUserToken(final User gitUser, final GitLabApi gitLabApi) throws GitLabApiException {
Date expiresAt = new Date(System.currentTimeMillis() + tokenValidityInSeconds * 1000L);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment