in azure-active-directory-server/src/main/kotlin/org/jetbrains/teamcity/aad/ServerPrincipalFactory.kt [16:51]
fun getServerPrincipal(userName: String, aadUserUID: String, displayName: String?, email: String?, schemeProperties: Map<String, String>): ServerPrincipal {
// Match by UID
val userWithTheSameUID = findExistingUserByUID(aadUserUID)
if (userWithTheSameUID != null) {
if (allowUserDetailsSync(schemeProperties)) {
userWithTheSameUID.updateUserAccount(userName, displayName, email)
}
return ServerPrincipal(AADConstants.AAD_AUTH_SCHEME_NAME, userWithTheSameUID.username)
}
// Match by email
if (email != null && allowMatchUserByEmail(schemeProperties)) {
val userWithTheSameEmail = findExistingUserByEmail(email)
if (userWithTheSameEmail != null) {
val usernameFound = userWithTheSameEmail.username
LOG.info("Associated Microsoft Entra ID user $userName with TeamCity user $usernameFound by e-mail $email")
userWithTheSameEmail.setUserProperty(AADConstants.OID_USER_PROPERTY_KEY, aadUserUID)
if (allowUserDetailsSync(schemeProperties)) {
userWithTheSameEmail.updateUserAccount(userName, displayName, email)
}
return ServerPrincipal(AADConstants.AAD_AUTH_SCHEME_NAME, userWithTheSameEmail.username)
}
}
// Create user and populate with users details
val allowCreatingNewUsersByLogin = AuthModuleUtil.allowCreatingNewUsersByLogin(schemeProperties, DEFAULT_ALLOW_CREATING_NEW_USERS_BY_LOGIN)
val userProperties = hashMapOf(AADConstants.OID_USER_PROPERTY_KEY to aadUserUID)
if (allowCreatingNewUsersByLogin) {
val createUser = myUserModel.createUserAccount(AADConstants.AAD_AUTH_SCHEME_NAME, userName)
createUser.updateUserAccount(userName, displayName, email)
createUser.setUserProperty(AADConstants.OID_USER_PROPERTY_KEY, aadUserUID)
}
return ServerPrincipal(AADConstants.AAD_AUTH_SCHEME_NAME, userName, null, allowCreatingNewUsersByLogin, userProperties)
}