Fork me on GitHub

Rat (Release Audit Tool) results

The following document contains the results of Rat (Release Audit Tool).

*****************************************************
Summary
-------
Generated at: 2025-06-20T14:12:22+02:00

Notes: 2
Binaries: 3
Archives: 0
Standards: 126

Apache Licensed: 71
Generated Documents: 8

JavaDocs are generated, thus a license header is optional.
Generated files do not require license headers.

47 Unknown Licenses

*****************************************************

Files with unapproved licenses:

  .asf.yaml
  .gitconfig
  src/main/resources/archetype-resources/docs/DOCKER-PODMAN-COMPOSE-README.md
  src/main/resources/archetype-resources/docs/README.md
  src/main/resources/archetype-resources/src/main/data/sample-mysql-data/_application-data.sql
  src/main/resources/archetype-resources/src/main/data/sample-mysql-data/_turbine-security-data.sql
  src/main/resources/archetype-resources/src/main/docker-resources/app/Dockerfile
  src/main/resources/archetype-resources/src/main/docker-resources/app/settings.xml
  src/main/resources/archetype-resources/src/main/docker-resources/db/mariadb/Dockerfile
  src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/conf/my.cnf
  src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/Dockerfile
  src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/init/data.sql
  src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/log/log.out
  src/main/resources/archetype-resources/src/main/docker-resources/docker-compose.yml
  src/main/resources/archetype-resources/src/main/webapp/logs/KEEPME
  src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
  src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Error.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/TestSecure.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm
  src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm
  src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
  src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
  src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
  src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-ee10-env.xml
  src/test/resources/projects/first/archetype.properties
  src/test/resources/projects/first/goal.txt

*****************************************************

*****************************************************
  Files with Apache License headers will be marked AL
  Binary files (which do not require any license headers) will be marked B
  Compressed archives will be marked A
  Notices, licenses etc. will be marked N
 !????? .asf.yaml
 !????? .gitconfig
  N     LICENSE
  N     NOTICE
  AL    pom.xml
  AL    src/changes/changes.xml
 !????? src/main/resources/archetype-resources/docs/DOCKER-PODMAN-COMPOSE-README.md
 !????? src/main/resources/archetype-resources/docs/README.md
  AL    src/main/resources/archetype-resources/pom.xml
 !????? src/main/resources/archetype-resources/src/main/data/sample-mysql-data/_application-data.sql
 !????? src/main/resources/archetype-resources/src/main/data/sample-mysql-data/_turbine-security-data.sql
 !????? src/main/resources/archetype-resources/src/main/docker-resources/app/Dockerfile
 !????? src/main/resources/archetype-resources/src/main/docker-resources/app/settings.xml
 !????? src/main/resources/archetype-resources/src/main/docker-resources/db/mariadb/Dockerfile
 !????? src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/conf/my.cnf
 !????? src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/Dockerfile
 !????? src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/init/data.sql
 !????? src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/log/log.out
 !????? src/main/resources/archetype-resources/src/main/docker-resources/docker-compose.yml
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
  AL    src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
  AL    src/main/resources/archetype-resources/src/main/java/L10N.properties
  AL    src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
  AL    src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
  AL    src/main/resources/archetype-resources/src/main/java/L10N_ko_KR.properties
  AL    src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
  AL    src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRole.java
  GEN   src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRolePeerImpl.java
  AL    src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
  AL    src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
  AL    src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
  AL    src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
  AL    src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
  AL    src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
  AL    src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
 !????? src/main/resources/archetype-resources/src/main/webapp/logs/KEEPME
 !????? src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
  B     src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
  B     src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
  B     src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
  AL    src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
  AL    src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
  AL    src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/layouts/Default.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/macros/applicationMacros.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/navigations/Menu.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Error.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Index.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Login.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Password.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/showRecords.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/TestSecure.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/templates/flux/macros/fluxMacros.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm
 !????? src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
 !????? src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j2.xml
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
 !????? src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
 !????? src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
 !????? src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-ee10-env.xml
  AL    src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
  AL    src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
  AL    src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
  AL    src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
  AL    src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties
  AL    src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
  AL    src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml
  AL    src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java
  AL    src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java
  AL    src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
  AL    src/main/resources/archetype-resources/src/test/resources/log4j.xml
  AL    src/main/resources/META-INF/maven/archetype-metadata.xml
 !????? src/test/resources/projects/first/archetype.properties
 !????? src/test/resources/projects/first/goal.txt
 
*****************************************************

 Printing headers for text files without a valid license header...
 
=====================================================
== File: .asf.yaml
=====================================================
github:
  features:
    # Enable issue management
    issues: true

=====================================================
== File: .gitconfig
=====================================================
# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/

=====================================================
== File: src/main/resources/archetype-resources/docs/DOCKER-PODMAN-COMPOSE-README.md
=====================================================
# Introduction

This is to help developers to get fast a running development environment for debugging.

To use it in production you may need to carefully review all configurations and adjust.

The Container based environment is to test/develop a Turbine app using a container based test database. 

The build should take place outside the container.

It is based on one docker-compose.yml file and two Dockerfiles and could be run with podman-compose (after some checks are done, see below)..

Docker compose uses currently two customized services: **app** (maven:latest) and **db** (mariadb:10.10). 

## Podman und Podman-compose

- If using Podman (podman-compose) you have to add registry docker.io/library/ in etc/containers/registries.conf (or add a namespace before tag name in FROM of DOCKERFILE).
- To allow inter container communication you should enable in /etc/containers/container.conf  
 
    [network]
    network_backend = "netavark"
    
- In docker-compose.yml networks has to be enabled because of this.

 (tested for Debian bookworm, podman 4.3.1, running in root-less environment). You could check, that it is set by running 

    podman info | grep network
    
. And just replace below docker compose with podman-compose (most commands)!

## Note

- reference database is now Mariadb (mySQL may be used also after some adaptions in DOCKERFILE, but it is not tested in the first place). 
- Instead of using maven as the app service a Jetty container might be the better choice as currently console reloading might not work. 
To be able to use other maven tasks (in the container) in this case makes this nevertheless a reasonable choice.

# Prepare

To run the build from the archetypes root use the following mvn command:

    mvn install -Pdocker,mysql 
or
    mvn install -Pdocker,mariadb
    
IMPORTANT: You habe to enable the profile mariadb or mysql to define the backend.
    
### Build Note 

If you have already generated this with mvn archetype:generate within the same host environment this step could be omitted.


=====================================================
== File: src/main/resources/archetype-resources/docs/README.md
=====================================================
# Quick Guide to using the new Turbine maven archetype for skeleton application generation

Maven Archetype to generate a webapp utilizing Turbine

## Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

### Prerequisites

* Java 17 JDK or later (Turbine 6.0 and later), before Java 8
* [MySQL](https://www.mysql.com/) - Database Server or [Docker] (https://docs.docker.com/get-docker/)
* [Maven](https://maven.apache.org/) - Dependency Management

You should have Java 11 or later installed.  The archetype sets up a new application using MySQL as the default database store.  However, you can adjust this to use any database supported by Apache Torque 5.x. If not using Docker, you should therefore be at least have a database instance where you have access rights to create a new database schema and populate it with the tables the application generates.  Finally, this is a maven archetype, so of course you should install a local version of Maven (tested with 3.8.3).  

## About this archetype 

Turbine Version: Turbine x ~ Turbine-webapp-x

### Integration Test (if you checked out this [Archetype Generate Repository](https://github.com/apache/turbine-archetypes.git))

    mvn integration-test 

N.B.: This builds an integrationtest project in target/test-classes/projects/first/project/integrationtest (if you provide -Ddocker=true with docker enabled configuration, otherwise you need a hosted mysql database). You could start testing this archetype here..

- Follow either Local database Setup or Docker Setup

### Docker Setup

- If docker is available you could use the Docker build setup. Follow instructions here: [DOCKER README] (DOCKER-README.md).

### Local Database Setup

First, you should have a local database installed and configured prior to 
beginning the application setup below.

As we are using MySQL by default you need to create the database in MySQL (server version should be at least 5.5), e.g. with

```sh
mysql -u <user> -p
mysql> create database helloWorld;
mysql> \q
```

or other tools. The database should have been started and the database user granted enough rights.

### Maven archetype 

Next, you can invoke the Maven archetype for turbine-webapp-7.0 from 

=====================================================
== File: src/main/resources/archetype-resources/src/main/data/sample-mysql-data/_application-data.sql
=====================================================

##
## application-data.sql
##
## Torque will not autogenerate these files anymore - please run
## this SQL code maually to get your application up and running
##

INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (1, 'Donald', 'Knuth');
INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (2, 'Mickey', 'Mouse' );
INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (3, 'Bill', 'Bryson' );

INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 1, 1, 'The Art of Computer Programming', 'Computer Science');
INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 2, 2, 'Disney: Behind the Scenes', 'Fiction' );
INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 3, 3, 'A Walk in the Woods', 'Fiction');

=====================================================
== File: src/main/resources/archetype-resources/src/main/data/sample-mysql-data/_turbine-security-data.sql
=====================================================
##
## turbine-security-data.sql
##
## Torque will not autogenerate these files anymore - but sql-maven-plugin!
## If not, please run
## this SQL code manually to get your application up and running
##
SET FOREIGN_KEY_CHECKS=0;

INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
    VALUES (1,'admin','password','','Admin');

INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
    VALUES (2,'user','password','','User');
    
INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
    VALUES (3,'anon','nopw','','Anon');

INSERT INTO TURBINE_PERMISSION (`PERMISSION_ID`, `PERMISSION_NAME`) VALUES
(2, 'Turbine'),
(1, 'TurbineAdmin');

INSERT INTO TURBINE_ROLE (`ROLE_ID`, `ROLE_NAME`) VALUES
(1, 'turbineadmin'),
(2, 'turbineuser');

INSERT INTO TURBINE_GROUP (`GROUP_ID`, `GROUP_NAME`) VALUES
(1, 'global'),
(2, 'Turbine');

INSERT INTO TURBINE_ROLE_PERMISSION (`ROLE_ID`, `PERMISSION_ID`) VALUES
(1, 1),
(2, 2);

INSERT INTO TURBINE_USER_GROUP_ROLE (`USER_ID`, `GROUP_ID`, `ROLE_ID`) VALUES
(1, 1, 1),
(1, 2, 1),
(2, 2, 2),
(2, 1, 2);

-- 
ALTER TABLE TURBINE_USER MODIFY COLUMN USER_ID INT auto_increment;
ALTER TABLE TURBINE_PERMISSION MODIFY COLUMN PERMISSION_ID INT auto_increment;
ALTER TABLE TURBINE_ROLE MODIFY COLUMN ROLE_ID INT auto_increment;
ALTER TABLE TURBINE_GROUP MODIFY COLUMN GROUP_ID INT auto_increment;


##-- use ID_TABLE  with idMethod="idbroker" and set appropriate start_id and end_id 
##-- INSERT INTO ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1,'TURBINE_USER',start_id, end_id);
    

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/app/Dockerfile
=====================================================
FROM maven:latest

# cft hub.docker.com/r/library/maven
# not used, as in docker-compose m2repo is set
ADD ./docker-resources/app/settings.xml /usr/share/maven/ref/settings.xml

# Set our working directory inside the image

#ADD pom.xml /myapp/pom.xml
#ADD src/ /myapp/src/

WORKDIR /myapp

# build app outside docker
# no build stage volumes: https://github.com/moby/moby/issues/38366
# run build process outside, requires having maven and java installed in host system.
# uncomment only, if you have NO snapshots and you a reason to build it inside the container
# RUN mvn -f /myapp/pom.xml clean package

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/app/settings.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0    
	 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--settings-->
  <!-- localRepository set -->
 <localRepository>/m2repo</localRepository>
 <usePluginRegistry>false</usePluginRegistry>
 <offline>false</offline>
 <pluginGroups>
    <pluginGroup>org.eclipse.jetty</pluginGroup>
 </pluginGroups> 
 <profiles>
	   <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>releases</id>
          <url>https://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>false</enabled></snapshots>
        </repository>
        <repository>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
          <id>snapshots</id>
          <url>https://snapshots</url>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>releases</id>
          <url>https://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
		 <pluginRepository>
         <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
          <id>snapshots</id>
          <url>https://snapshots</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
    <profile> 
      <id>repo1</id>
      <activation>

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/db/mariadb/Dockerfile
=====================================================
# mariadb uses docker-entrypoint
# podman requires docker.io/library in registries.conf
FROM mariadb:10.10 

# That file does the DB initialization but also runs mysql daemon, by removing the last line it will only init
#RUN ["/bin/sed", "-i", "s/exec \"$@\"/echo \"not running $@\"/", "/usr/local/bin/docker-entrypoint.sh"]

#
# check where and what configurations are read with e.g.
# docker-compose run db /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
# docker run <image> /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"

ARG DB_CONTEXT
ARG MARIADB_ROOT
ARG MARIADB_ROOT_PASSWORD
ARG MARIADB_DATABASE
ARG MARIADB_USER
ARG MARIADB_PASSWORD

# required, to create
ENV DB_CONTEXT ${DB_CONTEXT}
ENV MARIADB_ROOT=${MARIADB_ROOT}
ENV MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}

ENV MARIADB_DATABASE=${MARIADB_DATABASE}
ENV MARIADB_USER=${MARIADB_USER}
ENV MARIADB_PASSWORD=${MARIADB_PASSWORD}

COPY generated-sql/torque/mysql /generated-sql-init
# dependent sql should be name sorted after init.sql
# add what you need, avoid duplicate keys
RUN cat /generated-sql-init/*.sql > /docker-entrypoint-initdb.d/init.sql

COPY data/sample-mysql-data /generated-sql-post-init
RUN cat /generated-sql-post-init/*.sql > /docker-entrypoint-initdb.d/post_init.sql

# --chomd=600 --chown=mysql:mysql throws error
COPY ${DB_CONTEXT}/mysql/conf/ /etc/mysql/conf.d

USER mysql

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/conf/my.cnf
=====================================================
# read https://hub.docker.com/_/mysql/
# 

[mysqld]

collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4

tls_version=TLSv1.2,TLSv1.3

character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci


# in mysql image VOLUME /var/lib/mysql and any changes to this directory 
# during build process might got lost after the build step is done 
# match db_data in docker-compose
# therefore we us a copy in Dockerfile, no uncomment needed
# datadir     = /initialized-db

#tmpdir          = /tmp

# default 0.0.0.0,  if this is 127.0.0.1 and using docker this restricts listening to only inside container, 
# which does not make sense in docker-compose services 
# skip-networking,
#bind-address = 0.0.0.0

[mysql]

default-character-set=utf8mb4

tee=/var/log/mysql/log.out

[mysqld_safe]

nice            = 0


=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/Dockerfile
=====================================================
# mariadb uses docker-entrypoint
# podman requires docker.io/library in registries.conf
FROM mariadb:10.10 

# That file does the DB initialization but also runs mysql daemon, by removing the last line it will only init
#RUN ["/bin/sed", "-i", "s/exec \"$@\"/echo \"not running $@\"/", "/usr/local/bin/docker-entrypoint.sh"]

#
# check where and what configurations are read with e.g.
# docker-compose run db /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
# docker run <image> /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"

ARG DB_CONTEXT
ARG MYSQL_ROOT
ARG MYSQL_ROOT_PASSWORD
ARG MYSQL_DATABASE
ARG MYSQL_USER
ARG MYSQL_PASSWORD

# required, to create
ENV DB_CONTEXT ${DB_CONTEXT}
ENV MYSQL_ROOT=${MYSQL_ROOT}
ENV MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}

ENV MYSQL_DATABASE=${MYSQL_DATABASE}
ENV MYSQL_USER=${MYSQL_USER}
ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}

COPY generated-sql/torque/mysql /generated-sql-init
# dependent sql should be name sorted after init.sql
# add what you need, avoid duplicate keys
RUN cat /generated-sql-init/*.sql > /docker-entrypoint-initdb.d/init.sql

COPY data/sample-mysql-data /generated-sql-post-init
RUN cat /generated-sql-post-init/*.sql > /docker-entrypoint-initdb.d/post_init.sql

COPY ${DB_CONTEXT}/mysql/conf/ /etc/mysql/conf.d

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/init/data.sql
=====================================================

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/db/mysql/log/log.out
=====================================================

=====================================================
== File: src/main/resources/archetype-resources/src/main/docker-resources/docker-compose.yml
=====================================================
# service configuration for our dockerized Java app
version: '3.7'

services:
  app:
    networks: 
      - back-tier
    # use the Dockerfile next to this file
    build:
      context: ../
      dockerfile: ./docker-resources/app/Dockerfile
    # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=0.0.0.0:9000,server=y,suspend=y, if remote debugging app is required
    environment:
      - MAVEN_OPTS=
    
    # this runs the app server in the container, be sure not to filter resources once again!
    command: [ mvn, jetty:run, "-Pdocker,${db}" ]
    ports:
      - "8081:8081"
      # remote debugging port, uncomment if not needed
      - "9000:9000"
      
    # podman required to support to allow outside pod  not using localhost, but service name
    # networks: "container:docker-resources_db_1"

    restart: always 
    # makes the app container aware of the DB container   
    depends_on:
      - db 
    # 
    #expose:
    #  - "3000"

    volumes:
      # project root with pom.xml and src folder
      - ../../:/myapp
      # or use local app/settings.xml
      - '#var("app_volume_local_repo"):/m2repo'

  db:
    networks:
      - back-tier
    # set the build context 
    build: 
      context: ../
      dockerfile: ./docker-resources/db/${db}/Dockerfile
      args:
        DB_CONTEXT: ./docker-resources/db
        MARIADB_ROOT: root
        MARIADB_ROOT_PASSWORD: changeit

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/logs/KEEPME
=====================================================

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
=====================================================
<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    <Resource name="${turbine_database_jndipath}" global="${turbine_database_jndipath}" auth="Container" type="javax.sql.DataSource" 
        driverClassName="${turbine_database_driver}" 
        url="${turbine_database_url}${turbine_database_name}?serverTimezone=${turbine_database_timezone}"
        username="${turbine_database_user}" password="${turbine_database_password}" 
        maxTotal="100" maxIdle="20" minIdle="5" maxWaitMillis="10000"/>
</Context>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Error.vm
=====================================================
E R R O R 

$message

$error

$exception

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/TestSecure.vm
=====================================================
#if ( $data.getMessage() )
	#info( $data.getMessage() )
#end

## its null for anon 
#if ( $!related.getUserrole() )
<h1> Secured #if ($!user) User#else Role #end Access Page </h1>
     #if ($!user && $!success)<div align="center"><h1>$success</h1></div>#end
     <p>   
          #if ($user)
             Hi "$user.firstName, $user.lastName"
          #else
          Role: $related.getUserrole()
          #end
         <script type="text/javascript">
          var jsonObject;
          #if ($user)
           jsonObject = $related.getJson($user,"org.apache.turbine.om.security.User", null, true,"lastLogin", "permStorage");
           if (jsonObject != undefined && jsonObject.permStorage == undefined) {
              alert("successfully read JSON:" + jsonObject.lastLogin);
           } else {
              alert("error json object not as expected" + JSON.stringify(jsonObject));
           }
         #end
        </script>
     </p>
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm
=====================================================
<table class="w3-table">
  <tr>
    <td colspan="2" align="left">
      $navigation.setTemplate("/FluxTop.vm")
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <hr noshade size="1">
    </td>                
  </tr>
  <tr>
    <td width="10%" valign="top" align="left">
      $navigation.setTemplate("/FluxMenu.vm")
    </td>
    <td width="*" valign="center">
      $screen_placeholder
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <hr noshade size="1">
    </td>                
  </tr>
  <tr>
    <td colspan="2">
      $navigation.setTemplate("/FluxBottom.vm")
    </td>
  </tr>
</table>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm
=====================================================
<font face="verdana,geneva,helvetica">
</font>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm
=====================================================
## -----------------------------------------------------------------------
## Menu.vm
##
## Main menu for the Turbine administration application.
## -----------------------------------------------------------------------
<font size="-1" face="$ui.sansSerifFonts">
  <a href="$link.setPage("user,FluxUserList.vm")">Users</a>
  <br>
  <a href="$link.setPage("group,FluxGroupList.vm")">Groups</a>
  <br>
  <a href="$link.setPage("role,FluxRoleList.vm")">Roles</a>
  <br>
  <a href="$link.setPage("permission,FluxPermissionList.vm")">Permissions</a>
  <p>
  <a href="$link.setAction("FluxLogout").setPage("FluxLogin.vm")">Logout</a>
</font>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm
=====================================================
<img src="$ui.image($ui.logo)">
<font face="verdana,geneva,helvetica">
</font>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm
=====================================================
## -----------------------------------------------------------------------
## Menu.vm
##
## Main menu for the Turbine administration application.
## -----------------------------------------------------------------------
<div class="w3-container">
  <a href="$link.setPage("user,FluxUserList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Users</a>
  <a href="$link.setPage("group,FluxGroupList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Groups</a>
  <a href="$link.setPage("role,FluxRoleList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Roles</a>
  <a href="$link.setPage("permission,FluxPermissionList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Permissions</a>
</div>


=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxError.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $

*#

$page.setBgColor($ui.bgcolor)
$page.setTitle("")

<font face="$ui.sansSerifFonts">

The reason for the error was:
<p>
<pre>
$processingException

</pre>

<P>
The stacktrace is as follows:
<pre>
$stackTrace
</pre>

</font>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxIndex.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $

*#

$page.setBgColor($ui.bgcolor)
$page.setTitle("Home Page")

<font face="$ui.sansSerifFonts">

This is the administration application.

</font>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxLogin.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $

*#

$page.setTitle("Please Login")
$page.setBgColor($ui.bgcolor)

<form method="post" action="$link.setAction("FluxLogin").setPage("FluxIndex.vm")">
  <table>
    <tr>
      #formCell ("User" "username" "")
    </tr>
    <tr>
       #formPasswordCell ("Password" "password" "")
    </tr>
    <tr>
      <td>
        <font face="$ui.sansSerifFonts">
          <input type="submit" value="Login">
        </font>
      </td>
    </tr>
  </table>
</form>


=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@version $Id: FluxGroupAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

<div class="w3-panel w3-red">
The group name <b>$name</b> is currently is use. Group names
must be unique, please choose another group name.
</div>


=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm
=====================================================
#**

@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxGroupForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#


#if ($errorTemplate)
	#parse ($errorTemplate)
#end


<form 
	method="post" 
	action="$link.setPage("group,FluxGroupList.vm").setAction("group.FluxGroupAction")">
  
	<table class="w3-table w3-striped  w3-bordered">
      <tr>
        #formCell ("Group Name" "group" $!flux.Group.Name)
      </tr>
	</table>

          #*
            Check for a mode, the update and delete buttons
            shouldn't appear when inserting a new user.
          *#

          #if ($flux.Mode == "modify")
            <input type="hidden" name="oldName" value="$!flux.Group.Name">
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doUpdate" value="Update Group"/>
            </div>
          #elseif ($flux.Mode == "delete")
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doDelete" value="Confirm Deletion"/>
			</div>
          #else
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doInsert" value="Add Group"/>
			</div>
          #end
  
</form>

#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm
=====================================================
#**

@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxGroupList.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

$page.setTitle("Group Adminstration")
$page.setBgColor($ui.bgcolor)

#set ( $headings = ["Group Name"] )

<div class="w3-container w3-padding"> <h2>Current Groups</h2>  </div>

<table class="w3-table w3-striped  w3-bordered">
	<tr>
	#foreach ($heading in $headings)
		<th>$heading</th>
	#end
	</tr>
        
	#foreach ($group in $flux.Groups)
	<tr>
		<td>$group.Name</td>
		<td>
			<a href="$link.setPage("group,FluxGroupForm.vm").addPathInfo("group",$group.Name).addQueryData("mode","modify")">Details</a> &nbsp;
			<a href="$link.setPage("group,FluxGroupForm.vm").addPathInfo("group",$group.Name).addQueryData("mode","delete")">Remove</a>
		</td>
	</tr>
	#end
</table>


<div class="w3-container w3-padding w3-center">
	<a class="w3-btn w3-blue w3-round" style="width: 180px;"
		href="$link.setPage("group,FluxGroupForm.vm").addQueryData("mode","insert")">Add Group</a>
</div>

#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxPermissionAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

<div class="w3-panel w3-red">
The permission name <b>$name</b> is currently is use. Permission
names must be unique, please choose another name.
</div>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxPermissionForm.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $

*#

#if ($errorTemplate)
	#parse ($errorTemplate)
#end

<form 
	method="post" 
	action="$link.setPage("permission,FluxPermissionList.vm").setAction("permission.FluxPermissionAction")">
  
	<table class="w3-table w3-striped  w3-bordered">
      <tr>
        #formCell ("Permission Name" "permission" $!flux.Permission.Name)
      </tr>
	</table>


          #*
            Check for a mode, the update and delete buttons
            shouldn't appear when inserting a new user.
          *#

          #if ($flux.Mode == "modify")
            <input type="hidden" name="oldName" value="$!flux.Permission.Name">
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doUpdate" value="Update Permission"/>
            </div>
          #elseif ($flux.Mode == "delete")
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doDelete" value="Confirm Deletion"/>
			</div>
          #else
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doInsert" value="Add Permission"/>
			</div>
          #end

</form>

#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm
=====================================================
#**

@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxPermissionList.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

## Load permissions
#set ( $permissions = $flux.Permissions )

<h2>All Permissions</h2>

#set ( $headings = ["Permission Name"] )

<table class="w3-table w3-bordered">
        <tr>
          #foreach ($heading in $headings)
          <th>$heading</th>
          #end
        </tr>
  
        #foreach ($permission in $permissions )
        <tr>
          <td> $permission.Name </td>
          <td>
              <a href="$link.setPage("permission,FluxPermissionForm.vm").addPathInfo("permission",$permission.Name).addQueryData("mode","modify")">Details</a> &nbsp;
              <a href="$link.setPage("permission,FluxPermissionForm.vm").addPathInfo("permission",$permission.Name).addQueryData("mode","delete")">Remove</a>
          </td>
        </tr>
        #end
</table>

<div class="w3-container w3-padding w3-center">
	<a class="w3-btn w3-blue w3-round" style="width: 180px;"
		href="$link.setPage("permission,FluxPermissionForm.vm").addQueryData("mode","insert")">Add New Permission</a>
</div>

#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm
=====================================================
#** 

This template is used to display the permissions
for a role.

@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxRolePermissionForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

#set ( $role = $flux.Role )

## Load permissions
#set ( $permissions = $flux.Permissions )
<h2>Permissions for the $role.Name role</h2>

<form method="post" action="$link.setAction("role.FluxRoleAction").setPage("role,FluxRoleList.vm")">

	<input type="hidden" name="role" value="$role.Name">

	<table class="w3-table w3-bordered">
		<tr>
			<th> Permission </th>
			<th> Assign to Role </th>
		</tr>
		
		#foreach ($permission in $permissions)
		<tr>
		    <td align="right"> <b>$!permission.Name</b> </td>
			<td align="center">
			#if ($role.Permissions.contains($permission))
		      #set ($checked = "checked")
		    #else
		      #set ($checked = "")
		    #end
				<input type="checkbox" name="${role.Name}${permission.Name}" $checked>
			</td>
	  </tr>
	  #end
	  
	  <tr>
	    <td>
	        <input class="w3-button w3-blue" type="submit" name="eventSubmit_doPermissions" value="Update Permissions">
	    </td>
	  </tr>
	</table>  
	
</form>
  

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm
=====================================================
#**

Display this template when the administrator
tries to add a user with a role that is
already being used by the security system.

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxRoleAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

<div class="w3-panel w3-red">
The role name <b>$name</b> is currently in use. Role names
must be unique, please choose another role name.
</div>


=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm
=====================================================
#**

This template is used to display the details of
a role.

@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxRoleForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

#if ($errorTemplate)
	#parse ($errorTemplate)
#end

<form 
	method="post" 
	action="$link.setPage("role,FluxRoleList.vm").setAction("role.FluxRoleAction")">
  
	<table class="w3-table w3-striped  w3-bordered">
      <tr>
        #formCell ("Role Name" "role" $!flux.Role.Name)
      </tr>
	</table>

          #*
            Check for a mode, the update and delete buttons
            shouldn't appear when inserting a new user.
          *#

          #if ($flux.Mode == "modify")
            <input type="hidden" name="oldName" value="$!flux.Role.Name">
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doUpdate" value="Update Role"/>
            </div>
          #elseif ($flux.Mode == "delete")
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doDelete" value="Confirm Deletion"/>
			</div>
          #else
			<div class="w3-container w3-padding w3-center">
            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doInsert" value="Add Role"/>
			</div>
          #end

</form>

#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm
=====================================================
#**

Used to display the roles currently being used in
the application.

*#
#set ( $headings = ["Role Name"] )

<div class="w3-container w3-padding"> <h2>Current Roles</h2>  </div>

<table class="w3-table w3-striped  w3-bordered">
        <tr>
          #foreach ($heading in $headings)
          <th>$heading</th>
          #end
        </tr>
        
        #foreach ($role in $flux.Roles)
	        #if ( $role.Name != "super_admin" )
	        <tr>
	        	<td> $role.Name </td>
	          <td>
	              <a href="$link.setPage("permission,FluxRolePermissionList.vm").addPathInfo("role",$role.Name)">Permissions</a> &nbsp;
	              <a href="$link.setPage("role,FluxRoleForm.vm").addPathInfo("role",$role.Name).addQueryData("mode","modify")">Details</a> &nbsp;
	              <a href="$link.setPage("role,FluxRoleForm.vm").addPathInfo("role",$role.Name).addQueryData("mode","delete")">Remove</a>
	          </td>
	        </tr>
	        #end
        #end
        
</table>

		<div class="w3-container w3-padding w3-center">
			<a class="w3-btn w3-blue w3-round" style="width: 180px;"
				href="$link.setPage("role,FluxRoleForm.vm").addQueryData("mode","insert")">Add New Role</a>
		</div>


#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm
=====================================================
#*
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@version $Id: FluxMissingRequiredInputs.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
*#

<div class="w3-panel w3-red">
The following fields are required and must be entered before
this request can be processed:
<ul>
#foreach ($missingRequiredInput in $missingRequiredInputs)
	<li>$missingRequiredInput</li>
#end
</ul>
</div>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm
=====================================================
#*

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@version $Id: FluxUserAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

<div class="w3-panel w3-red">
The username <b>$username</b> is currently is use. Usernames
must be unique for all users, please choose another username.
</div>


=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm
=====================================================
#**

Display the details of a user.

@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@version $Id: FluxUserForm.vm,v 1.10 2017-11-17 19:21:40 painter Exp $

*#

<!-- Primary edit screen -->
<form 
    name="user" 
    method="post" 
    action="$link.setAction("user.FluxUserAction").setPage("user,FluxUserList.vm")">
	
	#set ( $user = $flux.User )
	
	<div class="w3-container w3-padding w3-gray">
			
		<div class="w3-row-padding">
	
			<!-- User Info -->
			<div class="w3-half">
				<div class="w3-card-8 w3-padding w3-white">
					<div id="newUser" style="display: block;">
					<h2>User Details</h2>
					#formCell( "Username" "username" $!user.Name ) 
		            #formCell( "First Name" "firstName" $!user.FirstName ) 
		            #formCell( "Last Name" "lastName" $!user.LastName ) 
		            #formCell( "Email" "email" $!user.Email ) 
					</div>
				</div>
			</div>
			<div class="w3-half">				
				<div id="userPassword" class="w3-card-8 w3-padding w3-white">
					<h2>Password</h2>
					
					<p>
						Password required for user to login. If you are just 
						updating a user's details, leave the password field 
						blank, otherwise, new password will be set 
					
					#formPasswordCell( "New Password" "password" "" )
					
				</div>
			</div>
		</div>
	</div>
	<p>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm
=====================================================
#set ( $headings = ["Username","First Name", "Last Name", "Email", "Admin" ] )

<table class="w3-table w3-striped  w3-bordered">
    <tr>
        <td>Search:</td> 
        <td>
        <form method="post" action="$link.setPage("user,FluxUserList.vm")">
            $flux.getUserFieldList()
            <input type="text" name="searchField" value="">
            <input type="submit" name="eventSubmit_doDefault" value="Filter Users">
        </form><br> 
    <a href="$link.setPage("user,FluxUserList.vm").addQueryData( "fieldList", "username" ).addQueryData( "searchField", "admin" )" class="w3-btn w3-round w3-blue w3-border w3-border-blue">Admin Users</a>
        </td> 
   </tr>
</table>

<div class="w3-container w3-padding"> <h2>Current Users</h2>  </div>

<table class="w3-table w3-striped  w3-bordered">
	<tr>
		#foreach ($heading in $headings)
			<th>$heading</th> 
		#end
	</tr>

	#foreach ($user in $flux.getUsers() )
	<tr>
		<td>$!user.Name</td>
		<td>$!user.FirstName</td>
		<td>$!user.LastName</td>
		<td><a href=mailto:$!user.Email>$!user.Email</a></td> 
		<td><a href="$link.setPage("user,FluxUserForm.vm").addQueryData("username","$user.Name").addQueryData("mode","modify")">Details</a>
			&nbsp; <a href="$link.setPage("user,FluxUserRoleForm.vm").addQueryData("username","$user.Name").addQueryData("mode","modify")">Roles</a>
			&nbsp; <a href="$link.setPage("user,FluxUserForm.vm").addQueryData("username","$user.Name").addQueryData("mode","delete")">Remove</a>
		</td>
	</tr>
	#end

</table>
<p>
		<div class="w3-container w3-padding w3-center">
			<a class="w3-btn w3-blue w3-round" style="width: 180px;"
				href="$link.setPage("user,FluxUserForm.vm").addQueryData("mode","insert")">Add
				New User</a>
		</div>

#if ($showEmbeddedMenu)
  <hr size="1" noshade>
  #parse ("screens/FluxEmbeddedMenu.vm")
#end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm
=====================================================
#**

@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
@version $Id: FluxUserRoleForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $

*#

#set ($user = $flux.User)
#set ($acl = $flux.ACL)

<h2>Roles for $user.FirstName $user.LastName</h2>

<form method="post" action="$link.setAction("user.FluxUserAction").setPage("user,FluxUserList.vm")">

<input type="hidden" name="username" value="$user.Name">
<table class="w3-table w3-bordered">
  <tr>
    <th> &nbsp; </th>
      
    #foreach ($role in $flux.Roles)
      #if ( $role.Name != "super_admin" )
	    <th>
	        <b>$role.Name</b>
	    </th>
	  #end
    #end
  
  </tr>


  #foreach ($group in $flux.Groups)
  <tr>
    <td>
        <b>$group.Name</b>
    </td>

    #foreach ($role in $flux.Roles)
	    #if ( $role.Name != "super_admin" )
		    #if ($acl.hasRole($role, $group))
		      #set ($checked = "checked")
		    #else
		      #set ($checked = "")
		    #end
		    
		    <td align="center">
		      <input type="checkbox" class="w3-checkbox" name="${group.Name}${role.Name}" $checked>
		    </td>
		#end
    #end

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
=====================================================
# -------------------------------------------------------------------
#
#  F L U X    S E R V I C E
#
# -------------------------------------------------------------------

# ------------------------------------------------------------------------
# Security Properties
# ------------------------------------------------------------------------
flux.admin.role = turbineadmin

# ------------------------------------------------------------------------
# Mode Properties
# ------------------------------------------------------------------------
# Flux can work in stand-alone mode and in embedded mode.
# ------------------------------------------------------------------------

flux.mode = embedded

# ------------------------------------------------------------------------
# Embedded Properties
# ------------------------------------------------------------------------

flux.embedded.layout = /Default.vm
flux.embedded.show.menu = true

# ------------------------------------------------------------------------
# Stand-Alone Properties
# ------------------------------------------------------------------------

flux.stand.alone.layout = /FluxDefault.vm

# ------------------------------------------------------------------------
# UI Properties
# ------------------------------------------------------------------------

flux.ui.show.finder = false

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
=====================================================
<?xml version="1.0" encoding="ISO-8859-1" ?>

<configuration>
	<header>
		<!-- Meta data about the resulting combined configuration -->
	</header>
	<override><!-- only allowed configurations are user and turbine, realtive 
			paths -->
		<properties config-name="user"
			fileName="usersettings.properties" config-optional="true"
			config-forceCreate="true" />
		<!-- xml fileName="conf/test/TurbineResources.xml"/ -->
		<properties config-name="turbine"
			fileName="TurbineResources.properties" throwExceptionOnMissing="true" />
	</override>
	<additional>
		<!-- Configuration declarations that form a union configuration, always 
			provide a unique config-name attribute -->
	</additional>
</configuration>

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
=====================================================

=====================================================
== File: src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-ee10-env.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://eclipse.dev/jetty/configure_10_0.dtd">
<Configure class="org.eclipse.jetty.ee10.webapp.WebAppContext" id="wac">
  <New id="Turbine" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg><Ref refid="wac"/></Arg> <!-- scope  -->
    <Arg>${turbine_database_jndipath}</Arg>
    <Arg>
        <New class="org.apache.commons.dbcp2.BasicDataSource">
           <Set name="driverClassName">${turbine_database_driver}</Set>
             <Set name="url">${turbine_database_url}${turbine_database_name}</Set>
            <Set name="username">${turbine_database_user}</Set>
            <Set name="password">${turbine_database_password}</Set>
            <Set name="connectionProperties">${connectionProperties}</Set>
            <Set name="validationQuery">SELECT 1</Set>          
        </New>
    </Arg>
  </New>
  
  <Call name="setAttribute">
      <Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
      <Arg>.*/spring-[^/]*\.jar$</Arg>
  </Call>  
  <Call name="setAttribute">
      <Arg>org.eclipse.jetty.annotations.multiThreaded</Arg>
      <Arg type="Boolean">false</Arg>
  </Call>
    
</Configure>

=====================================================
== File: src/test/resources/projects/first/archetype.properties
=====================================================
groupId=org.apache.turbine.test
artifactId=integrationtest
version=1.0.0-SNAPSHOT
package=org.apache.turbine.test.integrationtest
turbine_app_name=My Turbine Web Application
turbine_intake_file=intake.xml
turbine_database_name=turbine
turbine_database_adapter=auto
turbine_database_jndipath=jdbc/turbine
turbine_database_driver=${turbine_database_driver}
turbine_database_timezone=UTC
turbine_database_url=${turbine_database_url}
connectionProperties=${connectionProperties}
turbine_database_user=db_user
turbine_database_password=db_password
app_volume_local_repo=${app_volume_local_repo}
docker=${docker}
db=${db}

=====================================================
== File: src/test/resources/projects/first/goal.txt
=====================================================
eclipse:eclipse package