Forráskód Böngészése

fix issue with profile settings not appearing in config editor

Jason Rivard 3 éve
szülő
commit
4abd5a8fee

+ 2 - 1
server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java

@@ -813,9 +813,10 @@ public class ConfigEditorServlet extends ControlledPwmServlet
         final NavTreeSettings navTreeSettings = NavTreeSettings.readFromRequest( pwmRequest );
 
         final StoredConfiguration storedConfiguration = configManagerBean.getStoredConfiguration();
+        final DomainID domainID = DomainStateReader.forRequest( pwmRequest ).getDomainIDForLocaleBundle();
 
         final List<NavTreeItem> navigationData = NavTreeDataMaker.makeNavTreeItems(
-                pwmRequest.getPwmDomain(),
+                domainID,
                 storedConfiguration,
                 navTreeSettings );
 

+ 76 - 70
server/src/main/java/password/pwm/http/servlet/configeditor/data/NavTreeDataMaker.java

@@ -21,8 +21,6 @@
 package password.pwm.http.servlet.configeditor.data;
 
 import password.pwm.PwmConstants;
-import password.pwm.PwmDomain;
-import password.pwm.PwmEnvironment;
 import password.pwm.bean.DomainID;
 import password.pwm.config.AppConfig;
 import password.pwm.config.PwmSetting;
@@ -51,6 +49,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.ResourceBundle;
+import java.util.stream.Collectors;
 
 /**
  * Utility class for generating {@link NavTreeItem}s suitable for display in the
@@ -65,7 +64,7 @@ public class NavTreeDataMaker
     private static final String DISPLAY_TEXT_NAME = "Display Text";
 
     public static List<NavTreeItem> makeNavTreeItems(
-            final PwmDomain pwmDomain,
+            final DomainID domainID,
             final StoredConfiguration storedConfiguration,
             final NavTreeSettings navTreeSettings
     )
@@ -77,10 +76,10 @@ public class NavTreeDataMaker
         navigationData.add( makeRootNode() );
 
         // add setting nodes
-        navigationData.addAll( makeSettingNavItems( pwmDomain, storedConfiguration, navTreeSettings ) );
+        navigationData.addAll( makeCategoryNavItems( domainID, storedConfiguration, navTreeSettings ) );
 
         // add display text nodes
-        navigationData.addAll( makeDisplayTextNavItems( pwmDomain, storedConfiguration, navTreeSettings ) );
+        navigationData.addAll( makeDisplayTextNavItems( domainID, storedConfiguration, navTreeSettings ) );
 
         NavTreeDataMaker.moveNavItemToTopOfList( PwmSettingCategory.NOTES.toString(), navigationData );
         NavTreeDataMaker.moveNavItemToTopOfList( PwmSettingCategory.TEMPLATES.toString(), navigationData );
@@ -100,13 +99,13 @@ public class NavTreeDataMaker
     }
 
     private static List<NavTreeItem> makeDisplayTextNavItems(
-            final PwmDomain pwmDomain,
+            final DomainID domainId,
             final StoredConfiguration storedConfiguration,
             final NavTreeSettings navTreeSettings
     )
     {
         final DomainID domainID = navTreeSettings.getDomainManageMode() == DomainManageMode.domain
-                ? pwmDomain.getDomainID()
+                ? domainId
                 : DomainID.systemId();
 
         return makeDisplayTextNavItemsForDomain( domainID, storedConfiguration, navTreeSettings );
@@ -204,80 +203,87 @@ public class NavTreeDataMaker
     /**
      * Produces a collection of {@code NavTreeItem}.
      */
-    private static List<NavTreeItem> makeSettingNavItems(
-            final PwmDomain pwmDomain,
+    private static List<NavTreeItem> makeCategoryNavItems(
+            final DomainID domainId,
+            final StoredConfiguration storedConfiguration,
+            final NavTreeSettings navTreeSettings
+    )
+    {
+        return PwmSettingCategory.sortedValues().stream()
+                .filter( loopCategory -> categoryMatcher( domainId, loopCategory, null, storedConfiguration, navTreeSettings ) )
+                .flatMap( loopCategory -> navTreeItemsForCategory( loopCategory, domainId, storedConfiguration, navTreeSettings ).stream() )
+                        .collect( Collectors.toUnmodifiableList() );
+
+    }
+
+    private static List<NavTreeItem> navTreeItemsForCategory(
+            final PwmSettingCategory loopCategory,
+            final DomainID domainId,
             final StoredConfiguration storedConfiguration,
             final NavTreeSettings navTreeSettings
     )
     {
         final Locale locale = navTreeSettings.getLocale();
-        final List<NavTreeItem> navigationData = new ArrayList<>();
 
-        for ( final PwmSettingCategory loopCategory : PwmSettingCategory.sortedValues() )
+        if ( !loopCategory.hasProfiles() )
         {
-            if ( !loopCategory.hasProfiles() )
-            {
-                // regular category, so output a standard nav tree item
-                if ( categoryMatcher( pwmDomain, loopCategory, null, storedConfiguration, navTreeSettings ) )
-                {
-                    navigationData.add( navTreeItemForCategory( loopCategory, locale, null ) );
-                }
-            }
-            else
-            {
-                final List<String> profiles = StoredConfigurationUtil.profilesForCategory( pwmDomain.getDomainID(), loopCategory, storedConfiguration );
+            // regular category, so output a standard nav tree item
+            return List.of( navTreeItemForCategory( loopCategory, locale, null ) );
+        }
 
-                if ( loopCategory.isTopLevelProfile() )
-                {
-                    // edit profile option
-                    navigationData.add( navTreeItemForCategory( loopCategory, locale, null ) );
+        final List<String> profiles = StoredConfigurationUtil.profilesForCategory( domainId, loopCategory, storedConfiguration );
+        if ( loopCategory.isTopLevelProfile() )
+        {
+            final List<NavTreeItem> navigationData = new ArrayList<>();
 
-                    {
-                        final String editItemName = LocaleHelper.getLocalizedMessage( locale, Config.Label_ProfileListEditMenuItem, null );
-                        final PwmSetting profileSetting = loopCategory.getProfileSetting().orElseThrow( IllegalStateException::new );
-
-                        final NavTreeItem profileEditorInfo = NavTreeItem.builder()
-                                .id( loopCategory.getKey() + "-EDITOR" )
-                                .name( editItemName )
-                                .type(  NavTreeItem.NavItemType.profileDefinition )
-                                .profileSetting( profileSetting.getKey() )
-                                .parent( loopCategory.getKey() )
-                                .build();
-                        navigationData.add( profileEditorInfo );
-                    }
+            // edit profile option
+            navigationData.add( navTreeItemForCategory( loopCategory, locale, null ) );
 
-                    for ( final String profileId : profiles )
-                    {
-                        final NavTreeItem.NavItemType type = !loopCategory.hasChildren()
-                                ? NavTreeItem.NavItemType.category
-                                : NavTreeItem.NavItemType.navigation;
-
-                        final NavTreeItem profileInfo = navTreeItemForCategory( loopCategory, locale, profileId ).toBuilder()
-                                .name(  profileId.isEmpty() ? "Default" : profileId )
-                                .id( "profile-" + loopCategory.getKey() + "-" + profileId )
-                                .parent( loopCategory.getKey() )
-                                .type( type )
-                                .build();
+            {
+                final String editItemName = LocaleHelper.getLocalizedMessage( locale, Config.Label_ProfileListEditMenuItem, null );
+                final PwmSetting profileSetting = loopCategory.getProfileSetting().orElseThrow( IllegalStateException::new );
+
+                final NavTreeItem profileEditorInfo = NavTreeItem.builder()
+                        .id( loopCategory.getKey() + "-EDITOR" )
+                        .name( editItemName )
+                        .type( NavTreeItem.NavItemType.profileDefinition )
+                        .profileSetting( profileSetting.getKey() )
+                        .parent( loopCategory.getKey() )
+                        .build();
+                navigationData.add( profileEditorInfo );
+            }
 
-                        navigationData.add( profileInfo );
-                    }
-                }
-                else
-                {
-                    for ( final String profileId : profiles )
-                    {
-                        if ( categoryMatcher( pwmDomain, loopCategory, profileId, storedConfiguration, navTreeSettings ) )
-                        {
-                            navigationData.add( navTreeItemForCategory( loopCategory, locale, profileId ) );
-                        }
-                    }
-                }
+            for ( final String profileId : profiles )
+            {
+                final NavTreeItem.NavItemType type = !loopCategory.hasChildren()
+                        ? NavTreeItem.NavItemType.category
+                        : NavTreeItem.NavItemType.navigation;
+
+                final NavTreeItem profileInfo = navTreeItemForCategory( loopCategory, locale, profileId ).toBuilder()
+                        .name( profileId.isEmpty() ? "Default" : profileId )
+                        .id( "profile-" + loopCategory.getKey() + "-" + profileId )
+                        .parent( loopCategory.getKey() )
+                        .type( type )
+                        .build();
+
+                navigationData.add( profileInfo );
             }
+
+            return Collections.unmodifiableList( navigationData );
         }
 
-        return navigationData;
+        final List<NavTreeItem> navigationData = new ArrayList<>();
+        for ( final String profileId : profiles )
+        {
+            if ( categoryMatcher( domainId, loopCategory, profileId, storedConfiguration, navTreeSettings ) )
+            {
+                navigationData.add( navTreeItemForCategory( loopCategory, locale, profileId ) );
+            }
+        }
+        return Collections.unmodifiableList( navigationData );
     }
 
+
     private static NavTreeItem navTreeItemForCategory(
             final PwmSettingCategory category,
             final Locale locale,
@@ -304,7 +310,7 @@ public class NavTreeDataMaker
     }
 
     private static boolean categoryMatcher(
-            final PwmDomain pwmDomain,
+            final DomainID domainID,
             final PwmSettingCategory category,
             final String profile,
             final StoredConfiguration storedConfiguration,
@@ -313,7 +319,7 @@ public class NavTreeDataMaker
     {
         if ( category == PwmSettingCategory.HTTPS_SERVER )
         {
-            if ( !pwmDomain.getPwmApplication().getPwmEnvironment().getFlags().contains( PwmEnvironment.ApplicationFlag.ManageHttps ) )
+            if ( !navTreeSettings.isMangeHttps() )
             {
                 return false;
             }
@@ -321,7 +327,7 @@ public class NavTreeDataMaker
 
         for ( final PwmSettingCategory childCategory : category.getChildren() )
         {
-            if ( categoryMatcher( pwmDomain, childCategory, profile, storedConfiguration, navTreeSettings ) )
+            if ( categoryMatcher( domainID, childCategory, profile, storedConfiguration, navTreeSettings ) )
             {
                 return true;
             }
@@ -329,7 +335,7 @@ public class NavTreeDataMaker
 
         for ( final PwmSetting setting : category.getSettings() )
         {
-            if ( settingMatcher( pwmDomain.getDomainID(), storedConfiguration, setting, profile, navTreeSettings ) )
+            if ( settingMatcher( domainID, storedConfiguration, setting, profile, navTreeSettings ) )
             {
                 return true;
             }
@@ -354,7 +360,7 @@ public class NavTreeDataMaker
         }
 
         final boolean valueIsDefault = StoredConfigurationUtil.isDefaultValue( storedConfiguration, storedConfigKey );
-        if ( setting.isHidden() && !valueIsDefault )
+        if ( setting.isHidden() && !valueIsDefault && setting.getSyntax() != PwmSettingSyntax.PROFILE )
         {
             return false;
         }

+ 5 - 0
server/src/main/java/password/pwm/http/servlet/configeditor/data/NavTreeSettings.java

@@ -23,6 +23,7 @@ package password.pwm.http.servlet.configeditor.data;
 import lombok.Builder;
 import lombok.Value;
 import password.pwm.PwmConstants;
+import password.pwm.PwmEnvironment;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.http.PwmHttpRequestWrapper;
 import password.pwm.http.PwmRequest;
@@ -50,6 +51,8 @@ public class NavTreeSettings implements Serializable
 
     private final DomainManageMode domainManageMode;
 
+    private final boolean mangeHttps;
+
     public static NavTreeSettings forBasic()
     {
         return NavTreeSettings.builder()
@@ -64,10 +67,12 @@ public class NavTreeSettings implements Serializable
         final int level = ( int ) ( ( double ) inputParameters.get( "level" ) );
         final String filterText = ( String ) inputParameters.get( "text" );
         final DomainStateReader domainStateReader = DomainStateReader.forRequest( pwmRequest );
+        final boolean manageHttps = pwmRequest.getPwmApplication().getPwmEnvironment().getFlags().contains( PwmEnvironment.ApplicationFlag.ManageHttps );
 
         return NavTreeSettings.builder()
                 .modifiedSettingsOnly( modifiedSettingsOnly )
                 .domainManageMode( domainStateReader.getMode() )
+                .mangeHttps( manageHttps )
                 .level( level )
                 .filterText( filterText )
                 .locale( pwmRequest.getLocale() )