Browse Source

convert app attributes to serialize objects instead of just strings

jrivard 9 years ago
parent
commit
204fa071e1

+ 10 - 24
pwm/servlet/src/password/pwm/PwmApplication.java

@@ -73,6 +73,7 @@ import password.pwm.util.secure.PwmRandom;
 import password.pwm.util.secure.SecureService;
 
 import java.io.File;
+import java.io.Serializable;
 import java.util.*;
 
 /**
@@ -295,7 +296,7 @@ public class PwmApplication {
 
         // detect if config has been modified since previous startup
         try {
-            final String previousHash = readAppAttribute(AppAttribute.CONFIG_HASH);
+            final String previousHash = readAppAttribute(AppAttribute.CONFIG_HASH, String.class);
             final String currentHash = pwmEnvironment.getConfig().configurationHash();
             if (previousHash == null || !previousHash.equals(currentHash)) {
                 writeAppAttribute(AppAttribute.CONFIG_HASH, currentHash);
@@ -467,7 +468,7 @@ public class PwmApplication {
     private Date fetchInstallDate(final Date startupTime) {
         if (localDB != null) {
             try {
-                final String storedDateStr = readAppAttribute(AppAttribute.INSTALL_DATE);
+                final String storedDateStr = readAppAttribute(AppAttribute.INSTALL_DATE,String.class);
                 if (storedDateStr == null || storedDateStr.length() < 1) {
                     writeAppAttribute(AppAttribute.INSTALL_DATE, String.valueOf(startupTime.getTime()));
                 } else {
@@ -487,7 +488,7 @@ public class PwmApplication {
             return newInstanceID;
         }
 
-        newInstanceID = readAppAttribute(AppAttribute.INSTANCE_ID);
+        newInstanceID = readAppAttribute(AppAttribute.INSTANCE_ID, String.class);
 
         if (newInstanceID == null || newInstanceID.length() < 1) {
             newInstanceID = Long.toHexString(PwmRandom.getInstance().nextLong()).toUpperCase();
@@ -662,7 +663,7 @@ public class PwmApplication {
         return instanceNonce;
     }
 
-    public String readAppAttribute(final AppAttribute appAttribute) {
+    public <T extends Serializable> T readAppAttribute(final AppAttribute appAttribute, final Class<T> returnClass) {
         if (localDB == null || localDB.status() != LocalDB.Status.OPEN) {
             LOGGER.error("error retrieving key '" + appAttribute.getKey() + "', localDB unavailable: ");
             return null;
@@ -673,14 +674,15 @@ public class PwmApplication {
         }
 
         try {
-            return localDB.get(LocalDB.DB.PWM_META, appAttribute.getKey());
+            final String strValue = localDB.get(LocalDB.DB.PWM_META, appAttribute.getKey());
+            return JsonUtil.deserialize(strValue, returnClass);
         } catch (Exception e) {
             LOGGER.error("error retrieving key '" + appAttribute.getKey() + "' installation date from localDB: " + e.getMessage());
         }
         return null;
     }
 
-    public void writeAppAttribute(final AppAttribute appAttribute, final String value) {
+    public void writeAppAttribute(final AppAttribute appAttribute, final Serializable value) {
         if (localDB == null || localDB.status() != LocalDB.Status.OPEN) {
             LOGGER.error("error writing key '" + appAttribute.getKey() + "', localDB unavailable: ");
             return;
@@ -694,29 +696,13 @@ public class PwmApplication {
             if (value == null) {
                 localDB.remove(LocalDB.DB.PWM_META, appAttribute.getKey());
             } else {
-                localDB.put(LocalDB.DB.PWM_META, appAttribute.getKey(), value);
+                final String jsonValue = JsonUtil.serialize(value);
+                localDB.put(LocalDB.DB.PWM_META, appAttribute.getKey(), jsonValue);
             }
         } catch (Exception e) {
             LOGGER.error("error retrieving key '" + appAttribute.getKey() + "' installation date from localDB: " + e.getMessage());
         }
     }
-
-    public PwmApplication makePwmRuntimeInstance(
-            final Configuration configuration
-    )
-            throws PwmUnrecoverableException
-    {
-        final PwmEnvironment runtimeEnvironment = new PwmEnvironment.Builder(pwmEnvironment)
-                .setApplicationMode(PwmApplication.MODE.NEW)
-                .setInternalRuntimeInstance(true)
-                .setConfigurationFile(null)
-                .setConfig(configuration)
-                .createPwmEnvironment();
-        return new PwmApplication(runtimeEnvironment);
-    }
-
-
-
 }
 
 

+ 14 - 0
pwm/servlet/src/password/pwm/PwmEnvironment.java

@@ -202,6 +202,20 @@ public class PwmEnvironment implements Serializable {
         */
     }
 
+    public PwmEnvironment makeRuntimeInstance(
+            final Configuration configuration
+    )
+            throws PwmUnrecoverableException
+    {
+        return new Builder(this)
+                .setApplicationMode(PwmApplication.MODE.NEW)
+                .setInternalRuntimeInstance(true)
+                .setConfigurationFile(null)
+                .setConfig(configuration)
+                .createPwmEnvironment();
+    }
+
+
     public static void verifyApplicationPath(final File applicationPath) throws PwmUnrecoverableException {
 
         if (applicationPath == null) {

+ 1 - 1
pwm/servlet/src/password/pwm/config/PwmSetting.xml

@@ -443,7 +443,7 @@
             <value><![CDATA[pwmLastPwdUpdate]]></value>
         </default>
         <default template="ORACLE_DS">
-            <value></value>
+            <value/>
         </default>
     </setting>
     <setting key="ldap.user.group.attribute" level="2">

+ 1 - 1
pwm/servlet/src/password/pwm/config/function/UserMatchViewerFunction.java

@@ -91,7 +91,7 @@ public class UserMatchViewerFunction implements SettingUIFunction {
             throws Exception
     {
         final Configuration config = new Configuration(storedConfiguration);
-        final PwmApplication tempApplication = pwmApplication.makePwmRuntimeInstance(config);
+        final PwmApplication tempApplication = new PwmApplication(pwmApplication.getPwmEnvironment().makeRuntimeInstance(config));
         final List<UserPermission> permissions = (List<UserPermission>)storedConfiguration.readSetting(setting,profile).toNativeObject();
 
         for (final UserPermission userPermission : permissions) {

+ 1 - 1
pwm/servlet/src/password/pwm/health/LDAPStatusChecker.java

@@ -672,7 +672,7 @@ public class LDAPStatusChecker implements HealthChecker {
     )
             throws PwmUnrecoverableException
     {
-        final PwmApplication tempApplication = pwmApplication.makePwmRuntimeInstance(config);
+        final PwmApplication tempApplication = new PwmApplication(pwmApplication.getPwmEnvironment().makeRuntimeInstance(config));
         final LDAPStatusChecker ldapStatusChecker = new LDAPStatusChecker();
         final List<HealthRecord> profileRecords = new ArrayList<>();
 

+ 3 - 1
pwm/servlet/src/password/pwm/http/servlet/configguide/ConfigGuideServlet.java

@@ -285,7 +285,9 @@ public class ConfigGuideServlet extends AbstractPwmServlet {
     {
 
         final Configuration tempConfiguration = new Configuration(configGuideBean.getStoredConfiguration());
-        final PwmApplication tempApplication = pwmRequest.getPwmApplication().makePwmRuntimeInstance(tempConfiguration);
+        final PwmApplication tempApplication = new PwmApplication(pwmRequest.getPwmApplication()
+                .getPwmEnvironment()
+                .makeRuntimeInstance(tempConfiguration));
 
         final LDAPStatusChecker ldapStatusChecker = new LDAPStatusChecker();
         final List<HealthRecord> records = new ArrayList<>();

+ 1 - 1
pwm/servlet/src/password/pwm/ldap/LdapConnectionService.java

@@ -149,7 +149,7 @@ public class LdapConnectionService implements PwmService {
     private static Map<LdapProfile,ErrorInformation> readLastLdapFailure(final PwmApplication pwmApplication) {
         String lastLdapFailureStr = null;
         try {
-            lastLdapFailureStr = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.LAST_LDAP_ERROR);
+            lastLdapFailureStr = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.LAST_LDAP_ERROR, String.class);
             if (lastLdapFailureStr != null && lastLdapFailureStr.length() > 0) {
                 final Map<String, ErrorInformation> fromJson = JsonUtil.deserialize(lastLdapFailureStr,new TypeToken<Map<String, ErrorInformation>>() {});
                 final Map<LdapProfile, ErrorInformation> returnMap = new HashMap<>();

+ 4 - 7
pwm/servlet/src/password/pwm/svc/report/ReportService.java

@@ -172,17 +172,14 @@ public class ReportService implements PwmService {
     private void initTempData()
             throws LocalDBException, PwmUnrecoverableException
     {
-        final String cleanFlag = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.REPORT_CLEAN_FLAG);
-        if (!"true".equals(cleanFlag)) {
+        final Boolean cleanFlag = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.REPORT_CLEAN_FLAG, Boolean.class);
+        if (cleanFlag != null && cleanFlag) {
             LOGGER.error(PwmConstants.REPORTING_SESSION_LABEL, "did not shut down cleanly");
             reportStatus = new ReportStatusInfo(settings.getSettingsHash());
             reportStatus.setTotal(userCacheService.size());
         } else {
             try {
-                final String jsonInfo = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.REPORT_STATUS);
-                if (jsonInfo != null && !jsonInfo.isEmpty()) {
-                    reportStatus = JsonUtil.deserialize(jsonInfo,ReportStatusInfo.class);
-                }
+                reportStatus = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.REPORT_STATUS, ReportStatusInfo.class);
             } catch (Exception e) {
                 LOGGER.error(PwmConstants.REPORTING_SESSION_LABEL,"error loading cached report status info into memory: " + e.getMessage());
             }
@@ -198,7 +195,7 @@ public class ReportService implements PwmService {
 
         reportStatus.setInProgress(false);
 
-        pwmApplication.writeAppAttribute(PwmApplication.AppAttribute.REPORT_CLEAN_FLAG, "false");
+        pwmApplication.writeAppAttribute(PwmApplication.AppAttribute.REPORT_CLEAN_FLAG, false);
     }
 
     @Override

+ 1 - 1
pwm/servlet/src/password/pwm/svc/token/TokenService.java

@@ -177,7 +177,7 @@ public class TokenService implements PwmService {
         executorService.scheduleAtFixedRate(cleanerTask, 10 * 1000, cleanerFrequency, TimeUnit.MILLISECONDS);
         LOGGER.trace("token cleanup will occur every " + TimeDuration.asCompactString(cleanerFrequency));
 
-        final String counterString = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.TOKEN_COUNTER);
+        final String counterString = pwmApplication.readAppAttribute(PwmApplication.AppAttribute.TOKEN_COUNTER, String.class);
         try {
             counter = Long.parseLong(counterString);
         } catch (Exception e) {

+ 3 - 6
pwm/servlet/src/password/pwm/svc/wordlist/AbstractWordlist.java

@@ -274,12 +274,9 @@ abstract class AbstractWordlist implements Wordlist, PwmService {
     }
 
     public StoredWordlistDataBean readMetadata() {
-        final String storedValue = pwmApplication.readAppAttribute(getMetaDataAppAttribute());
-        if (storedValue != null && !storedValue.isEmpty()) {
-            final StoredWordlistDataBean metaDataBean = JsonUtil.deserialize(storedValue, StoredWordlistDataBean.class);
-            if (metaDataBean != null) {
-                return metaDataBean;
-            }
+        final StoredWordlistDataBean storedValue = pwmApplication.readAppAttribute(getMetaDataAppAttribute(),StoredWordlistDataBean.class);
+        if (storedValue != null) {
+            return storedValue;
         }
         return new StoredWordlistDataBean();
     }

+ 1 - 1
pwm/servlet/src/password/pwm/util/queue/AbstractQueueManager.java

@@ -207,7 +207,7 @@ public abstract class AbstractQueueManager implements PwmService {
     }
 
     protected int readItemIDCounter() {
-        final String itemCountStr = pwmApplication.readAppAttribute(itemCountAppAttribute);
+        final String itemCountStr = pwmApplication.readAppAttribute(itemCountAppAttribute, String.class);
         if (itemCountStr != null) {
             try {
                 return Integer.parseInt(itemCountStr);

+ 1 - 1
pwm/servlet/web/public/reference/referencedoc.jsp

@@ -191,7 +191,7 @@
         </p>
         <% for (final PwmSetting setting : category.getSettings()) { %>
         <% if (!setting.isHidden()) { %>
-        <a id="setting_key_<%=setting.getKey()%>"  style="font-weight: inherit">
+        <a id="setting_key_<%=setting.getKey()%>"  style="font-weight: inherit; text-decoration: none">
             <table>
                 <tr>
                     <td class="key" style="width: 100px">