Browse Source

integrated docker builds
updates for jdk10

Jason Rivard 7 years ago
parent
commit
08b82ce0ba

+ 22 - 10
.gitignore

@@ -1,10 +1,22 @@
-/.idea
-/*.iml
-/client/target
-/client/.node
-/client/.idea
-/client/*.iml
-pwm-parent.iml
-pwmconfig/
-ssprconfig/
-/server/src/main/webapp/public/resources/webjars
+# PWM Project gitignore files
+
+# Eclipse Project Files
+/.project
+/.settings
+/.classpath
+
+# IntelliJ Project Files
+.idea/
+*.iml
+*/.idea/
+*/*.iml
+
+# OS folder info
+.directory
+.DS_Store
+.DS_Store?
+
+# Maven Output
+*/target
+
+

+ 2 - 4
client/.gitignore

@@ -1,5 +1,6 @@
 # NPM
 /node_modules
+.node
 
 # Generated Javascript files
 /src/**/*.js
@@ -7,8 +8,5 @@
 # Build output
 /dist
 
-# IDEA personal files
-/.idea/workspace.xml
-
 # Generated log files
-*.log
+*.log

+ 94 - 0
docker/pom.xml

@@ -0,0 +1,94 @@
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <parent>
+        <groupId>org.pwm-project</groupId>
+        <artifactId>pwm-parent</artifactId>
+        <version>1.8.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <packaging>pom</packaging>
+
+    <artifactId>pwm-docker</artifactId>
+
+    <name>PWM Password Self Service: Docker Image</name>
+
+    <properties>
+        <skipDocker>false</skipDocker>
+    </properties>
+
+    <profiles>
+        <profile>
+            <id>skip-docker</id>
+            <properties>
+                <skipDocker>true</skipDocker>
+            </properties>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
+    </profiles>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>io.fabric8</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>0.26.0</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>build</goal>
+                            <goal>save</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <skip>${skipDocker}</skip>
+                    <saveFile>${project.build.directory}/pwm-server-docker-${project.version}.tar.gz</saveFile>
+                    <images>
+                        <image>
+                            <name>pwm-server:${project.version}</name>
+                            <build>
+                                <tags>
+                                    <tag>pwm-server</tag>
+                                </tags>
+                                <dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
+                                <assembly>
+                                    <name>onejar</name>
+                                    <inline>
+                                        <files>
+                                            <file>
+                                                <source>..${file.separator}onejar${file.separator}target${file.separator}pwm-onejar-${project.version}.jar</source>
+                                                <destName>pwm-onejar.jar</destName>
+                                            </file>
+                                        </files>
+                                    </inline>
+                                </assembly>
+                            </build>
+                        </image>
+                    </images>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+
+        <!--
+        This is included via the assembly plugin descriptor, so its not really required here but keeps
+        the module build order correct.
+        -->
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>pwm-onejar</artifactId>
+            <version>${project.version}</version>
+            <type>jar</type>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+</project>

+ 11 - 0
docker/readme.txt

@@ -0,0 +1,11 @@
+Docker image usage notes:
+
+--Load docker image from file
+docker load --input=pwm-docker-image.tar.gz
+
+--Create docker container and run--
+docker run -d --name <container name> -p 8443:8443 pwm
+
+This will expose the https port to 8443.  You can also manage the exposed configuration volume of /config if you want to preserve
+the /config directory when you destroy/create the container in the future.  The docker image will place all of it's configuration
+and runtime data in the /config volume.

+ 23 - 0
docker/src/main/docker/Dockerfile

@@ -0,0 +1,23 @@
+FROM adoptopenjdk/openjdk10
+MAINTAINER Jason Rivard
+
+# setup environment
+RUN mkdir /config ; mkdir /appliance
+ENV PWM_APPLICATIONPATH /config
+ENV PWM_APPLICATIONFLAGS Appliance,ManageHttps
+
+VOLUME /config
+EXPOSE 8443
+
+# copy war
+COPY onejar/pwm-onejar.jar /appliance/pwm-onejar.jar
+
+# copy scripts
+COPY startup.sh /appliance/startup.sh
+RUN chmod a+x /appliance/startup.sh;
+
+VOLUME /config
+EXPOSE 8443
+
+WORKDIR /appliance
+CMD ./startup.sh

+ 3 - 0
docker/src/main/docker/java.vmoptions

@@ -0,0 +1,3 @@
+-server
+-Xmx1g
+-Xms1g

+ 9 - 0
docker/src/main/docker/startup.sh

@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+#Docker startup script
+
+#start onejar
+cd /appliance
+
+JAVA_OPTS="$(sed 's/./&/' java.vmoptions | tr '\n' ' ')"
+
+java $JAVA_OPTS -jar pwm-onejar.jar -applicationPath /config

+ 0 - 18
onejar/.gitignore

@@ -1,18 +0,0 @@
-# PWM Project gitignore files
-#
-# Maven Output
-/target
-
-# Eclipse Project Files
-/.project
-/.settings
-/.classpath
-
-# IntelliJ Project Files
-.idea/
-/*.iml
-
-# OS folder info
-.directory
-.DS_Store
-.DS_Store?

+ 0 - 1
onejar/pom.xml

@@ -19,7 +19,6 @@
         <tomcat.version>9.0.8</tomcat.version>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
-        <warArtifactID>pwm-${project.version}.war</warArtifactID>
     </properties>
 
     <build>

+ 2 - 0
pom.xml

@@ -23,6 +23,7 @@
     </organization>
 
     <properties>
+        <warArtifactID>pwm-${project.version}.war</warArtifactID>
         <build.number>0</build.number>  <!-- default in case not set on command line -->
         <build.revision>0</build.revision>  <!-- default in case not set on command line -->
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -34,6 +35,7 @@
         <module>client</module>
         <module>server</module>
         <module>onejar</module>
+        <module>docker</module>
     </modules>
 
     <build>

+ 0 - 18
server/.gitignore

@@ -1,21 +1,3 @@
-# PWM Project gitignore files
-#
-# Maven Output
-/target
-
-# Eclipse Project Files
-/.project
-/.settings
-/.classpath
-
-# IntelliJ Project Files
-.idea/
-/*.iml
-
-# OS folder info
-.directory
-.DS_Store
-.DS_Store?
 
 
 # Older PWM versions defaulted the applicationPath dir to WEB-INF.  This section ignores them if the applicationPath is set to WEB-INF.

+ 36 - 2
server/pom.xml

@@ -78,6 +78,40 @@
 
     <build>
         <plugins>
+            <!--
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-pmd-plugin</artifactId>
+                <version>3.9.0</version>
+                <executions>
+                    <execution>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>check</goal>
+                            <goal>cpd-check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <language>jsp</language>
+                    <rulesets>
+                        <ruleset>/category/jsp/bestpractices.xml</ruleset>
+                        <ruleset>/category/jsp/codestyle.xml</ruleset>
+                        <ruleset>/category/jsp/design.xml</ruleset>
+                        <ruleset>/category/jsp/errorprone.xml</ruleset>
+                        <ruleset>/category/jsp/security.xml</ruleset>
+                    </rulesets>
+                    <includes>
+                        <include>**/*.jsp</include>
+                    </includes>
+                    <compileSourceRoots>
+                        <compileSourceRoot>${basedir}/src/main/webapp</compileSourceRoot>
+                    </compileSourceRoots>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            -->
+
             <plugin>
                 <groupId>com.github.spotbugs</groupId>
                 <artifactId>spotbugs-maven-plugin</artifactId>
@@ -561,7 +595,7 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>1.16.22</version>
+            <version>1.18.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -644,7 +678,7 @@
         <dependency>
             <groupId>com.github.ldapchai</groupId>
             <artifactId>ldapchai</artifactId>
-            <version>0.7.2</version>
+            <version>0.7.3</version>
         </dependency>
         <dependency>
             <groupId>commons-net</groupId>

+ 11 - 32
server/src/main/java/password/pwm/http/servlet/admin/AdminServlet.java

@@ -57,7 +57,6 @@ import password.pwm.svc.event.AuditRecord;
 import password.pwm.svc.intruder.RecordType;
 import password.pwm.svc.pwnotify.PwNotifyService;
 import password.pwm.svc.pwnotify.StoredJobState;
-import password.pwm.svc.report.ReportColumnFilter;
 import password.pwm.svc.report.ReportCsvUtility;
 import password.pwm.svc.report.ReportService;
 import password.pwm.svc.report.UserCacheRecord;
@@ -69,14 +68,12 @@ import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
-import password.pwm.util.localdb.LocalDBException;
 import password.pwm.util.logging.LocalDBLogger;
 import password.pwm.util.logging.LocalDBSearchQuery;
 import password.pwm.util.logging.LocalDBSearchResults;
 import password.pwm.util.logging.PwmLogEvent;
 import password.pwm.util.logging.PwmLogLevel;
 import password.pwm.util.logging.PwmLogger;
-import password.pwm.util.reports.ReportUtils;
 import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.rest.RestStatisticsServer;
 
@@ -243,11 +240,8 @@ public class AdminServlet extends ControlledPwmServlet
         final OutputStream outputStream = pwmRequest.getPwmResponse().getOutputStream();
         try
         {
-            final String selectedColumns = pwmRequest.readParameterAsString( "selectedColumns", "" );
-
-            final ReportColumnFilter columnFilter = ReportUtils.toReportColumnFilter( selectedColumns );
             final ReportCsvUtility reportCsvUtility = new ReportCsvUtility( pwmApplication );
-            reportCsvUtility.outputToCsv( outputStream, true, pwmRequest.getLocale(), columnFilter );
+            reportCsvUtility.outputToCsv( outputStream, true, pwmRequest.getLocale() );
         }
         catch ( Exception e )
         {
@@ -387,27 +381,20 @@ public class AdminServlet extends ControlledPwmServlet
 
     @ActionHandler( action = "reportStatus" )
     private ProcessStatus processReportStatus( final PwmRequest pwmRequest )
-            throws ChaiUnavailableException, PwmUnrecoverableException, IOException
+            throws IOException
     {
-        try
-        {
-            final ReportStatusBean returnMap = ReportStatusBean.makeReportStatusData(
-                    pwmRequest.getPwmApplication().getReportService(),
-                    pwmRequest.getPwmSession().getSessionStateBean().getLocale()
-            );
-            final RestResultBean restResultBean = RestResultBean.withData( returnMap );
-            pwmRequest.outputJsonResult( restResultBean );
-        }
-        catch ( LocalDBException e )
-        {
-            throw new PwmUnrecoverableException( e.getErrorInformation() );
-        }
+        final ReportStatusBean returnMap = ReportStatusBean.makeReportStatusData(
+                pwmRequest.getPwmApplication().getReportService(),
+                pwmRequest.getPwmSession().getSessionStateBean().getLocale()
+        );
+        final RestResultBean restResultBean = RestResultBean.withData( returnMap );
+        pwmRequest.outputJsonResult( restResultBean );
         return ProcessStatus.Halt;
     }
 
     @ActionHandler( action = "reportSummary" )
     private ProcessStatus processReportSummary( final PwmRequest pwmRequest )
-            throws ChaiUnavailableException, PwmUnrecoverableException, IOException
+            throws IOException
     {
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final LinkedHashMap<String, Object> returnMap = new LinkedHashMap<>();
@@ -430,10 +417,9 @@ public class AdminServlet extends ControlledPwmServlet
 
         final ReportService reportService = pwmRequest.getPwmApplication().getReportService();
         final ArrayList<UserCacheRecord> reportData = new ArrayList<>();
-        ClosableIterator<UserCacheRecord> cacheBeanIterator = null;
-        try
+
+        try ( ClosableIterator<UserCacheRecord> cacheBeanIterator = reportService.iterator() )
         {
-            cacheBeanIterator = reportService.iterator();
             while ( cacheBeanIterator.hasNext() && reportData.size() < maximum )
             {
                 final UserCacheRecord userCacheRecord = cacheBeanIterator.next();
@@ -443,13 +429,6 @@ public class AdminServlet extends ControlledPwmServlet
                 }
             }
         }
-        finally
-        {
-            if ( cacheBeanIterator != null )
-            {
-                cacheBeanIterator.close();
-            }
-        }
 
         final HashMap<String, Object> returnData = new HashMap<>();
         returnData.put( "users", reportData );

+ 43 - 72
server/src/main/java/password/pwm/http/servlet/admin/ReportStatusBean.java

@@ -22,69 +22,78 @@
 
 package password.pwm.http.servlet.admin;
 
+import lombok.Builder;
+import lombok.Value;
+import password.pwm.http.bean.DisplayElement;
 import password.pwm.svc.report.ReportService;
 import password.pwm.svc.report.ReportStatusInfo;
+import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.PwmNumberFormat;
 import password.pwm.util.java.TimeDuration;
-import password.pwm.util.localdb.LocalDBException;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.Set;
 
+@Value
+@Builder
 public class ReportStatusBean implements Serializable
 {
-    private Map<String, Object> presentable = new LinkedHashMap<>();
-    private ReportStatusInfo raw;
-    private boolean controllable;
-    private Set<ReportService.ReportCommand> availableCommands;
+    private final List<DisplayElement> presentable;
+    private final ReportStatusInfo raw;
+    private final boolean controllable;
+    private final Set<ReportService.ReportCommand> availableCommands;
 
-    public static ReportStatusBean makeReportStatusData( final ReportService reportService, final Locale locale )
-            throws LocalDBException
+    static ReportStatusBean makeReportStatusData( final ReportService reportService, final Locale locale )
     {
         final PwmNumberFormat numberFormat = PwmNumberFormat.forLocale( locale );
-
-        final ReportStatusBean returnMap = new ReportStatusBean();
         final ReportStatusInfo reportInfo = reportService.getReportStatusInfo();
-        final LinkedHashMap<String, Object> presentableMap = new LinkedHashMap<>();
+        final List<DisplayElement> presentableMap = new ArrayList<>();
         final Set<ReportService.ReportCommand> availableCommands = new HashSet<>();
 
-        presentableMap.put( "Job Engine", reportInfo.getCurrentProcess().getLabel() );
+        presentableMap.add( new DisplayElement( "jobEngine", DisplayElement.Type.string, "Job Engine", reportInfo.getCurrentProcess().getLabel() ) );
 
         switch ( reportInfo.getCurrentProcess() )
         {
             case RollOver:
             {
-                presentableMap.put( "Users Processed",
+                presentableMap.add( new DisplayElement( "usersProcessed", DisplayElement.Type.string, "Users Processed",
                         numberFormat.format( reportService.getSummaryData().getTotalUsers() )
-                                + " of " + numberFormat.format( reportService.getTotalRecords() ) );
+                                + " of " + numberFormat.format( reportService.getTotalRecords() ) ) );
                 availableCommands.add( ReportService.ReportCommand.Stop );
             }
             break;
 
             case ReadData:
             {
-                presentableMap.put( "Users Processed", numberFormat.format( reportInfo.getCount() ) );
-                presentableMap.put( "Users Remaining", numberFormat.format( reportService.getWorkQueueSize() ) );
+                presentableMap.add( new DisplayElement( "usersProcessed", DisplayElement.Type.string, "Users Processed",
+                        numberFormat.format( reportInfo.getCount() ) ) );
+                presentableMap.add( new DisplayElement( "usersRemaining", DisplayElement.Type.string, "Users Remaining",
+                        numberFormat.format( reportService.getWorkQueueSize() ) ) );
                 if ( reportInfo.getJobDuration() != null )
                 {
-                    presentableMap.put( "Job Time", reportInfo.getJobDuration().asLongString( locale ) );
+                    presentableMap.add( new DisplayElement( "jobTime", DisplayElement.Type.string, "Job Time",
+                            reportInfo.getJobDuration().asLongString( locale ) ) );
                 }
                 if ( reportInfo.getCount() > 0 )
                 {
                     final BigDecimal eventRate = reportService.getEventRate().setScale( 2, RoundingMode.UP );
-                    presentableMap.put( "Users/Second", eventRate );
-                    if ( !eventRate.equals( BigDecimal.ZERO ) )
+                    if ( eventRate != null )
+                    {
+                        presentableMap.add( new DisplayElement( "usersPerSecond", DisplayElement.Type.number, "Users/Second", eventRate.toString() ) );
+                    }
+                    if ( !BigDecimal.ZERO.equals( eventRate ) )
                     {
                         final int usersRemaining = reportService.getWorkQueueSize();
                         final float secondsRemaining = usersRemaining / eventRate.floatValue();
                         final TimeDuration remainingDuration = new TimeDuration( ( ( int ) secondsRemaining ) * 1000 );
-                        presentableMap.put( "Estimated Time Remaining", remainingDuration.asLongString( locale ) );
+                        presentableMap.add( new DisplayElement( "timeRemaining", DisplayElement.Type.string, "Estimated Time Remaining",
+                                remainingDuration.asLongString( locale ) ) );
                     }
                 }
                 availableCommands.add( ReportService.ReportCommand.Stop );
@@ -95,7 +104,8 @@ public class ReportStatusBean implements Serializable
             {
                 if ( reportInfo.getFinishDate() != null )
                 {
-                    presentableMap.put( "Last Job Completed", reportInfo.getFinishDate() );
+                    presentableMap.add( new DisplayElement( "lastCompleted", DisplayElement.Type.timestamp,  "Last Job Completed",
+                            JavaHelper.toIsoDate( reportInfo.getFinishDate() ) ) );
                 }
                 availableCommands.add( ReportService.ReportCommand.Start );
                 if ( reportService.getTotalRecords() > 0 )
@@ -114,65 +124,26 @@ public class ReportStatusBean implements Serializable
         {
             if ( reportInfo.getErrors() > 0 )
             {
-                presentableMap.put( "Error Count", numberFormat.format( reportInfo.getErrors() ) );
+                presentableMap.add( new DisplayElement( "errorCount", DisplayElement.Type.number, "Error Count", numberFormat.format( reportInfo.getErrors() ) ) );
             }
             if ( reportInfo.getLastError() != null )
             {
-                presentableMap.put( "Last Error", reportInfo.getLastError().toDebugStr() );
+                presentableMap.add( new DisplayElement( "lastError", DisplayElement.Type.string, "Last Error", reportInfo.getLastError().toDebugStr() ) );
             }
             final int totalRecords = reportService.getTotalRecords();
-            presentableMap.put( "Records in Cache", numberFormat.format( totalRecords ) );
+            presentableMap.add( new DisplayElement( "recordsInCache", DisplayElement.Type.string, "Records in Cache", numberFormat.format( totalRecords ) ) );
             if ( totalRecords > 0 )
             {
-                presentableMap.put( "Mean Record Cache Time", reportService.getSummaryData().getMeanCacheTime() );
+                presentableMap.add( new DisplayElement( "meanRecordCacheTime", DisplayElement.Type.timestamp, "Mean Record Cache Time",
+                        JavaHelper.toIsoDate( reportService.getSummaryData().getMeanCacheTime() ) ) );
             }
         }
 
-
-        returnMap.setControllable( true );
-        returnMap.setRaw( reportInfo );
-        returnMap.setPresentable( presentableMap );
-        returnMap.setAvailableCommands( availableCommands );
-        return returnMap;
-    }
-
-    public Map<String, Object> getPresentable( )
-    {
-        return presentable;
-    }
-
-    public void setPresentable( final Map<String, Object> presentable )
-    {
-        this.presentable = presentable;
-    }
-
-    public ReportStatusInfo getRaw( )
-    {
-        return raw;
-    }
-
-    public void setRaw( final ReportStatusInfo raw )
-    {
-        this.raw = raw;
-    }
-
-    public boolean isControllable( )
-    {
-        return controllable;
-    }
-
-    public void setControllable( final boolean controllable )
-    {
-        this.controllable = controllable;
-    }
-
-    public Set<ReportService.ReportCommand> getAvailableCommands( )
-    {
-        return availableCommands;
-    }
-
-    public void setAvailableCommands( final Set<ReportService.ReportCommand> availableCommands )
-    {
-        this.availableCommands = availableCommands;
+        return ReportStatusBean.builder()
+                .controllable( true )
+                .raw( reportInfo )
+                .presentable( presentableMap )
+                .availableCommands( availableCommands )
+                .build();
     }
 }

+ 0 - 269
server/src/main/java/password/pwm/svc/report/ReportColumnFilter.java

@@ -1,269 +0,0 @@
-/*
- * Password Management Servlets (PWM)
- * http://www.pwm-project.org
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2018 The PWM Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package password.pwm.svc.report;
-
-public class ReportColumnFilter
-{
-    boolean userDnVisible;
-    boolean ldapProfileVisible;
-    boolean usernameVisible;
-    boolean emailVisible;
-    boolean userGuidVisible;
-    boolean accountExpirationTimeVisible;
-    boolean lastLoginTimeVisible;
-    boolean passwordExpirationTimeVisible;
-    boolean passwordChangeTimeVisible;
-    boolean responseSetTimeVisible;
-    boolean hasResponsesVisible;
-    boolean hasHelpdeskResponsesVisible;
-    boolean responseStorageMethodVisible;
-    boolean responseFormatTypeVisible;
-    boolean passwordStatusExpiredVisible;
-    boolean passwordStatusPreExpiredVisible;
-    boolean passwordStatusViolatesPolicyVisible;
-    boolean passwordStatusWarnPeriodVisible;
-    boolean requiresPasswordUpdateVisible;
-    boolean requiresResponseUpdateVisible;
-    boolean requiresProfileUpdateVisible;
-    boolean cacheTimestampVisible;
-
-    public boolean isUserDnVisible( )
-    {
-        return userDnVisible;
-    }
-
-    public void setUserDnVisible( final boolean userDnVisible )
-    {
-        this.userDnVisible = userDnVisible;
-    }
-
-    public boolean isLdapProfileVisible( )
-    {
-        return ldapProfileVisible;
-    }
-
-    public void setLdapProfileVisible( final boolean ldapProfileVisible )
-    {
-        this.ldapProfileVisible = ldapProfileVisible;
-    }
-
-    public boolean isUsernameVisible( )
-    {
-        return usernameVisible;
-    }
-
-    public void setUsernameVisible( final boolean usernameVisible )
-    {
-        this.usernameVisible = usernameVisible;
-    }
-
-    public boolean isEmailVisible( )
-    {
-        return emailVisible;
-    }
-
-    public void setEmailVisible( final boolean emailVisible )
-    {
-        this.emailVisible = emailVisible;
-    }
-
-    public boolean isUserGuidVisible( )
-    {
-        return userGuidVisible;
-    }
-
-    public void setUserGuidVisible( final boolean userGuidVisible )
-    {
-        this.userGuidVisible = userGuidVisible;
-    }
-
-    public boolean isAccountExpirationTimeVisible( )
-    {
-        return accountExpirationTimeVisible;
-    }
-
-    public void setAccountExpirationTimeVisible( final boolean accountExpirationTimeVisible )
-    {
-        this.accountExpirationTimeVisible = accountExpirationTimeVisible;
-    }
-
-    public boolean isLastLoginTimeVisible( )
-    {
-        return lastLoginTimeVisible;
-    }
-
-    public void setLastLoginTimeVisible( final boolean lastLoginTimeVisible )
-    {
-        this.lastLoginTimeVisible = lastLoginTimeVisible;
-    }
-
-    public boolean isPasswordExpirationTimeVisible( )
-    {
-        return passwordExpirationTimeVisible;
-    }
-
-    public void setPasswordExpirationTimeVisible( final boolean passwordExpirationTimeVisible )
-    {
-        this.passwordExpirationTimeVisible = passwordExpirationTimeVisible;
-    }
-
-    public boolean isPasswordChangeTimeVisible( )
-    {
-        return passwordChangeTimeVisible;
-    }
-
-    public void setPasswordChangeTimeVisible( final boolean passwordChangeTimeVisible )
-    {
-        this.passwordChangeTimeVisible = passwordChangeTimeVisible;
-    }
-
-    public boolean isResponseSetTimeVisible( )
-    {
-        return responseSetTimeVisible;
-    }
-
-    public void setResponseSetTimeVisible( final boolean responseSetTimeVisible )
-    {
-        this.responseSetTimeVisible = responseSetTimeVisible;
-    }
-
-    public boolean isHasResponsesVisible( )
-    {
-        return hasResponsesVisible;
-    }
-
-    public void setHasResponsesVisible( final boolean hasResponsesVisible )
-    {
-        this.hasResponsesVisible = hasResponsesVisible;
-    }
-
-    public boolean isHasHelpdeskResponsesVisible( )
-    {
-        return hasHelpdeskResponsesVisible;
-    }
-
-    public void setHasHelpdeskResponsesVisible( final boolean hasHelpdeskResponsesVisible )
-    {
-        this.hasHelpdeskResponsesVisible = hasHelpdeskResponsesVisible;
-    }
-
-    public boolean isResponseStorageMethodVisible( )
-    {
-        return responseStorageMethodVisible;
-    }
-
-    public void setResponseStorageMethodVisible( final boolean responseStorageMethodVisible )
-    {
-        this.responseStorageMethodVisible = responseStorageMethodVisible;
-    }
-
-    public boolean isResponseFormatTypeVisible( )
-    {
-        return responseFormatTypeVisible;
-    }
-
-    public void setResponseFormatTypeVisible( final boolean responseFormatTypeVisible )
-    {
-        this.responseFormatTypeVisible = responseFormatTypeVisible;
-    }
-
-    public boolean isPasswordStatusExpiredVisible( )
-    {
-        return passwordStatusExpiredVisible;
-    }
-
-    public void setPasswordStatusExpiredVisible( final boolean passwordStatusExpiredVisible )
-    {
-        this.passwordStatusExpiredVisible = passwordStatusExpiredVisible;
-    }
-
-    public boolean isPasswordStatusPreExpiredVisible( )
-    {
-        return passwordStatusPreExpiredVisible;
-    }
-
-    public void setPasswordStatusPreExpiredVisible( final boolean passwordStatusPreExpiredVisible )
-    {
-        this.passwordStatusPreExpiredVisible = passwordStatusPreExpiredVisible;
-    }
-
-    public boolean isPasswordStatusViolatesPolicyVisible( )
-    {
-        return passwordStatusViolatesPolicyVisible;
-    }
-
-    public void setPasswordStatusViolatesPolicyVisible( final boolean passwordStatusViolatesPolicyVisible )
-    {
-        this.passwordStatusViolatesPolicyVisible = passwordStatusViolatesPolicyVisible;
-    }
-
-    public boolean isPasswordStatusWarnPeriodVisible( )
-    {
-        return passwordStatusWarnPeriodVisible;
-    }
-
-    public void setPasswordStatusWarnPeriodVisible( final boolean passwordStatusWarnPeriodVisible )
-    {
-        this.passwordStatusWarnPeriodVisible = passwordStatusWarnPeriodVisible;
-    }
-
-    public boolean isRequiresPasswordUpdateVisible( )
-    {
-        return requiresPasswordUpdateVisible;
-    }
-
-    public void setRequiresPasswordUpdateVisible( final boolean requiresPasswordUpdateVisible )
-    {
-        this.requiresPasswordUpdateVisible = requiresPasswordUpdateVisible;
-    }
-
-    public boolean isRequiresResponseUpdateVisible( )
-    {
-        return requiresResponseUpdateVisible;
-    }
-
-    public void setRequiresResponseUpdateVisible( final boolean requiresResponseUpdateVisible )
-    {
-        this.requiresResponseUpdateVisible = requiresResponseUpdateVisible;
-    }
-
-    public boolean isRequiresProfileUpdateVisible( )
-    {
-        return requiresProfileUpdateVisible;
-    }
-
-    public void setRequiresProfileUpdateVisible( final boolean requiresProfileUpdateVisible )
-    {
-        this.requiresProfileUpdateVisible = requiresProfileUpdateVisible;
-    }
-
-    public boolean isCacheTimestampVisible( )
-    {
-        return cacheTimestampVisible;
-    }
-
-    public void setCacheTimestampVisible( final boolean cacheTimestampVisible )
-    {
-        this.cacheTimestampVisible = cacheTimestampVisible;
-    }
-}

+ 64 - 214
server/src/main/java/password/pwm/svc/report/ReportCsvUtility.java

@@ -74,19 +74,11 @@ public class ReportCsvUtility
             throws IOException, ChaiUnavailableException, ChaiOperationException, PwmUnrecoverableException, PwmOperationalException
     {
         final Configuration config = pwmApplication.getConfig();
-        final ReportColumnFilter columnFilter = new ReportColumnFilter();
 
-        outputToCsv( outputStream, includeHeader, locale, config, columnFilter );
+        outputToCsv( outputStream, includeHeader, locale, config );
     }
 
-    public void outputToCsv( final OutputStream outputStream, final boolean includeHeader, final Locale locale, final ReportColumnFilter columnFilter )
-            throws IOException, ChaiUnavailableException, ChaiOperationException, PwmUnrecoverableException, PwmOperationalException
-    {
-        final Configuration config = pwmApplication.getConfig();
-        outputToCsv( outputStream, includeHeader, locale, config, columnFilter );
-    }
-
-    public void outputToCsv( final OutputStream outputStream, final boolean includeHeader, final Locale locale, final Configuration config, final ReportColumnFilter columnFilter )
+    public void outputToCsv( final OutputStream outputStream, final boolean includeHeader, final Locale locale, final Configuration config )
             throws IOException, ChaiUnavailableException, ChaiOperationException, PwmUnrecoverableException, PwmOperationalException
     {
         final CSVPrinter csvPrinter = JavaHelper.makeCsvPrinter( outputStream );
@@ -95,94 +87,28 @@ public class ReportCsvUtility
         {
             final List<String> headerRow = new ArrayList<>();
 
-            if ( columnFilter.isUsernameVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_Username", config, localeClass ) );
-            }
-            if ( columnFilter.isUserDnVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_UserDN", config, localeClass ) );
-            }
-            if ( columnFilter.isLdapProfileVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_LDAP_Profile", config, localeClass ) );
-            }
-            if ( columnFilter.isEmailVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_Email", config, localeClass ) );
-            }
-            if ( columnFilter.isUserGuidVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_UserGuid", config, localeClass ) );
-            }
-            if ( columnFilter.isAccountExpirationTimeVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_AccountExpireTime", config, localeClass ) );
-            }
-            if ( columnFilter.isPasswordExpirationTimeVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdExpireTime", config, localeClass ) );
-            }
-            if ( columnFilter.isPasswordChangeTimeVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdChangeTime", config, localeClass ) );
-            }
-            if ( columnFilter.isResponseSetTimeVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_ResponseSaveTime", config, localeClass ) );
-            }
-            if ( columnFilter.isLastLoginTimeVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_LastLogin", config, localeClass ) );
-            }
-            if ( columnFilter.isHasResponsesVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_HasResponses", config, localeClass ) );
-            }
-            if ( columnFilter.isHasHelpdeskResponsesVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_HasHelpdeskResponses", config, localeClass ) );
-            }
-            if ( columnFilter.isResponseStorageMethodVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_ResponseStorageMethod", config, localeClass ) );
-            }
-            if ( columnFilter.isResponseFormatTypeVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_ResponseFormatType", config, localeClass ) );
-            }
-            if ( columnFilter.isPasswordStatusExpiredVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdExpired", config, localeClass ) );
-            }
-            if ( columnFilter.isPasswordStatusPreExpiredVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdPreExpired", config, localeClass ) );
-            }
-            if ( columnFilter.isPasswordStatusViolatesPolicyVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdViolatesPolicy", config, localeClass ) );
-            }
-            if ( columnFilter.isPasswordStatusWarnPeriodVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdWarnPeriod", config, localeClass ) );
-            }
-            if ( columnFilter.isRequiresPasswordUpdateVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RequiresPasswordUpdate", config, localeClass ) );
-            }
-            if ( columnFilter.isRequiresResponseUpdateVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RequiresResponseUpdate", config, localeClass ) );
-            }
-            if ( columnFilter.isRequiresProfileUpdateVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RequiresProfileUpdate", config, localeClass ) );
-            }
-            if ( columnFilter.isCacheTimestampVisible() )
-            {
-                headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RecordCacheTime", config, localeClass ) );
-            }
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_Username", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_UserDN", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_LDAP_Profile", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_Email", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_UserGuid", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_AccountExpireTime", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdExpireTime", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdChangeTime", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_ResponseSaveTime", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_LastLogin", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_HasResponses", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_HasHelpdeskResponses", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_ResponseStorageMethod", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_ResponseFormatType", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdExpired", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdPreExpired", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdViolatesPolicy", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_PwdWarnPeriod", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RequiresPasswordUpdate", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RequiresResponseUpdate", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RequiresProfileUpdate", config, localeClass ) );
+            headerRow.add( LocaleHelper.getLocalizedMessage( locale, "Field_Report_RecordCacheTime", config, localeClass ) );
 
 
             csvPrinter.printRecord( headerRow );
@@ -195,7 +121,7 @@ public class ReportCsvUtility
             while ( cacheBeanIterator.hasNext() )
             {
                 final UserCacheRecord userCacheRecord = cacheBeanIterator.next();
-                outputRecordRow( config, locale, userCacheRecord, csvPrinter, columnFilter );
+                outputRecordRow( config, locale, userCacheRecord, csvPrinter );
             }
         }
         finally
@@ -213,8 +139,7 @@ public class ReportCsvUtility
             final Configuration config,
             final Locale locale,
             final UserCacheRecord userCacheRecord,
-            final CSVPrinter csvPrinter,
-            final ReportColumnFilter columnFilter
+            final CSVPrinter csvPrinter
     )
             throws IOException
     {
@@ -222,119 +147,44 @@ public class ReportCsvUtility
         final String falseField = Display.getLocalizedMessage( locale, Display.Value_False, config );
         final String naField = Display.getLocalizedMessage( locale, Display.Value_NotApplicable, config );
         final List<String> csvRow = new ArrayList<>();
-        if ( columnFilter.isUsernameVisible() )
-        {
-            csvRow.add( userCacheRecord.getUsername() );
-        }
-        if ( columnFilter.isUserDnVisible() )
-        {
-            csvRow.add( userCacheRecord.getUserDN() );
-        }
-        if ( columnFilter.isLdapProfileVisible() )
-        {
-            csvRow.add( userCacheRecord.getLdapProfile() );
-        }
-        if ( columnFilter.isEmailVisible() )
-        {
-            csvRow.add( userCacheRecord.getEmail() );
-        }
-        if ( columnFilter.isUserGuidVisible() )
-        {
-            csvRow.add( userCacheRecord.getUserGUID() );
-        }
-        if ( columnFilter.isAccountExpirationTimeVisible() )
-        {
-            csvRow.add( userCacheRecord.getAccountExpirationTime() == null
-                    ? naField
-                    : JavaHelper.toIsoDate( userCacheRecord.getAccountExpirationTime() ) );
-        }
-
-        if ( columnFilter.isPasswordExpirationTimeVisible() )
-        {
-            csvRow.add( userCacheRecord.getPasswordExpirationTime() == null
-                    ? naField
-                    : JavaHelper.toIsoDate( userCacheRecord.getPasswordExpirationTime() ) );
-        }
-
-        if ( columnFilter.isPasswordChangeTimeVisible() )
-        {
-            csvRow.add( userCacheRecord.getPasswordChangeTime() == null
-                    ? naField
-                    : JavaHelper.toIsoDate( userCacheRecord.getPasswordChangeTime() ) );
-        }
-
-        if ( columnFilter.isResponseSetTimeVisible() )
-        {
-            csvRow.add( userCacheRecord.getResponseSetTime() == null
-                    ? naField
-                    : JavaHelper.toIsoDate( userCacheRecord.getResponseSetTime() ) );
-        }
-
-        if ( columnFilter.isLastLoginTimeVisible() )
-        {
-            csvRow.add( userCacheRecord.getLastLoginTime() == null
-                    ? naField
-                    : JavaHelper.toIsoDate( userCacheRecord.getLastLoginTime() ) );
-        }
-
-        if ( columnFilter.isHasResponsesVisible() )
-        {
-            csvRow.add( userCacheRecord.isHasResponses() ? trueField : falseField );
-        }
-        if ( columnFilter.isHasHelpdeskResponsesVisible() )
-        {
-            csvRow.add( userCacheRecord.isHasHelpdeskResponses() ? trueField : falseField );
-        }
-
-        if ( columnFilter.isResponseStorageMethodVisible() )
-        {
-            csvRow.add( userCacheRecord.getResponseStorageMethod() == null
-                    ? naField
-                    : userCacheRecord.getResponseStorageMethod().toString() );
-        }
-
-        if ( columnFilter.isResponseFormatTypeVisible() )
-        {
-            csvRow.add( userCacheRecord.getResponseFormatType() == null
-                    ? naField
-                    : userCacheRecord.getResponseFormatType().toString() );
-        }
-
-        if ( columnFilter.isPasswordStatusExpiredVisible() )
-        {
-            csvRow.add( userCacheRecord.getPasswordStatus().isExpired() ? trueField : falseField );
-        }
-        if ( columnFilter.isPasswordStatusPreExpiredVisible() )
-        {
-            csvRow.add( userCacheRecord.getPasswordStatus().isPreExpired() ? trueField : falseField );
-        }
-        if ( columnFilter.isPasswordStatusViolatesPolicyVisible() )
-        {
-            csvRow.add( userCacheRecord.getPasswordStatus().isViolatesPolicy() ? trueField : falseField );
-        }
-        if ( columnFilter.isPasswordStatusWarnPeriodVisible() )
-        {
-            csvRow.add( userCacheRecord.getPasswordStatus().isWarnPeriod() ? trueField : falseField );
-        }
-        if ( columnFilter.isRequiresPasswordUpdateVisible() )
-        {
-            csvRow.add( userCacheRecord.isRequiresPasswordUpdate() ? trueField : falseField );
-        }
-        if ( columnFilter.isRequiresResponseUpdateVisible() )
-        {
-            csvRow.add( userCacheRecord.isRequiresResponseUpdate() ? trueField : falseField );
-        }
-        if ( columnFilter.isRequiresProfileUpdateVisible() )
-        {
-            csvRow.add( userCacheRecord.isRequiresProfileUpdate() ? trueField : falseField );
-        }
-
-        if ( columnFilter.isCacheTimestampVisible() )
-        {
-            csvRow.add( userCacheRecord.getCacheTimestamp() == null
-                    ? naField
-                    : JavaHelper.toIsoDate( userCacheRecord.getCacheTimestamp() ) );
-        }
+        csvRow.add( userCacheRecord.getUsername() );
+        csvRow.add( userCacheRecord.getUserDN() );
+        csvRow.add( userCacheRecord.getLdapProfile() );
+        csvRow.add( userCacheRecord.getEmail() );
+        csvRow.add( userCacheRecord.getUserGUID() );
+        csvRow.add( userCacheRecord.getAccountExpirationTime() == null
+                ? naField
+                : JavaHelper.toIsoDate( userCacheRecord.getAccountExpirationTime() ) );
+        csvRow.add( userCacheRecord.getPasswordExpirationTime() == null
+                ? naField
+                : JavaHelper.toIsoDate( userCacheRecord.getPasswordExpirationTime() ) );
+        csvRow.add( userCacheRecord.getPasswordChangeTime() == null
+                ? naField
+                : JavaHelper.toIsoDate( userCacheRecord.getPasswordChangeTime() ) );
+        csvRow.add( userCacheRecord.getResponseSetTime() == null
+                ? naField
+                : JavaHelper.toIsoDate( userCacheRecord.getResponseSetTime() ) );
+        csvRow.add( userCacheRecord.getLastLoginTime() == null
+                ? naField
+                : JavaHelper.toIsoDate( userCacheRecord.getLastLoginTime() ) );
+        csvRow.add( userCacheRecord.isHasResponses() ? trueField : falseField );
+        csvRow.add( userCacheRecord.isHasHelpdeskResponses() ? trueField : falseField );
+        csvRow.add( userCacheRecord.getResponseStorageMethod() == null
+                ? naField
+                : userCacheRecord.getResponseStorageMethod().toString() );
+        csvRow.add( userCacheRecord.getResponseFormatType() == null
+                ? naField
+                : userCacheRecord.getResponseFormatType().toString() );
+        csvRow.add( userCacheRecord.getPasswordStatus().isExpired() ? trueField : falseField );
+        csvRow.add( userCacheRecord.getPasswordStatus().isPreExpired() ? trueField : falseField );
+        csvRow.add( userCacheRecord.getPasswordStatus().isViolatesPolicy() ? trueField : falseField );
+        csvRow.add( userCacheRecord.getPasswordStatus().isWarnPeriod() ? trueField : falseField );
+        csvRow.add( userCacheRecord.isRequiresPasswordUpdate() ? trueField : falseField );
+        csvRow.add( userCacheRecord.isRequiresResponseUpdate() ? trueField : falseField );
+        csvRow.add( userCacheRecord.isRequiresProfileUpdate() ? trueField : falseField );
+        csvRow.add( userCacheRecord.getCacheTimestamp() == null
+                ? naField
+                : JavaHelper.toIsoDate( userCacheRecord.getCacheTimestamp() ) );
 
         csvPrinter.printRecord( csvRow );
     }

+ 0 - 68
server/src/main/java/password/pwm/util/reports/ReportUtils.java

@@ -1,68 +0,0 @@
-/*
- * Password Management Servlets (PWM)
- * http://www.pwm-project.org
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2018 The PWM Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package password.pwm.util.reports;
-
-import password.pwm.svc.report.ReportColumnFilter;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-public class ReportUtils
-{
-    public static ReportColumnFilter toReportColumnFilter( final String desiredColumnsStr )
-    {
-        final ReportColumnFilter reportColumnFilter = new ReportColumnFilter();
-
-        if ( desiredColumnsStr != null )
-        {
-            final String[] selectedColumnsArray = desiredColumnsStr.split( "," );
-            final Set<String> desiredColumns = new HashSet<>( Arrays.asList( selectedColumnsArray ) );
-
-            reportColumnFilter.setUserDnVisible( desiredColumns.contains( "userDN" ) );
-            reportColumnFilter.setLdapProfileVisible( desiredColumns.contains( "ldapProfile" ) );
-            reportColumnFilter.setUsernameVisible( desiredColumns.contains( "username" ) );
-            reportColumnFilter.setEmailVisible( desiredColumns.contains( "email" ) );
-            reportColumnFilter.setUserGuidVisible( desiredColumns.contains( "userGUID" ) );
-            reportColumnFilter.setAccountExpirationTimeVisible( desiredColumns.contains( "accountExpirationTime" ) );
-            reportColumnFilter.setLastLoginTimeVisible( desiredColumns.contains( "lastLoginTime" ) );
-            reportColumnFilter.setPasswordExpirationTimeVisible( desiredColumns.contains( "passwordExpirationTime" ) );
-            reportColumnFilter.setPasswordChangeTimeVisible( desiredColumns.contains( "passwordChangeTime" ) );
-            reportColumnFilter.setResponseSetTimeVisible( desiredColumns.contains( "responseSetTime" ) );
-            reportColumnFilter.setHasResponsesVisible( desiredColumns.contains( "hasResponses" ) );
-            reportColumnFilter.setHasHelpdeskResponsesVisible( desiredColumns.contains( "hasHelpdeskResponses" ) );
-            reportColumnFilter.setResponseStorageMethodVisible( desiredColumns.contains( "responseStorageMethod" ) );
-            reportColumnFilter.setResponseFormatTypeVisible( desiredColumns.contains( "responseFormatType" ) );
-            reportColumnFilter.setPasswordStatusExpiredVisible( desiredColumns.contains( "passwordStatusExpired" ) );
-            reportColumnFilter.setPasswordStatusPreExpiredVisible( desiredColumns.contains( "passwordStatusPreExpired" ) );
-            reportColumnFilter.setPasswordStatusViolatesPolicyVisible( desiredColumns.contains( "passwordStatusViolatesPolicy" ) );
-            reportColumnFilter.setPasswordStatusWarnPeriodVisible( desiredColumns.contains( "passwordStatusWarnPeriod" ) );
-            reportColumnFilter.setRequiresPasswordUpdateVisible( desiredColumns.contains( "requiresPasswordUpdate" ) );
-            reportColumnFilter.setRequiresResponseUpdateVisible( desiredColumns.contains( "requiresResponseUpdate" ) );
-            reportColumnFilter.setRequiresProfileUpdateVisible( desiredColumns.contains( "requiresProfileUpdate" ) );
-            reportColumnFilter.setCacheTimestampVisible( desiredColumns.contains( "cacheTimestamp" ) );
-        }
-
-        return reportColumnFilter;
-    }
-}

+ 0 - 1
server/src/main/webapp/WEB-INF/jsp/admin-analysis.jsp

@@ -145,7 +145,6 @@
                                                 width: 350
                                             });
 
-                                            PWM_ADMIN.initDownloadUserReportCsvForm();
                                         });
                                     </script>
                                 </pwm:script>

+ 10 - 6
server/src/main/webapp/public/resources/js/admin.js

@@ -217,13 +217,17 @@ PWM_ADMIN.refreshReportDataStatus=function() {
         if (data['data'] && data['data']['presentable']) {
             var fields = data['data']['presentable'];
             var htmlTable = '';
-            for (var field in fields) {
-                htmlTable += '<tr><td>' + field + '</td><td id="report_status_' + field + '">' + fields[field] + '</tr>';
-            }
-            PWM_MAIN.getObject('statusTable').innerHTML = htmlTable;
             for (var field in fields) {(function(field){
-                PWM_MAIN.TimestampHandler.initElement(PWM_MAIN.getObject("report_status_" + field));
-                console.log('called + ' + field);
+                var fieldData = fields[field];
+                htmlTable += '<tr><td>' + fieldData['label'] + '</td><td><span id="report_status_' + fieldData['key']  + '"</tr>';
+            }(field)); }
+            PWM_MAIN.getObject('statusTable').innerHTML = htmlTable;
+            for (var field in fields) {(function(field) {
+                var fieldData = fields[field];
+                PWM_MAIN.getObject('report_status_' + fieldData['key']).innerHTML = fieldData['value'];
+                if (fieldData['type'] === 'timestamp') {
+                    PWM_MAIN.TimestampHandler.initElement(PWM_MAIN.getObject("report_status_" + fieldData['key']));
+                }
             }(field)); }
         }
 

+ 0 - 165
server/src/test/java/password/pwm/svc/report/ReportServiceTest.java

@@ -1,165 +0,0 @@
-/*
- * Password Management Servlets (PWM)
- * http://www.pwm-project.org
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2018 The PWM Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package password.pwm.svc.report;
-
-import com.google.gson.reflect.TypeToken;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.WriterOutputStream;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import password.pwm.config.Configuration;
-import password.pwm.svc.report.ReportService.RecordIterator;
-import password.pwm.util.java.JsonUtil;
-
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Mockito.*;
-
-public class ReportServiceTest {
-    private static final Type USER_CACHE_RECORD_LIST_TYPE = new TypeToken<ArrayList<UserCacheRecord>>(){}.getType();
-
-    private Configuration configuration;
-    private ReportCsvUtility reportService;
-
-    @Before
-    public void setUp() throws Exception {
-        configuration = mock(Configuration.class);
-
-        // Call the real ReportService.outputToCsv() method, but mock the ReportService.iterator() method so it loads the user records from a json file.
-        reportService = mock(ReportCsvUtility.class);
-        doCallRealMethod().when(reportService).outputToCsv(any(OutputStream.class), anyBoolean(), any(Locale.class), any(Configuration.class), any(ReportColumnFilter.class));
-        doAnswer(new Answer<RecordIterator<UserCacheRecord>>() {
-            @Override
-            public RecordIterator<UserCacheRecord> answer(InvocationOnMock invocation) throws Throwable {
-                final String userRecordsJson = IOUtils.toString(getClass().getResourceAsStream("allUserRecords.json"));
-                final List<UserCacheRecord> userCacheRecords = JsonUtil.deserialize(userRecordsJson, USER_CACHE_RECORD_LIST_TYPE);
-                final Iterator<UserCacheRecord> userCacheRecordIterator = userCacheRecords.iterator();
-
-                RecordIterator<UserCacheRecord> recordIterator = new RecordIterator<UserCacheRecord>() {
-                    @Override
-                    public void close() {}
-
-                    @Override
-                    public void remove() {
-                        userCacheRecordIterator.remove();
-                    }
-
-                    @Override
-                    public boolean hasNext() {
-                        return userCacheRecordIterator.hasNext();
-                    }
-
-                    @Override
-                    public UserCacheRecord next() {
-                        return userCacheRecordIterator.next();
-                    }
-                };
-
-                return recordIterator;
-            }
-        }).when(reportService).iterator();
-    }
-
-    @Test
-    public void testOutputToCsv_normal() throws Exception {
-        // Set the desired filters
-        ReportColumnFilter columnFilter = new ReportColumnFilter();
-        setAllTrue(columnFilter);
-
-        // Test the reportService.outputToCsv method()
-        StringWriter outputWriter = new StringWriter();
-        reportService.outputToCsv(new WriterOutputStream(outputWriter), true, Locale.ENGLISH, configuration, columnFilter);
-
-        // Verify the results
-        String actual = outputWriter.toString().replaceAll("\r", "");
-        String expected = IOUtils.toString(getClass().getResourceAsStream("allUserRecordsReport.csv")).replaceAll("\r", "");
-        assertEqualsIgnoreLineEndings(actual, expected);
-    }
-
-    @Test
-    public void testOutputToCsv_noUserDnColumn() throws Exception {
-        // Set the desired filters
-        ReportColumnFilter columnFilter = new ReportColumnFilter();
-        setAllTrue(columnFilter);
-        columnFilter.setUserDnVisible(false);
-
-        // Test the reportService.outputToCsv method()
-        StringWriter outputWriter = new StringWriter();
-        reportService.outputToCsv(new WriterOutputStream(outputWriter), true, Locale.ENGLISH, configuration, columnFilter);
-
-        // Verify the results
-        String actual = outputWriter.toString().replaceAll("\r", "");
-        String expected = IOUtils.toString(getClass().getResourceAsStream("allUserRecordsReport-noUserDnColumn.csv")).replaceAll("\r", "");
-        assertEqualsIgnoreLineEndings(actual, expected);
-    }
-
-    @Test
-    public void testOutputToCsv_onlyUserDnColumn() throws Exception {
-        // Set the desired filters
-        ReportColumnFilter columnFilter = new ReportColumnFilter();
-        columnFilter.setUserDnVisible(true);
-
-        // Test the reportService.outputToCsv method()
-        StringWriter outputWriter = new StringWriter();
-        reportService.outputToCsv(new WriterOutputStream(outputWriter), true, Locale.ENGLISH, configuration, columnFilter);
-
-        // Verify the results
-        String actual = outputWriter.toString().replaceAll("\r", "");
-        String expected = IOUtils.toString(getClass().getResourceAsStream("allUserRecordsReport-onlyUserDnColumn.csv")).replaceAll("\r", "");
-        assertEqualsIgnoreLineEndings(actual, expected);
-    }
-
-    private void setAllTrue(ReportColumnFilter columnFilter) throws Exception {
-        for (Method method : columnFilter.getClass().getDeclaredMethods()) {
-            if (method.getName().startsWith("set")) {
-                method.invoke(columnFilter, true);
-            }
-        }
-    }
-
-    public static void assertEqualsIgnoreLineEndings(String actual, String expected) {
-        if (actual != null) {
-            actual = actual.replaceAll("\r\n", "\n");
-        }
-
-        if (expected !=null) {
-            expected = expected.replaceAll("\r\n", "\n");
-        }
-
-        assertThat(actual).isEqualTo(expected);
-    }
-
-
-}

+ 0 - 95
server/src/test/java/password/pwm/util/reports/ReportUtilsTest.java

@@ -1,95 +0,0 @@
-/*
- * Password Management Servlets (PWM)
- * http://www.pwm-project.org
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2018 The PWM Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package password.pwm.util.reports;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.Test;
-
-import password.pwm.svc.report.ReportColumnFilter;
-
-public class ReportUtilsTest {
-
-    @Test
-    public void testToReportColumnFilter() {
-        String desiredColumns = "username,userDN,ldapProfile,userGUID,accountExpirationTime,passwordExpirationTime,passwordChangeTime,responseSetTime,lastLoginTime,hasResponses,hasHelpdeskResponses,responseStorageMethod,responseFormatType,requiresPasswordUpdate,requiresResponseUpdate,requiresProfileUpdate,cacheTimestamp";
-        ReportColumnFilter reportColumnFilter = ReportUtils.toReportColumnFilter(desiredColumns);
-
-        // Verify the column name string gets translated into a ReportColumnFilter correctly:
-        assertThat(reportColumnFilter.isUserDnVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isLdapProfileVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isUsernameVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isUserGuidVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isAccountExpirationTimeVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isLastLoginTimeVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isPasswordExpirationTimeVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isPasswordChangeTimeVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isResponseSetTimeVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isHasResponsesVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isHasHelpdeskResponsesVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isResponseStorageMethodVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isResponseFormatTypeVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isRequiresPasswordUpdateVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isRequiresResponseUpdateVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isRequiresProfileUpdateVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isCacheTimestampVisible()).isEqualTo(true);
-
-        assertThat(reportColumnFilter.isEmailVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isPasswordStatusExpiredVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isPasswordStatusPreExpiredVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isPasswordStatusViolatesPolicyVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isPasswordStatusWarnPeriodVisible()).isEqualTo(false);
-    }
-
-    @Test
-    public void testToReportColumnFilter2() {
-        String desiredColumns = "username,email,passwordStatusExpired,passwordStatusPreExpired,passwordStatusViolatesPolicy,passwordStatusWarnPeriod";
-        ReportColumnFilter reportColumnFilter = ReportUtils.toReportColumnFilter(desiredColumns);
-
-        // Verify the column name string gets translated into a ReportColumnFilter correctly:
-        assertThat(reportColumnFilter.isUsernameVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isEmailVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isPasswordStatusExpiredVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isPasswordStatusPreExpiredVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isPasswordStatusViolatesPolicyVisible()).isEqualTo(true);
-        assertThat(reportColumnFilter.isPasswordStatusWarnPeriodVisible()).isEqualTo(true);
-
-        assertThat(reportColumnFilter.isUserDnVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isLdapProfileVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isUserGuidVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isAccountExpirationTimeVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isLastLoginTimeVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isPasswordExpirationTimeVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isPasswordChangeTimeVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isResponseSetTimeVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isHasResponsesVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isHasHelpdeskResponsesVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isResponseStorageMethodVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isResponseFormatTypeVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isRequiresPasswordUpdateVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isRequiresResponseUpdateVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isRequiresProfileUpdateVisible()).isEqualTo(false);
-        assertThat(reportColumnFilter.isCacheTimestampVisible()).isEqualTo(false);
-    }
-
-}

+ 0 - 37
server/supplemental/docker/Dockerfile

@@ -1,37 +0,0 @@
-FROM tomcat:jre8
-MAINTAINER Jason Rivard
-
-
-# setup environment
-RUN mkdir /config ; mkdir /appliance
-ENV JAVA_HOME /usr
-ENV PWM_APPLICATIONPATH /config
-ENV PWM_APPLICATIONFLAGS Appliance,ManageHttps
-
-VOLUME /config
-EXPOSE 8443
-
-RUN mkdir /usr/local/pwm
-
-# clear tomcat webapps directory
-RUN rm -rf /usr/local/tomcat/webapps/* ; mkdir /usr/local/tomcat/webapps/ROOT
-
-# copy war
-COPY pwm.war /appliance/pwm.war
-
-# copy scripts
-COPY startup.sh /appliance/startup.sh
-COPY shell.sh /appliance/shell.sh
-
-COPY ROOT-index.jsp /usr/local/tomcat/webapps/ROOT/index.jsp
-COPY server.xml.source /appliance/server.xml.source
-RUN chmod a+x /appliance/startup.sh; chmod a+x /appliance/shell.sh
-
-VOLUME /config
-EXPOSE 8443
-
-WORKDIR /appliance
-CMD ./startup.sh
-
-
-

+ 0 - 8
server/supplemental/docker/ROOT-index.jsp

@@ -1,8 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>Redirect</title>
-  <meta http-equiv="refresh" content="0;URL='/pwm'" />
-</head>
-<body>
-</body>
-</html>     

+ 0 - 51
server/supplemental/docker/make-docker-image.sh

@@ -1,51 +0,0 @@
-#!/usr/bin/env bash
-#PWM Docker Image Build Script
-
-DOCKER_IMAGE_NAME="pwm"
-SAVED_IMAGE_NAME="pwm-docker-image"
-
-start=`date +%s`
-if [ "$(id -u)" != "0" ]; then
-   echo "This script must be run as root"
-   exit 1
-fi
-
-if [ ! -f pwm.war ];
-then
-    echo "pwm.war file not found in current directory"
-    exit 1
-fi
-
-echo "Clearing previous build artifacts and images..."
-docker rmi $DOCKER_IMAGE_NAME
-rm -f $SAVED_IMAGE_NAME.tar
-rm -f $SAVED_IMAGE_NAME.tar.gz
-
-echo "Beginning docker build process..."
-docker build --pull=true -t $DOCKER_IMAGE_NAME .
-if [ $? -ne 0 ];
-then
-    echo "Docker build failed"
-    exit 1
-fi
-
-echo "Docker build complete" 
-
-echo "Beginning docker image save..."
-docker save --output=$SAVED_IMAGE_NAME.tar $DOCKER_IMAGE_NAME
-if [[ $? -ne 0 ]];
-then
-    echo "Docker image save failed"
-    exit 1
-fi
-
-echo "Docker image save complete"
-ls -l $SAVED_IMAGE_NAME.*
-
-echo "Beginning image gzip..."
-gzip $SAVED_IMAGE_NAME.tar
-echo "Image gzip complete"
-ls -l $SAVED_IMAGE_NAME.*
-end=`date +%s`
-runtime=$((end-start))
-echo "total docker script runtime: $runtime seconds"

+ 0 - 29
server/supplemental/docker/readme.txt

@@ -1,29 +0,0 @@
-This docker build script and artifacts can be used to create a PWM docker image.
-
-1) Place desired pwm.war in this directory (it must be named pwm.war)
-2) Execute the make-docker-image.sh script
-
-This script will create a docker image tagged as 'pwm', and also create a pwm-docker-image.tar.gz save of the image.
-
-Docker image usage notes:
-
---Load docker image from file
-docker load --input=pwm-docker-image.tar.gz
-
---Create docker container and run--
-docker run -d --name <container name> -p 8443:8443 pwm
-
-This will set the https port to 8443.  You can also manage the exposed configuration volume of /config if you want to preserve
-the /config directory when you destroy/create the container in the future.  The docker image will place all of it's configuration
-and runtime data in the /config volume.
-
---Run PWM shell inside the container--
-To reset the https config, unlock the config or other commands, you can execute the PWM shell inside the running docker container:
-
-docker exec -it <container name> /appliance/shell.sh
-
-
-
-
-
-

+ 0 - 22
server/supplemental/docker/server.xml.source

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Server port="8005" shutdown="SHUTDOWN">
-  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
-  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
-  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
-  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
-  <GlobalNamingResources>
-    <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
-  </GlobalNamingResources>
-  <Service name="Catalina">
-    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/appliance/https-cert" keystorePass="password" keyAlias="https" clientAuth="false" sslEnabledProtocols="%TLS_PROTOCOLS%" ciphers="%TLS_CIPHERS%"/>
-    <Engine name="Catalina" defaultHost="localhost">
-      <Realm className="org.apache.catalina.realm.LockOutRealm">
-        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
-      </Realm>
-      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
-        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
-      </Host>
-    </Engine>
-  </Service>
-</Server>

+ 0 - 8
server/supplemental/docker/shell.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-# Run command line shell environment inside the docker container.  Execute using
-# docker exec -it <container name> /appliance/shell.sh
-
-chmod a+x /usr/local/tomcat/webapps/pwm/WEB-INF/command.sh
-cd /usr/local/tomcat/webapps/pwm/WEB-INF
-./command.sh Shell 
-

+ 0 - 32
server/supplemental/docker/startup.sh

@@ -1,32 +0,0 @@
-#!/usr/bin/env bash
-#PWM Docker Container startup script
-
-PWM_HOME=/usr/local/tomcat/webapps/pwm
-TOMCAT_HOME=/usr/local/tomcat
-
-#Explode war
-rm -rf $PWM_HOME
-mkdir $PWM_HOME
-unzip /appliance/pwm.war -d $PWM_HOME
-
-#fix script executable flag
-cd $PWM_HOME/WEB-INF
-chmod a+x command.sh
-
-# update the https certificate file used by tomcat
-rm /appliance/https-cert
-./command.sh ExportHttpsKeyStore /appliance/https-cert https password
-
-# update the https configuration used by tomcat
-rm $TOMCAT_HOME/conf/server.xml
-./command.sh ExportHttpsTomcatConfig /appliance/server.xml.source $TOMCAT_HOME/conf/server.xml
-
-# start tomcat
-rm -rf $TOMCAT_HOME/work/*
-useradd pwm
-chown -R pwm. $TOMCAT_HOME
-chown -R pwm. /config
-cd $TOMCAT_HOME/bin
-su pwm -c './catalina.sh run'
-
-