/**
   * Create a new user
   *
   * <p>Username must be unique.
   *
   * @param uriInfo
   * @param rep
   * @return
   */
  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  public Response createUser(final @Context UriInfo uriInfo, final UserRepresentation rep) {
    auth.requireManage();

    // Double-check duplicated username and email here due to federation
    if (session.users().getUserByUsername(rep.getUsername(), realm) != null) {
      return ErrorResponse.exists("User exists with same username");
    }
    if (rep.getEmail() != null && session.users().getUserByEmail(rep.getEmail(), realm) != null) {
      return ErrorResponse.exists("User exists with same email");
    }

    try {
      UserModel user = session.users().addUser(realm, rep.getUsername());
      Set<String> emptySet = Collections.emptySet();
      updateUserFromRep(user, rep, emptySet, realm, session);

      adminEvent
          .operation(OperationType.CREATE)
          .resourcePath(uriInfo, user.getId())
          .representation(rep)
          .success();

      if (session.getTransaction().isActive()) {
        session.getTransaction().commit();
      }

      return Response.created(uriInfo.getAbsolutePathBuilder().path(user.getId()).build()).build();
    } catch (ModelDuplicateException e) {
      if (session.getTransaction().isActive()) {
        session.getTransaction().setRollbackOnly();
      }
      return ErrorResponse.exists("User exists with same username or email");
    }
  }
  @Test
  public void logInAsUserInIDP() {
    driver.navigate().to(getAccountUrl(consumerRealmName()));

    log.debug("Clicking social " + getIDPAlias());
    accountLoginPage.clickSocial(getIDPAlias());

    waitForPage("log in to");

    Assert.assertTrue(
        "Driver should be on the provider realm page right now",
        driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));

    log.debug("Logging in");
    accountLoginPage.login(getUserLogin(), getUserPassword());

    waitForPage("update account information");

    Assert.assertTrue(updateAccountInformationPage.isCurrent());
    Assert.assertTrue(
        "We must be on correct realm right now",
        driver.getCurrentUrl().contains("/auth/realms/" + consumerRealmName() + "/"));

    log.debug("Updating info on updateAccount page");
    updateAccountInformationPage.updateAccountInformation("Firstname", "Lastname");

    UsersResource consumerUsers = adminClient.realm(consumerRealmName()).users();

    int userCount = consumerUsers.count();
    Assert.assertTrue("There must be at least one user", userCount > 0);

    List<UserRepresentation> users = consumerUsers.search("", 0, userCount);

    boolean isUserFound = false;
    for (UserRepresentation user : users) {
      if (user.getUsername().equals(getUserLogin()) && user.getEmail().equals(getUserEmail())) {
        isUserFound = true;
        break;
      }
    }

    Assert.assertTrue(
        "There must be user " + getUserLogin() + " in realm " + consumerRealmName(), isUserFound);

    testSingleLogout();
  }
  public static void updateUserFromRep(
      UserModel user,
      UserRepresentation rep,
      Set<String> attrsToRemove,
      RealmModel realm,
      KeycloakSession session) {
    if (realm.isEditUsernameAllowed()) {
      user.setUsername(rep.getUsername());
    }
    user.setEmail(rep.getEmail());
    user.setFirstName(rep.getFirstName());
    user.setLastName(rep.getLastName());

    if (rep.isEnabled() != null) user.setEnabled(rep.isEnabled());
    if (rep.isTotp() != null) user.setOtpEnabled(rep.isTotp());
    if (rep.isEmailVerified() != null) user.setEmailVerified(rep.isEmailVerified());

    List<String> reqActions = rep.getRequiredActions();

    if (reqActions != null) {
      Set<String> allActions = new HashSet<>();
      for (ProviderFactory factory :
          session.getKeycloakSessionFactory().getProviderFactories(RequiredActionProvider.class)) {
        allActions.add(factory.getId());
      }
      for (String action : allActions) {
        if (reqActions.contains(action)) {
          user.addRequiredAction(action);
        } else {
          user.removeRequiredAction(action);
        }
      }
    }

    if (rep.getAttributesAsListValues() != null) {
      for (Map.Entry<String, List<String>> attr : rep.getAttributesAsListValues().entrySet()) {
        user.setAttribute(attr.getKey(), attr.getValue());
      }

      for (String attr : attrsToRemove) {
        user.removeAttribute(attr);
      }
    }
  }
Beispiel #4
0
 public void setValues(UserRepresentation user) {
   setUsername(user.getUsername());
   setEmail(user.getEmail());
   setFirstName(user.getFirstName());
   setLastName(user.getLastName());
 }