UNPKG

gen-jhipster

Version:

Spring Boot + Angular/React/Vue in one handy generator

527 lines (526 loc) 21.5 kB
/** * Copyright 2013-2024 the original author or authors from the JHipster project. * * This file is part of the JHipster project, see https://www.jhipster.tech/ * for more information. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { SERVER_MAIN_RES_DIR, SERVER_MAIN_SRC_DIR, SERVER_TEST_RES_DIR, SERVER_TEST_SRC_DIR } from '../generator-constants.js'; import { addSectionsCondition, mergeSections } from '../base/support/index.js'; import { javaMainPackageTemplatesBlock, moveToJavaPackageSrcDir, moveToJavaPackageTestDir, moveToSrcMainResourcesDir, } from '../java/support/index.js'; const imperativeConfigFiles = { imperativeFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['ApplicationWebXml.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/CRLFLogConverterTest.java', 'config/WebConfigurerTest.java', 'config/WebConfigurerTestController.java'], }, ], }; const reactiveConfigFiles = { reactiveFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/ReactorConfiguration.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/JHipsterBlockHoundIntegration.java'], }, { path: SERVER_TEST_RES_DIR, templates: ['META-INF/services/reactor.blockhound.integration.BlockHoundIntegration'], }, ], }; const oauth2Files = { oauth2Files: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/oauth2/AudienceValidator.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['security/oauth2/AudienceValidatorTest.java', 'config/TestSecurityConfiguration.java'], }, { condition: generator => generator.applicationTypeMonolith, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/OAuth2Configuration.java'], }, { condition: generator => generator.generateAuthenticationApi, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['web/rest/AuthInfoResource.java', data => `web/rest/LogoutResource_${data.imperativeOrReactive}.java`], }, { condition: generator => generator.generateAuthenticationApi, path: SERVER_MAIN_SRC_DIR, templates: [ { file: generator => `_package_/web/filter/${generator.reactive ? 'OAuth2ReactiveRefreshTokensWebFilter.java' : 'OAuth2RefreshTokensWebFilter.java'}`, renameTo: generator => `${generator.packageFolder}web/filter/${generator.reactive ? 'OAuth2ReactiveRefreshTokensWebFilter.java' : 'OAuth2RefreshTokensWebFilter.java'}`, }, ], }, { condition: generator => generator.generateAuthenticationApi, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['test/util/OAuth2TestUtil.java', 'web/rest/LogoutResourceIT.java'], }, { condition: generator => !generator.reactive && generator.generateAuthenticationApi, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/oauth2/CustomClaimConverter.java'], }, { condition: generator => !generator.reactive && generator.generateAuthenticationApi, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['security/oauth2/CustomClaimConverterIT.java'], }, ], }; const accountFiles = { accountResource: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ data => { if (data.authenticationTypeOauth2 && data.generateBuiltInUserEntity) return 'web/rest/AccountResource_oauth2.java'; if (data.generateUserManagement) return 'web/rest/AccountResource.java'; return 'web/rest/AccountResource_skipUserManagement.java'; }, ], }, { condition: data => data.generateUserManagement, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['web/rest/vm/ManagedUserVM.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [ data => { if (data.authenticationTypeOauth2) return 'web/rest/AccountResourceIT_oauth2.java'; if (data.generateUserManagement) return 'web/rest/AccountResourceIT.java'; return 'web/rest/AccountResourceIT_skipUserManagement.java'; }, ], }, ], }; const userManagementFiles = { userManagementFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'security/DomainUserDetailsService.java', 'security/UserNotActivatedException.java', 'service/MailService.java', 'service/dto/PasswordChangeDTO.java', 'service/EmailAlreadyUsedException.java', 'service/InvalidPasswordException.java', 'service/UsernameAlreadyUsedException.java', 'web/rest/vm/KeyAndPasswordVM.java', 'web/rest/errors/EmailAlreadyUsedException.java', 'web/rest/errors/InvalidPasswordException.java', 'web/rest/errors/LoginAlreadyUsedException.java', ], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['service/MailServiceIT.java', 'security/DomainUserDetailsServiceIT.java'], }, { path: SERVER_MAIN_RES_DIR, templates: ['templates/mail/activationEmail.html', 'templates/mail/creationEmail.html', 'templates/mail/passwordResetEmail.html'], }, { path: SERVER_TEST_RES_DIR, templates: [ 'templates/mail/activationEmail.html', 'templates/mail/creationEmail.html', 'templates/mail/passwordResetEmail.html', 'templates/mail/testEmail.html', ], }, { condition: generator => !generator.enableTranslation, path: SERVER_TEST_RES_DIR, templates: ['i18n/messages_en.properties'], }, ], }; const jwtFiles = { jwtBaseFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/SecurityJwtConfiguration.java', 'management/SecurityMetersService.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [ 'management/SecurityMetersServiceTests.java', 'security/jwt/AuthenticationIntegrationTest.java', 'security/jwt/JwtAuthenticationTestUtils.java', 'security/jwt/AuthenticationIntegrationTest.java', 'security/jwt/TokenAuthenticationSecurityMetersIT.java', 'security/jwt/TokenAuthenticationIT.java', ], }, ], entrypointFiles: [ { condition: data => !data.generateAuthenticationApi, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['security/jwt/TestAuthenticationResource.java'], }, { condition: generator => generator.generateAuthenticationApi, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['web/rest/vm/LoginVM.java', 'web/rest/AuthenticateController.java'], }, { condition: generator => generator.generateAuthenticationApi, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/rest/AuthenticateControllerIT.java'], }, ], }; const swaggerFiles = { swagger: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/OpenApiConfiguration.java'], }, ], }; /** * The default is to use a file path string. It implies use of the template method. * For any other config an object { file:.., method:.., template:.. } can be used */ export const baseServerFiles = { readme: [ { templates: ['README.md.jhi.spring-boot'], }, ], packageJson: [ { condition: generator => generator.clientFrameworkNo, templates: ['package.json'], }, ], lombokConfig: [ { transform: false, templates: ['lombok.config'], }, ], util: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['service/util/FileUtil.java'], }, ], serverBuild: [ { templates: ['.devcontainer/devcontainer.json', '.devcontainer/Dockerfile'], }, { condition: generator => generator.buildToolGradle, templates: [ 'build.gradle', 'settings.gradle', 'gradle.properties', 'gradle/profile_dev.gradle', 'gradle/profile_prod.gradle', 'gradle/war.gradle', 'gradle/zipkin.gradle', ], }, { condition: generator => generator.buildToolMaven, templates: ['pom.xml'], }, ], serverResource: [ { path: SERVER_MAIN_RES_DIR, renameTo: moveToSrcMainResourcesDir, transform: false, templates: [data => (data.clientFrameworkReact || data.clientFrameworkVue ? `banner_${data.clientFramework}.txt` : 'banner.txt')], }, { path: SERVER_MAIN_RES_DIR, templates: [ // Thymeleaf templates 'templates/error.html', 'logback-spring.xml', 'config/application.yml', 'config/application-dev.yml', 'config/application-tls.yml', 'config/application-prod.yml', 'i18n/messages.properties', ], }, ], serverJavaAuthConfig: [ { condition: generator => !generator.reactive && (generator.databaseTypeSql || generator.databaseTypeMongodb || generator.databaseTypeCouchbase), path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/SpringSecurityAuditorAware.java'], }, { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/SecurityUtils.java', 'security/AuthoritiesConstants.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [data => `security/SecurityUtilsUnitTest_${data.imperativeOrReactive}.java`], }, { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [data => `config/SecurityConfiguration_${data.imperativeOrReactive}.java`], }, { condition: data => data.generateInMemoryUserCredentials && !data.reactive && data.authenticationTypeJwt, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/SecurityInMemoryConfiguration.java'], }, { condition: generator => generator.generateUserManagement && generator.authenticationTypeSession && !generator.reactive, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/PersistentTokenRememberMeServices.java', 'domain/PersistentToken.java'], }, { condition: generator => generator.generateUserManagement && generator.authenticationTypeSession && !generator.reactive && !generator.databaseTypeCouchbase, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['repository/PersistentTokenRepository.java'], }, ], serverMicroservice: [ javaMainPackageTemplatesBlock({ condition: generator => generator.applicationTypeMicroservice, templates: ['config/SpringDocConfiguration.java'], }), { condition: generator => generator.applicationTypeMicroservice, path: SERVER_MAIN_RES_DIR, templates: [{ file: 'static/index_microservices.html', renameTo: () => 'static/index.html' }], }, ], serviceDiscovery: [ { condition: generator => generator.serviceDiscoveryAny, path: SERVER_MAIN_RES_DIR, templates: ['config/bootstrap.yml', 'config/bootstrap-prod.yml'], }, { condition: generator => generator.serviceDiscoveryAny, path: SERVER_TEST_RES_DIR, templates: ['config/bootstrap.yml'], }, { condition: generator => generator.serviceDiscoveryAny && generator.serviceDiscoveryEureka, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/EurekaWorkaroundConfiguration.java'], }, ], serverJavaApp: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: (data, filename) => moveToJavaPackageSrcDir(data, filename.replace('Application.java', `${data.mainClass}.java`)), templates: ['Application.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [ 'TechnicalStructureTest.java', 'config/AsyncSyncConfiguration.java', 'IntegrationTest.java', 'config/SpringBootTestClassOrderer.java', ], }, ], serverJavaConfig: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'aop/logging/LoggingAspect.java', 'config/AsyncConfiguration.java', 'config/CRLFLogConverter.java', 'config/DateTimeFormatConfiguration.java', 'config/LoggingConfiguration.java', 'config/ApplicationProperties.java', 'config/JacksonConfiguration.java', 'config/LoggingAspectConfiguration.java', 'config/WebConfigurer.java', 'config/ServerConfiguration.java', ], }, { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/Constants.java'], }, ], serverJavaDomain: [ { condition: ctx => ctx.generateSpringAuditor, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['domain/AbstractAuditingEntity.java'], }, ], serverJavaWebError: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'web/rest/errors/BadRequestAlertException.java', 'web/rest/errors/ErrorConstants.java', 'web/rest/errors/ExceptionTranslator.java', 'web/rest/errors/FieldErrorVM.java', ], }, ], serverJavaWeb: [ { condition: generator => generator.clientFrameworkAny && !generator.reactive, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/StaticResourcesWebConfiguration.java'], }, { // TODO : add these tests to reactive condition: generator => generator.clientFrameworkAny && !generator.reactive, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/StaticResourcesWebConfigurerTest.java'], }, { condition: generator => generator.clientFrameworkAny, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [data => `web/filter/SpaWebFilter_${data.imperativeOrReactive}.java`], }, { condition: generator => generator.clientFrameworkAny, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [data => `web/filter/SpaWebFilterIT_${data.imperativeOrReactive}.java`], }, { condition: generator => generator.clientFrameworkAny && generator.reactive, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/filter/SpaWebFilterTestController_reactive.java'], }, ], serverTestFw: [ { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/rest/TestUtil.java', 'web/rest/errors/ExceptionTranslatorTestController.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [data => `web/rest/errors/ExceptionTranslatorIT_${data.imperativeOrReactive}.java`], }, { path: SERVER_TEST_RES_DIR, templates: ['config/application.yml', 'logback.xml', 'junit-platform.properties'], }, ], serverJavaUserManagement: [ { condition: generator => generator.databaseTypeMongodb || generator.searchEngineElasticsearch || generator.databaseTypeCouchbase || generator.searchEngineCouchbase, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/TestContainersSpringContextCustomizerFactory.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/rest/WithUnauthenticatedMockUser.java'], }, ], }; const carboneFiles = { dto: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'service/dto/carbone/CarboneBody.java', 'service/dto/carbone/CarboneOption.java', 'service/dto/carbone/CarboneResponseData.java', 'service/dto/carbone/CarboneResponseDTO.java', ], }, ], service: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['service/CarboneService.java'], }, ], }; export const serverFiles = mergeSections(baseServerFiles, addSectionsCondition(jwtFiles, context => context.authenticationTypeJwt), addSectionsCondition(oauth2Files, context => context.authenticationTypeOauth2), addSectionsCondition(accountFiles, context => context.generateAuthenticationApi), addSectionsCondition(userManagementFiles, context => context.generateUserManagement), addSectionsCondition(imperativeConfigFiles, context => !context.reactive), addSectionsCondition(reactiveConfigFiles, context => context.reactive), addSectionsCondition(swaggerFiles, context => context.enableSwaggerCodegen), carboneFiles);