public boolean test(final Map<Challenge, String> responseTest) throws ChaiUnavailableException { if (service == null) { LOGGER.error( localIdentifier + "beginning web service 'processChaRes' response test, however service bean is not in session memory, aborting response test..."); return false; } LOGGER.trace(localIdentifier + "beginning web service 'processChaRes' response test "); final String[] responseArray = new String[challengeSet.getAdminDefinedChallenges().size()]; { int i = 0; for (final Challenge loopChallenge : challengeSet.getAdminDefinedChallenges()) { final String loopResponse = responseTest.get(loopChallenge); responseArray[i] = loopResponse; i++; } } final ProcessChaResRequest request = new ProcessChaResRequest(); request.setChaAnswers(responseArray); request.setUserDN(userDN); try { final ForgotPasswordWSBean response = service.processChaRes(request); if (response.isTimeout()) { LOGGER.error(localIdentifier + "web service reports timeout: " + response.getMessage()); return false; } if (response.isError()) { if ("Account restrictions prevent you from logging in. See your administrator for more details." .equals(response.getMessage())) { // throw PwmUnrecoverableException.createPwmException(PwmError.ERROR_INTRUDER_USER); } LOGGER.error(localIdentifier + "web service reports error: " + response.getMessage()); return false; } LOGGER.debug(localIdentifier + "web service has validated the users responses"); return true; } catch (RemoteException e) { LOGGER.error(localIdentifier + "error processing web service response: " + e.getMessage()); } return false; // To change body of implemented methods use File | Settings | File Templates. }
public boolean meetsChallengeSetRequirements(final ChallengeSet challengeSet) { if (challengeSet.getRequiredChallenges().size() > this.getChallengeSet().getRequiredChallenges().size()) { LOGGER.debug( localIdentifier + "failed meetsChallengeSetRequirements, not enough required challenge"); return false; } for (final Challenge loopChallenge : challengeSet.getRequiredChallenges()) { if (loopChallenge.isAdminDefined()) { if (!this.getChallengeSet() .getChallengeTexts() .contains(loopChallenge.getChallengeText())) { LOGGER.debug( localIdentifier + "failed meetsChallengeSetRequirements, missing required challenge text: '" + loopChallenge.getChallengeText() + "'"); return false; } } } if (challengeSet.getMinRandomRequired() > 0) { if (this.getChallengeSet().getChallenges().size() < challengeSet.getMinRandomRequired()) { LOGGER.debug( localIdentifier + "failed meetsChallengeSetRequirements, not enough questions to meet minrandom; minRandomRequired=" + challengeSet.getMinRandomRequired() + ", ChallengesInSet=" + this.getChallengeSet().getChallenges().size()); return false; } } return true; }
@Override void doCommand() throws Exception { final PwmApplication pwmApplication = cliEnvironment.getPwmApplication(); final File inputFile = (File) cliEnvironment.getOptions().get(CliParameters.REQUIRED_EXISTING_INPUT_FILE.getName()); final BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream(inputFile), PwmConstants.DEFAULT_CHARSET.toString())); out("importing stored responses from " + inputFile.getAbsolutePath() + "...."); int counter = 0; String line; final long startTime = System.currentTimeMillis(); while ((line = reader.readLine()) != null) { counter++; final RestChallengesServer.JsonChallengesData inputData; inputData = JsonUtil.deserialize(line, RestChallengesServer.JsonChallengesData.class); final UserIdentity userIdentity = UserIdentity.fromDelimitedKey(inputData.username); final ChaiUser user = pwmApplication.getProxiedChaiUser(userIdentity); if (user.isValid()) { out("writing responses to user '" + user.getEntryDN() + "'"); try { final ChallengeProfile challengeProfile = pwmApplication .getCrService() .readUserChallengeProfile( null, userIdentity, user, PwmPasswordPolicy.defaultPolicy(), PwmConstants.DEFAULT_LOCALE); final ChallengeSet challengeSet = challengeProfile.getChallengeSet(); final String userGuid = LdapOperationsHelper.readLdapGuidValue(pwmApplication, null, userIdentity, false); final ResponseInfoBean responseInfoBean = inputData.toResponseInfoBean( PwmConstants.DEFAULT_LOCALE, challengeSet.getIdentifier()); pwmApplication.getCrService().writeResponses(user, userGuid, responseInfoBean); } catch (Exception e) { out( "error writing responses to user '" + user.getEntryDN() + "', error: " + e.getMessage()); return; } } else { out("user '" + user.getEntryDN() + "' is not a valid userDN"); return; } } out( "output complete, " + counter + " responses imported in " + TimeDuration.fromCurrent(startTime).asCompactString()); }
@Override public String toString() { return "NovellWSResponseSet holding {" + challengeSet.toString() + "}"; }