@Override public ResponseInfoBean readResponseInfo( final ChaiUser theUser, final UserIdentity userIdentity, final String userGUID) throws PwmUnrecoverableException { final ResponseSet responseSet = readResponsesFromNovellUA(pwmApplication, theUser); if (responseSet == null) { return null; } final Map<Challenge, String> crMap = new LinkedHashMap<>(); final Map<Challenge, String> helpdeskCrMap = new LinkedHashMap<>(); try { for (final Challenge loopChallenge : responseSet.getChallengeSet().getChallenges()) { crMap.put(loopChallenge, ""); } for (final Challenge loopChallenge : responseSet.getHelpdeskResponses().keySet()) { helpdeskCrMap.put(loopChallenge, ""); } return new ResponseInfoBean( crMap, helpdeskCrMap, PwmConstants.DEFAULT_LOCALE, responseSet.getChallengeSet().getMinRandomRequired(), responseSet.getChallengeSet().getIdentifier(), DataStorageMethod.NMASUAWS, null); } catch (ChaiValidationException e) { LOGGER.error( "unexpected error converting NMASUserAppWebService ResponseSet to ResponseInfoBean: " + e.getMessage()); } return null; // To change body of implemented methods use File | Settings | File Templates. }
@Override void doCommand() throws Exception { final PwmApplication pwmApplication = cliEnvironment.getPwmApplication(); final File outputFile = (File) cliEnvironment.getOptions().get(CliParameters.REQUIRED_NEW_OUTPUT_FILE.getName()); Helper.pause(2000); final long startTime = System.currentTimeMillis(); final UserSearchEngine userSearchEngine = new UserSearchEngine(pwmApplication, SessionLabel.SYSTEM_LABEL); final UserSearchEngine.SearchConfiguration searchConfiguration = new UserSearchEngine.SearchConfiguration(); searchConfiguration.setEnableValueEscaping(false); searchConfiguration.setUsername("*"); final String systemRecordDelimiter = System.getProperty("line.separator"); final Writer writer = new BufferedWriter(new PrintWriter(outputFile, PwmConstants.DEFAULT_CHARSET.toString())); final Map<UserIdentity, Map<String, String>> results = userSearchEngine.performMultiUserSearch( searchConfiguration, Integer.MAX_VALUE, Collections.<String>emptyList()); out( "searching " + results.size() + " users for stored responses to write to " + outputFile.getAbsolutePath() + "...."); int counter = 0; for (final UserIdentity identity : results.keySet()) { final ChaiUser user = pwmApplication.getProxiedChaiUser(identity); final ResponseSet responseSet = pwmApplication.getCrService().readUserResponseSet(null, identity, user); if (responseSet != null) { counter++; out("found responses for '" + user + "', writing to output."); final RestChallengesServer.JsonChallengesData outputData = new RestChallengesServer.JsonChallengesData(); outputData.challenges = responseSet.asChallengeBeans(true); outputData.helpdeskChallenges = responseSet.asHelpdeskChallengeBeans(true); outputData.minimumRandoms = responseSet.getChallengeSet().minimumResponses(); outputData.username = identity.toDelimitedKey(); writer.write(JsonUtil.serialize(outputData)); writer.write(systemRecordDelimiter); } else { out("skipping '" + user.toString() + "', no stored responses."); } } writer.close(); out( "output complete, " + counter + " responses exported in " + TimeDuration.fromCurrent(startTime).asCompactString()); }
public ResponseSet readResponseSet( final ChaiUser theUser, final UserIdentity userIdentity, final String userGUID) throws PwmUnrecoverableException { if (userGUID == null || userGUID.length() < 1) { final String errorMsg = "user " + theUser.getEntryDN() + " does not have a guid, unable to search for responses in remote database"; final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_MISSING_GUID, errorMsg); throw new PwmUnrecoverableException(errorInformation); } try { final DatabaseAccessorImpl databaseAccessor = pwmApplication.getDatabaseAccessor(); final String responseStringBlob = databaseAccessor.get(DatabaseTable.PWM_RESPONSES, userGUID); if (responseStringBlob != null && responseStringBlob.length() > 0) { final ResponseSet userResponseSet = ChaiResponseSet.parseChaiResponseSetXML(responseStringBlob, theUser); LOGGER.debug( "found responses for " + theUser.getEntryDN() + " in remote database: " + userResponseSet.toString()); return userResponseSet; } else { LOGGER.trace( "user guid for " + theUser.getEntryDN() + " not found in remote database (key=" + userGUID + ")"); } } catch (ChaiValidationException e) { final String errorMsg = "unexpected error reading responses for " + theUser.getEntryDN() + " from remote database: " + e.getMessage(); final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, errorMsg); throw new PwmUnrecoverableException(errorInformation); } catch (PwmOperationalException e) { final String errorMsg = "unexpected error reading responses for " + theUser.getEntryDN() + " from remote database: " + e.getMessage(); final ErrorInformation errorInformation = new ErrorInformation(e.getErrorInformation().getError(), errorMsg); throw new PwmUnrecoverableException(errorInformation); } return null; }