53         KeycloakSession session = context.getSession();
    54         RealmModel realm = context.getRealm();
    61         String username = 
getUsername(context, serializedCtx, brokerContext);
    62         if (username == null) {
    63             ServicesLogger.LOGGER.resetFlow(realm.isRegistrationEmailAsUsername() ? 
"Email" : 
"Username");
    69         ExistingUserInfo duplication = 
checkExistingUser(context, username, serializedCtx, brokerContext);
    71         if (duplication == null) {
    72             logger.debugf(
"No duplication detected. Creating account for user '%s' and linking with identity provider '%s' .",
    73                     username, brokerContext.getIdpConfig().getAlias());
    75             UserModel federatedUser = session.users().addUser(realm, username);
    76             federatedUser.setEnabled(
true);
    77             federatedUser.setEmail(brokerContext.getEmail());
    78             federatedUser.setFirstName(brokerContext.getFirstName());
    79             federatedUser.setLastName(brokerContext.getLastName());
    81             for (Map.Entry<String, List<String>> attr : serializedCtx.getAttributes().entrySet()) {
    82                 federatedUser.setAttribute(attr.getKey(), attr.getValue());
    85             AuthenticatorConfigModel config = context.getAuthenticatorConfig();
    86             if (config != null && Boolean.parseBoolean(config.getConfig().get(IdpCreateUserIfUniqueAuthenticatorFactory.REQUIRE_PASSWORD_UPDATE_AFTER_REGISTRATION))) {
    87                 logger.debugf(
"User '%s' required to update password", federatedUser.getUsername());
    88                 federatedUser.addRequiredAction(UserModel.RequiredAction.UPDATE_PASSWORD);
    93             context.setUser(federatedUser);
    97             logger.debugf(
"Duplication detected. There is already existing user with %s '%s' .",
    98                     duplication.getDuplicateAttributeName(), duplication.getDuplicateAttributeValue());
   101             context.getAuthenticationSession().setAuthNote(
EXISTING_USER_INFO, duplication.serialize());
   103             Response challengeResponse = context.form()
   104                     .setError(Messages.FEDERATED_IDENTITY_EXISTS, duplication.getDuplicateAttributeName(), duplication.getDuplicateAttributeValue())
   105                     .createErrorPage(Response.Status.CONFLICT);
   106             context.challenge(challengeResponse);
   108             if (context.getExecution().isRequired()) {
   110                         .user(duplication.getExistingUserId())
   111                         .detail(
"existing_" + duplication.getDuplicateAttributeName(), duplication.getDuplicateAttributeValue())
   112                         .removeDetail(Details.AUTH_METHOD)
   113                         .removeDetail(Details.AUTH_TYPE)
   114                         .error(Errors.FEDERATED_IDENTITY_EXISTS);
 static Logger logger
Definition: IdpCreateUserIfUniqueAuthenticator.java:43
 
static final String ENFORCE_UPDATE_PROFILE
Definition: AbstractIdpAuthenticator.java:51
 
void userRegisteredSuccess(AuthenticationFlowContext context, UserModel registeredUser, SerializedBrokeredIdentityContext serializedCtx, BrokeredIdentityContext brokerContext)
Definition: IdpCreateUserIfUniqueAuthenticator.java:144
 
ExistingUserInfo checkExistingUser(AuthenticationFlowContext context, String username, SerializedBrokeredIdentityContext serializedCtx, BrokeredIdentityContext brokerContext)
Definition: IdpCreateUserIfUniqueAuthenticator.java:120
 
String getUsername(AuthenticationFlowContext context, SerializedBrokeredIdentityContext serializedCtx, BrokeredIdentityContext brokerContext)
Definition: IdpCreateUserIfUniqueAuthenticator.java:137
 
static final String EXISTING_USER_INFO
Definition: AbstractIdpAuthenticator.java:45
 
static final String BROKER_REGISTERED_NEW_USER
Definition: AbstractIdpAuthenticator.java:54