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> <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> <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> <a href="$link.setPage("role,FluxRoleForm.vm").addPathInfo("role",$role.Name).addQueryData("mode","modify")">Details</a> <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> <a href="$link.setPage("user,FluxUserRoleForm.vm").addQueryData("username","$user.Name").addQueryData("mode","modify")">Roles</a> <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> </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