<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ JBoss, Home of Professional Open Source.
  ~ Copyright 2015 Red Hat, Inc., and individual contributors
  ~ as indicated by the @author tags.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.jboss</groupId>
        <artifactId>jboss-parent</artifactId>
        <version>52</version>
    </parent>

    <groupId>org.wildfly.security.elytron-web</groupId>
    <artifactId>elytron-web-parent</artifactId>
    <version>4.2.0.Final</version>
    <packaging>pom</packaging>

    <name>WildFly Elytron Web - Parent</name>
    <description>Integration project for integrating Elytron based HTTP authentication with web containers.</description>
    <url>https://wildfly-security.github.io/wildfly-elytron/</url>

    <licenses>
        <license>
            <name>Apache License 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <developers>
        <developer>
            <name>Darran Lofthouse</name>
            <email>darran.lofthouse@jboss.com</email>
            <organization>WildFly</organization>
            <organizationUrl>https://www.wildfly.org/</organizationUrl>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:git@github.com:wildfly-security/elytron-web.git</connection>
        <developerConnection>scm:git:git@github.com:wildfly-security/elytron-web.git</developerConnection>
        <url>https://github.com/wildfly-security/elytron-web</url>
      <tag>4.2.0.Final</tag>
    </scm>

    <properties>
        <version.io.undertow>2.3.24.Final</version.io.undertow>
        <version.org.wildfly.security.elytron>2.8.4.Final</version.org.wildfly.security.elytron>
        <version.org.wildfly.common>2.0.1</version.org.wildfly.common>
        <version.org.wildfly.security.jakarta.elytron-ee>3.2.0.Final</version.org.wildfly.security.jakarta.elytron-ee>
        <version.org.apache.httpcomponents.httpclient>4.5.14</version.org.apache.httpcomponents.httpclient>
        <version.org.apache.httpcomponents.httpcore>4.4.16</version.org.apache.httpcomponents.httpcore>
        <version.org.jboss.logging>3.6.3.Final</version.org.jboss.logging>
        <version.org.jboss.logmanager>2.1.19.Final</version.org.jboss.logmanager>
        <version.org.jboss.logmanager.log4j-jboss>1.2.0.Final</version.org.jboss.logmanager.log4j-jboss>
        <version.org.jboss.modules>2.1.6.Final</version.org.jboss.modules>
        <version.org.jboss.xnio>3.8.16.Final</version.org.jboss.xnio>
        <version.junit.junit>4.13.2</version.junit.junit>
        <version.org.infinispan>16.0.9</version.org.infinispan>
        <version.jakarta.json.jakarta-json-api>2.0.0</version.jakarta.json.jakarta-json-api>
        <version.jakarta.servlet.jakarta-servlet-api>6.0.0</version.jakarta.servlet.jakarta-servlet-api>
        <version.org.glassfish.jakarta.json>2.0.0</version.org.glassfish.jakarta.json>
        <version.com.nimbusds.nimbus-jose-jwt>9.31</version.com.nimbusds.nimbus-jose-jwt>
        <version.org.wildfly.checkstyle-config>1.0.8.Final</version.org.wildfly.checkstyle-config>

        <test.level>INFO</test.level>
        <!-- Checkstyle configuration -->
        <linkXRef>false</linkXRef>

        <!-- Java Version Information -->
        <jdk.min.version>25</jdk.min.version>
        <maven.compiler.release>17</maven.compiler.release>

        <!-- Nexus Settings -->
        <nexus.repository.staging>wildfly-staging</nexus.repository.staging>
        <nexus.staging.tag>elytron-web-${project.version}</nexus.staging.tag>
        <nexus.repository.release>wildfly-security</nexus.repository.release>

        <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>

        <modular.jdk.args />
        <modular.jdk.props />
    </properties>

    <modules>
        <module>bare-http-util</module>
        <module>undertow</module>
        <module>undertow-common-test</module>
        <module>undertow-servlet</module>
    </modules>

    <build>
        <resources>
            <resource>
                <directory>${project.build.sourceDirectory}</directory>
                <includes>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>
           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
            </plugin>
            <plugin>
                <!-- Release Plugin Configuration -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <!-- Prepare -->
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                    <tagNameFormat>@{project.version}</tagNameFormat>
                    <pushChanges>false</pushChanges>
                    <!-- Perform -->
                    <localCheckout>true</localCheckout>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>

                <!-- Surefire -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${version.surefire.plugin}</version>
                    <configuration>
                        <argLine>-server</argLine>
                        <systemPropertyVariables>
                            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                            <log4j.defaultInitOverride>true</log4j.defaultInitOverride>
                            <test.level>${test.level}</test.level>
                            <java.net.preferIPv4Stack>true</java.net.preferIPv4Stack>
                            <java.net.preferIPv6Addresses>false</java.net.preferIPv6Addresses>
                            <jgroups.bind_addr>127.0.0.1</jgroups.bind_addr>
                        </systemPropertyVariables>
                        <redirectTestOutputToFile>${maven.test.redirectTestOutputToFile}</redirectTestOutputToFile>
                        <trimStackTrace>false</trimStackTrace>
                        <printSummary>true</printSummary>
                        <includes>
                            <include>**/*Test.java</include>
                            <include>**/*TestSuite.java</include>
                        </includes>
                        <forkMode>always</forkMode>
                    </configuration>
                </plugin>

                <!-- JAR -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${version.jar.plugin}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>org.wildfly.security._private.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>

                <!-- Checkstyle -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>${version.checkstyle.plugin}</version>
                    <configuration>
                        <configLocation>wildfly-checkstyle/checkstyle.xml</configLocation>
                        <consoleOutput>true</consoleOutput>
                        <failsOnError>true</failsOnError>
                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        <useFile />
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.wildfly.checkstyle</groupId>
                            <artifactId>wildfly-checkstyle-config</artifactId>
                            <version>${version.org.wildfly.checkstyle-config}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.puppycrawl.tools</groupId>
                            <artifactId>checkstyle</artifactId>
                            <version>${version.checkstyle}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>check-style</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>checkstyle</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencyManagement>
        <dependencies>
            <!-- 
                  Elytron Web Dependencies
             -->
             
            <dependency>
                <groupId>org.wildfly.security.elytron-web</groupId>
                <artifactId>bare-http-util</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security.elytron-web</groupId>
                <artifactId>undertow-server</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security.elytron-web</groupId>
                <artifactId>undertow-common-test</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security.elytron-web</groupId>
                <artifactId>undertow-servlet</artifactId>
                <version>${project.version}</version>
            </dependency>


             <!-- 
                  External Dependencies
              -->

            <dependency>
                <groupId>io.undertow</groupId>
                <artifactId>undertow-core</artifactId>
                <version>${version.io.undertow}</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.jboss.xnio</groupId>
                        <artifactId>xnio-nio</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.undertow</groupId>
                <artifactId>undertow-servlet</artifactId>
                <version>${version.io.undertow}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${version.jakarta.servlet.jakarta-servlet-api}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging</artifactId>
                <version>${version.org.jboss.logging}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.common</groupId>
                <artifactId>wildfly-common</artifactId>
                <version>${version.org.wildfly.common}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-auth-server</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-auth-server-http</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-auth-server-deprecated</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-base</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-credential</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-util</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security.jakarta</groupId>
                <artifactId>jakarta-authentication</artifactId>
                <version>${version.org.wildfly.security.jakarta.elytron-ee}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security.jakarta</groupId>
                <artifactId>jakarta-authorization</artifactId>
                <version>${version.org.wildfly.security.jakarta.elytron-ee}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-ssl</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            
            <!--
                  Test Scope Only
             -->
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-realm</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-realm-token</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-basic</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-bearer</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-cert</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-digest</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-external</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-form</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-spnego</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-http-sso</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-password-impl</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-tests-common</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <type>test-jar</type>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-x500-principal</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${version.junit.junit}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${version.org.apache.httpcomponents.httpclient}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>${version.org.apache.httpcomponents.httpcore}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.logmanager</groupId>
                <artifactId>jboss-logmanager</artifactId>
                <version>${version.org.jboss.logmanager}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.logmanager</groupId>
                <artifactId>log4j-jboss-logmanager</artifactId>
                <version>${version.org.jboss.logmanager.log4j-jboss}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.modules</groupId>
                <artifactId>jboss-modules</artifactId>
                <version>${version.org.jboss.modules}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.xnio</groupId>
                <artifactId>xnio-api</artifactId>
                <version>${version.org.jboss.xnio}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.xnio</groupId>
                <artifactId>xnio-nio</artifactId>
                <version>${version.org.jboss.xnio}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.infinispan</groupId>
                <artifactId>infinispan-core</artifactId>
                <version>${version.org.infinispan}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.json</groupId>
                <artifactId>jakarta.json-api</artifactId>
                <version>${version.jakarta.json.jakarta-json-api}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>jakarta.json</artifactId>
                <version>${version.org.glassfish.jakarta.json}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.nimbusds</groupId>
                <artifactId>nimbus-jose-jwt</artifactId>
                <version>${version.com.nimbusds.nimbus-jose-jwt}</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>public-jboss</id>
            <name>Public JBoss Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>public-jboss-plugins</id>
            <name>Public JBoss Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        </pluginRepository>
    </pluginRepositories>

    <profiles>
        <!-- Profile for multi-version testing using Maven Toolchains -->
        <!-- Activated when jdk.test.version property is set -->
        <!-- Usage: mvn test -Djdk.test.version=17 -->
        <!-- Optional: mvn test -Djdk.test.version=17 -Djdk.test.vendor=semeru -->
        <profile>
            <id>toolchain-test</id>
            <activation>
                <property>
                    <name>jdk.test.version</name>
                </property>
            </activation>
            <properties>
                <!-- Default to Temurin if vendor not specified -->
                <jdk.test.vendor>temurin</jdk.test.vendor>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <jdkToolchain>
                                <version>${jdk.test.version}</version>
                                <vendor>${jdk.test.vendor}</vendor>
                            </jdkToolchain>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- Profile for comprehensive multi-version testing -->
        <!-- Tests with Java 17, 21, and 25 sequentially -->
        <!-- Usage: mvn install -Ptest-all-versions -->
        <!-- Optional: mvn install -Ptest-all-versions -Djdk.test.vendor=semeru -->
        <profile>
            <id>test-all-versions</id>
            <properties>
                <!-- Default to Temurin if vendor not specified -->
                <jdk.test.vendor>temurin</jdk.test.vendor>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <executions>
                            <!-- Test with Java 17 -->
                            <execution>
                                <id>test-java-17</id>
                                <goals>
                                    <goal>test</goal>
                                </goals>
                                <configuration>
                                    <jdkToolchain>
                                        <version>17</version>
                                        <vendor>${jdk.test.vendor}</vendor>
                                    </jdkToolchain>
                                    <reportsDirectory>${project.build.directory}/surefire-reports-java17-${jdk.test.vendor}</reportsDirectory>
                                </configuration>
                            </execution>

                            <!-- Test with Java 21 -->
                            <execution>
                                <id>test-java-21</id>
                                <goals>
                                    <goal>test</goal>
                                </goals>
                                <configuration>
                                    <jdkToolchain>
                                        <version>21</version>
                                        <vendor>${jdk.test.vendor}</vendor>
                                    </jdkToolchain>
                                    <reportsDirectory>${project.build.directory}/surefire-reports-java21-${jdk.test.vendor}</reportsDirectory>
                                </configuration>
                            </execution>

                            <!-- Test with Java 25 -->
                            <execution>
                                <id>test-java-25</id>
                                <goals>
                                    <goal>test</goal>
                                </goals>
                                <configuration>
                                    <jdkToolchain>
                                        <version>25</version>
                                        <vendor>${jdk.test.vendor}</vendor>
                                    </jdkToolchain>
                                    <reportsDirectory>${project.build.directory}/surefire-reports-java25-${jdk.test.vendor}</reportsDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
