fun getServerPrincipal()

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)
    }