use of password.pwm.config.stored.StoredConfigurationImpl in project pwm by pwm-project.
the class ConfigEditorServlet method restSearchSettings.
@ActionHandler(action = "search")
private ProcessStatus restSearchSettings(final PwmRequest pwmRequest) throws IOException, PwmUnrecoverableException {
final Instant startTime = Instant.now();
final ConfigManagerBean configManagerBean = getBean(pwmRequest);
final String bodyData = pwmRequest.readRequestBodyAsString();
final Map<String, String> valueMap = JsonUtil.deserializeStringMap(bodyData);
final Locale locale = pwmRequest.getLocale();
final RestResultBean restResultBean;
final String searchTerm = valueMap.get("search");
final StoredConfigurationImpl storedConfiguration = configManagerBean.getStoredConfiguration();
if (searchTerm != null && !searchTerm.isEmpty()) {
final ArrayList<StoredConfigurationImpl.ConfigRecordID> searchResults = new ArrayList<>(configManagerBean.getStoredConfiguration().search(searchTerm, locale));
final ConcurrentHashMap<String, Map<String, SearchResultItem>> returnData = new ConcurrentHashMap<>();
searchResults.parallelStream().filter(recordID -> recordID.getRecordType() == StoredConfigurationImpl.ConfigRecordID.RecordType.SETTING).forEach(recordID -> {
final PwmSetting setting = (PwmSetting) recordID.getRecordID();
final SearchResultItem item = new SearchResultItem(setting.getCategory().toString(), storedConfiguration.readSetting(setting, recordID.getProfileID()).toDebugString(locale), setting.getCategory().toMenuLocationDebug(recordID.getProfileID(), locale), storedConfiguration.isDefaultValue(setting, recordID.getProfileID()), recordID.getProfileID());
final String returnCategory = item.getNavigation();
returnData.putIfAbsent(returnCategory, new ConcurrentHashMap<>());
returnData.get(returnCategory).put(setting.getKey(), item);
});
final TreeMap<String, Map<String, SearchResultItem>> outputMap = new TreeMap<>();
for (final String key : returnData.keySet()) {
outputMap.put(key, new TreeMap<>(returnData.get(key)));
}
restResultBean = RestResultBean.withData(outputMap);
LOGGER.trace(pwmRequest, "finished search operation with " + returnData.size() + " results in " + TimeDuration.fromCurrent(startTime).asCompactString());
} else {
restResultBean = RestResultBean.withData(new ArrayList<StoredConfigurationImpl.ConfigRecordID>());
}
pwmRequest.outputJsonResult(restResultBean);
return ProcessStatus.Halt;
}
use of password.pwm.config.stored.StoredConfigurationImpl in project pwm by pwm-project.
the class ConfigEditorServlet method preProcessCheck.
@Override
public ProcessStatus preProcessCheck(final PwmRequest pwmRequest) throws PwmUnrecoverableException, IOException, ServletException {
final ConfigManagerBean configManagerBean = getBean(pwmRequest);
if (configManagerBean.getStoredConfiguration() == null) {
final StoredConfigurationImpl loadedConfig = ConfigManagerServlet.readCurrentConfiguration(pwmRequest);
configManagerBean.setConfiguration(loadedConfig);
}
return ProcessStatus.Continue;
}
use of password.pwm.config.stored.StoredConfigurationImpl in project pwm by pwm-project.
the class ConfigEditorServlet method restWriteSetting.
@ActionHandler(action = "writeSetting")
private ProcessStatus restWriteSetting(final PwmRequest pwmRequest) throws IOException, PwmUnrecoverableException {
final ConfigManagerBean configManagerBean = getBean(pwmRequest);
final StoredConfigurationImpl storedConfig = configManagerBean.getStoredConfiguration();
final String key = pwmRequest.readParameterAsString("key");
final String bodyString = pwmRequest.readRequestBodyAsString();
final PwmSetting setting = PwmSetting.forKey(key);
final LinkedHashMap<String, Object> returnMap = new LinkedHashMap<>();
final UserIdentity loggedInUser = pwmRequest.getPwmSession().isAuthenticated() ? pwmRequest.getPwmSession().getUserInfo().getUserIdentity() : null;
if (key.startsWith("localeBundle")) {
final StringTokenizer st = new StringTokenizer(key, "-");
st.nextToken();
final PwmLocaleBundle bundleName = PwmLocaleBundle.valueOf(st.nextToken());
final String keyName = st.nextToken();
final Map<String, String> valueMap = JsonUtil.deserializeStringMap(bodyString);
final Map<String, String> outputMap = new LinkedHashMap<>(valueMap);
storedConfig.writeLocaleBundleMap(bundleName.getTheClass().getName(), keyName, outputMap);
returnMap.put("isDefault", outputMap.isEmpty());
returnMap.put("key", key);
} else {
final String profileID = setting.getCategory().hasProfiles() ? pwmRequest.readParameterAsString("profile") : null;
try {
final StoredValue storedValue = ValueFactory.fromJson(setting, bodyString);
final List<String> errorMsgs = storedValue.validateValue(setting);
if (errorMsgs != null && !errorMsgs.isEmpty()) {
returnMap.put("errorMessage", setting.getLabel(pwmRequest.getLocale()) + ": " + errorMsgs.get(0));
}
storedConfig.writeSetting(setting, profileID, storedValue, loggedInUser);
} catch (Exception e) {
final String errorMsg = "error writing default value for setting " + setting.toString() + ", error: " + e.getMessage();
LOGGER.error(errorMsg, e);
throw new IllegalStateException(errorMsg, e);
}
returnMap.put("key", key);
returnMap.put("category", setting.getCategory().toString());
returnMap.put("syntax", setting.getSyntax().toString());
returnMap.put("isDefault", storedConfig.isDefaultValue(setting, profileID));
}
pwmRequest.outputJsonResult(RestResultBean.withData(returnMap));
return ProcessStatus.Halt;
}
use of password.pwm.config.stored.StoredConfigurationImpl in project pwm by pwm-project.
the class ConfigEditorServlet method restReadSetting.
@ActionHandler(action = "readSetting")
private ProcessStatus restReadSetting(final PwmRequest pwmRequest) throws IOException, PwmUnrecoverableException {
final ConfigManagerBean configManagerBean = getBean(pwmRequest);
final StoredConfigurationImpl storedConfig = configManagerBean.getStoredConfiguration();
final String key = pwmRequest.readParameterAsString("key");
final Object returnValue;
final LinkedHashMap<String, Object> returnMap = new LinkedHashMap<>();
final PwmSetting theSetting = PwmSetting.forKey(key);
if (key.startsWith("localeBundle")) {
final StringTokenizer st = new StringTokenizer(key, "-");
st.nextToken();
final PwmLocaleBundle bundleName = PwmLocaleBundle.valueOf(st.nextToken());
final String keyName = st.nextToken();
final Map<String, String> bundleMap = storedConfig.readLocaleBundleMap(bundleName.getTheClass().getName(), keyName);
if (bundleMap == null || bundleMap.isEmpty()) {
final Map<String, String> defaultValueMap = new LinkedHashMap<>();
final String defaultLocaleValue = ResourceBundle.getBundle(bundleName.getTheClass().getName(), PwmConstants.DEFAULT_LOCALE).getString(keyName);
for (final Locale locale : pwmRequest.getConfig().getKnownLocales()) {
final ResourceBundle localeBundle = ResourceBundle.getBundle(bundleName.getTheClass().getName(), locale);
if (locale.toString().equalsIgnoreCase(PwmConstants.DEFAULT_LOCALE.toString())) {
defaultValueMap.put("", defaultLocaleValue);
} else {
final String valueStr = localeBundle.getString(keyName);
if (!defaultLocaleValue.equals(valueStr)) {
final String localeStr = locale.toString();
defaultValueMap.put(localeStr, localeBundle.getString(keyName));
}
}
}
returnValue = defaultValueMap;
returnMap.put("isDefault", true);
} else {
returnValue = bundleMap;
returnMap.put("isDefault", false);
}
returnMap.put("key", key);
} else if (theSetting == null) {
final String errorStr = "readSettingAsString request for unknown key: " + key;
LOGGER.warn(errorStr);
pwmRequest.outputJsonResult(RestResultBean.fromError(new ErrorInformation(PwmError.ERROR_UNKNOWN, errorStr)));
return ProcessStatus.Halt;
} else {
final String profile = theSetting.getCategory().hasProfiles() ? pwmRequest.readParameterAsString("profile") : null;
switch(theSetting.getSyntax()) {
case PASSWORD:
returnValue = Collections.singletonMap("isDefault", storedConfig.isDefaultValue(theSetting, profile));
break;
case X509CERT:
returnValue = ((X509CertificateValue) storedConfig.readSetting(theSetting, profile)).toInfoMap(true);
break;
case PRIVATE_KEY:
returnValue = ((PrivateKeyValue) storedConfig.readSetting(theSetting, profile)).toInfoMap(true);
break;
case ACTION:
returnValue = ((ActionValue) storedConfig.readSetting(theSetting, profile)).toInfoMap();
break;
case REMOTE_WEB_SERVICE:
returnValue = ((RemoteWebServiceValue) storedConfig.readSetting(theSetting, profile)).toInfoMap();
break;
case FILE:
returnValue = ((FileValue) storedConfig.readSetting(theSetting, profile)).toInfoMap();
break;
default:
returnValue = storedConfig.readSetting(theSetting, profile).toNativeObject();
}
returnMap.put("isDefault", storedConfig.isDefaultValue(theSetting, profile));
if (theSetting.getSyntax() == PwmSettingSyntax.SELECT) {
returnMap.put("options", theSetting.getOptions());
}
{
final ValueMetaData settingMetaData = storedConfig.readSettingMetadata(theSetting, profile);
if (settingMetaData != null) {
if (settingMetaData.getModifyDate() != null) {
returnMap.put("modifyTime", settingMetaData.getModifyDate());
}
if (settingMetaData.getUserIdentity() != null) {
returnMap.put("modifyUser", settingMetaData.getUserIdentity());
}
}
}
returnMap.put("key", key);
returnMap.put("category", theSetting.getCategory().toString());
returnMap.put("syntax", theSetting.getSyntax().toString());
}
returnMap.put("value", returnValue);
pwmRequest.outputJsonResult(RestResultBean.withData(returnMap));
return ProcessStatus.Halt;
}
Aggregations