Michael Hoennig
2022-07-22 f2d0fbe67a0d32ae59bd05ddccafe9667327bde2
removing JHipster
18 files added
1 files renamed
726 files deleted
2 files modified
94493 ■■■■■ changed files
.editorconfig 4 ●●●● patch | view | raw | blame | history
.huskyrc 5 ●●●●● patch | view | raw | blame | history
.jhipster/Asset.json 61 ●●●●● patch | view | raw | blame | history
.jhipster/Customer.json 154 ●●●●● patch | view | raw | blame | history
.jhipster/Membership.json 66 ●●●●● patch | view | raw | blame | history
.jhipster/SepaMandate.json 84 ●●●●● patch | view | raw | blame | history
.jhipster/Share.json 61 ●●●●● patch | view | raw | blame | history
.jhipster/UserRoleAssignment.json 47 ●●●●● patch | view | raw | blame | history
.prettierignore 3 ●●●●● patch | view | raw | blame | history
.prettierrc 12 ●●●●● patch | view | raw | blame | history
.yo-rc.json 38 ●●●●● patch | view | raw | blame | history
Glossary.md 18 ●●●●● patch | view | raw | blame | history
JHIPSTER.md 196 ●●●●● patch | view | raw | blame | history
Jenkinsfile 57 ●●●●● patch | view | raw | blame | history
README.md 363 ●●●● patch | view | raw | blame | history
adr/2022-07-18.row-level-security-mechanism.md 160 ●●●●● patch | view | raw | blame | history
angular.json 39 ●●●●● patch | view | raw | blame | history
build-cucumber.gradle 24 ●●●●● patch | view | raw | blame | history
build-jacoco.gradle 84 ●●●●● patch | view | raw | blame | history
build-pitest.gradle 36 ●●●●● patch | view | raw | blame | history
build-spotless.gradle 15 ●●●●● patch | view | raw | blame | history
build.gradle 297 ●●●●● patch | view | raw | blame | history
cfg/spotless/eclipse_formatter.xml 315 ●●●●● patch | view | raw | blame | history
cfg/spotless/hsadminng.importorder 8 ●●●●● patch | view | raw | blame | history
cfg/spotless/javascript_formatters.xml 267 ●●●●● patch | view | raw | blame | history
gradle.properties 53 ●●●●● patch | view | raw | blame | history
gradle/docker.gradle 35 ●●●●● patch | view | raw | blame | history
gradle/profile_dev.gradle 72 ●●●●● patch | view | raw | blame | history
gradle/profile_prod.gradle 63 ●●●●● patch | view | raw | blame | history
gradle/sonar.gradle 47 ●●●●● patch | view | raw | blame | history
gradle/swagger.gradle 28 ●●●●● patch | view | raw | blame | history
gradle/wrapper/gradle-wrapper.jar patch | view | raw | blame | history
gradle/wrapper/gradle-wrapper.properties 6 ●●●●● patch | view | raw | blame | history
gradle/zipkin.gradle 3 ●●●●● patch | view | raw | blame | history
gradlew 172 ●●●●● patch | view | raw | blame | history
gradlew.bat 84 ●●●●● patch | view | raw | blame | history
package-lock.json 18180 ●●●●● patch | view | raw | blame | history
package.json 126 ●●●●● patch | view | raw | blame | history
postcss.config.js 5 ●●●●● patch | view | raw | blame | history
proxy.conf.json 7 ●●●●● patch | view | raw | blame | history
settings.gradle 1 ●●●● patch | view | raw | blame | history
sql/00-util.sql 38 ●●●●● patch | view | raw | blame | history
sql/10-rbac-base.sql 657 ●●●●● patch | view | raw | blame | history
sql/11-rbac-view.sql 89 ●●●●● patch | view | raw | blame | history
sql/19-rbac-tests.sql 50 ●●●●● patch | view | raw | blame | history
sql/20-hs-base.sql 18 ●●●●● patch | view | raw | blame | history
sql/21-hs-customer.sql 134 ●●●●● patch | view | raw | blame | history
sql/22-hs-packages.sql 117 ●●●●● patch | view | raw | blame | history
sql/23-hs-unixuser.sql 106 ●●●●● patch | view | raw | blame | history
sql/24-hs-domain.sql 98 ●●●●● patch | view | raw | blame | history
sql/25-hs-emailaddress.sql 122 ●●●●● patch | view | raw | blame | history
sql/29-hs-statistics.sql 24 ●●●●● patch | view | raw | blame | history
sql/examples.sql 62 ●●●●● patch | view | raw | blame | history
sql/historization.sql 166 ●●●●● patch | view | raw | blame | history
sql/history-demo.sql 105 ●●●●● patch | view | raw | blame | history
sql/rbac-statistics.sql 18 ●●●●● patch | view | raw | blame | history
sql/rbac.md 301 ●●●●● patch | view | raw | blame | history
sql/rbac.pdf patch | view | raw | blame | history
sql/rbac.sql 2 ●●●●● patch | view | raw | blame | history
src/main/docker/.dockerignore 14 ●●●●● patch | view | raw | blame | history
src/main/docker/Dockerfile 20 ●●●●● patch | view | raw | blame | history
src/main/docker/app.yml 15 ●●●●● patch | view | raw | blame | history
src/main/docker/entrypoint.sh 4 ●●●● patch | view | raw | blame | history
src/main/docker/jenkins.yml 15 ●●●●● patch | view | raw | blame | history
src/main/docker/postgresql.yml 11 ●●●●● patch | view | raw | blame | history
src/main/docker/sonar.yml 7 ●●●●● patch | view | raw | blame | history
src/main/docker/swagger-editor.yml 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/ApplicationWebXml.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/HsadminNgApp.java 111 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/aop/logging/LoggingAspect.java 116 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/ApplicationProperties.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/AsyncConfiguration.java 60 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/CacheConfiguration.java 45 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/CloudDatabaseConfiguration.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/Constants.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/DatabaseConfiguration.java 60 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/DateTimeFormatConfiguration.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/DefaultProfileUtil.java 52 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/JacksonConfiguration.java 64 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/LiquibaseConfiguration.java 52 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/LocaleConfiguration.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/LoggingAspectConfiguration.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/LoggingConfiguration.java 160 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/SecurityConfiguration.java 128 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/WebConfigurer.java 172 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/audit/AuditEventConverter.java 90 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/audit/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/config/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/AbstractAuditingEntity.java 82 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/Asset.java 184 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/Authority.java 61 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/Customer.java 408 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/Membership.java 238 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/PersistentAuditEvent.java 113 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/SepaMandate.java 250 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/Share.java 183 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/User.java 240 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/UserRoleAssignment.java 214 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/enumeration/AssetAction.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/enumeration/CustomerKind.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/enumeration/ShareAction.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/enumeration/VatRegion.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/domain/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/liquibase/ReplaceCustomChange.java 98 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/AssetRepository.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/AuthorityRepository.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/CustomAuditEventRepository.java 94 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/CustomerRepository.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/MembershipRepository.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/PersistenceAuditEventRepository.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/SepaMandateRepository.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/ShareRepository.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/UserRepository.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/UserRoleAssignmentRepository.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/repository/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/AuthoritiesConstants.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/DomainUserDetailsService.java 67 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/SecurityUtils.java 88 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/SpringSecurityAuditorAware.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/UserNotActivatedException.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/jwt/JWTConfigurer.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/jwt/JWTFilter.java 50 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/jwt/TokenProvider.java 123 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/security/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/AssetQueryService.java 120 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/AssetService.java 100 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/AssetValidator.java 70 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/AuditEventService.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/CustomerQueryService.java 164 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/CustomerService.java 84 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/IdToDtoResolver.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/MailService.java 115 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/MembershipQueryService.java 135 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/MembershipService.java 103 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/MembershipValidator.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/SepaMandateQueryService.java 138 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/SepaMandateService.java 94 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/ShareQueryService.java 120 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/ShareService.java 103 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/ShareValidator.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/UserRoleAssignmentQueryService.java 112 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/UserRoleAssignmentService.java 111 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/UserService.java 302 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/AccessFor.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/AccessMappings.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/EntityTypeId.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/JSonAccessFilter.java 149 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/JSonFieldReader.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/JSonFieldWriter.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/JsonDeserializerWithAccessFilter.java 288 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/JsonSerializerWithAccessFilter.java 138 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/ParentId.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/Role.java 437 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/accessfilter/SelfId.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/AssetCriteria.java 146 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/AssetDTO.java 174 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/CustomerCriteria.java 292 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/CustomerDTO.java 319 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/FluentBuilder.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/MembershipCriteria.java 163 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/MembershipDTO.java 203 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/PasswordChangeDTO.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/SepaMandateCriteria.java 189 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/SepaMandateDTO.java 242 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/ShareCriteria.java 146 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/ShareDTO.java 173 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/UserDTO.java 200 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/UserRoleAssignmentCriteria.java 110 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/dto/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/AssetMapper.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerMapper.java 43 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/EntityMapper.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/MembershipMapper.java 55 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/SepaMandateMapper.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/ShareMapper.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/UserMapper.java 81 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/mapper/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/util/RandomUtil.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/service/util/ReflectionUtil.java 218 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/AccountResource.java 183 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/AssetResource.java 137 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/AuditResource.java 79 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/CustomerResource.java 142 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/LogsResource.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/MembershipResource.java 144 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/SepaMandateResource.java 144 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/ShareResource.java 137 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/UserJWTController.java 73 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/UserResource.java 188 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/UserRoleAssignmentResource.java 148 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/BadRequestAlertException.java 43 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/CustomParameterizedException.java 61 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/EmailAlreadyUsedException.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/EmailNotFoundException.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/ErrorConstants.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/ExceptionTranslator.java 137 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/FieldErrorVM.java 34 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/InternalServerErrorException.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/InvalidPasswordException.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/LoginAlreadyUsedException.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/errors/package-info.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/util/HeaderUtil.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/util/PaginationUtil.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/vm/KeyAndPasswordVM.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/vm/LoggerVM.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/vm/LoginVM.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/vm/ManagedUserVM.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/org/hostsharing/hsadminng/web/rest/vm/package-info.java 4 ●●●● patch | view | raw | blame | history
src/main/jdl/accessrights.jdl 23 ●●●●● patch | view | raw | blame | history
src/main/jdl/customer.jdl 90 ●●●●● patch | view | raw | blame | history
src/main/jib/entrypoint.sh 4 ●●●● patch | view | raw | blame | history
src/main/resources/.h2.server.properties 6 ●●●●● patch | view | raw | blame | history
src/main/resources/banner.txt 10 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application-dev.yml 117 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application-h2file.yml 20 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application-h2mem.yml 22 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application-pgsql.yml 17 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application-prod.yml 132 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application-tls.yml 20 ●●●●● patch | view | raw | blame | history
src/main/resources/config/application.yml 143 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/authorities.csv 5 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml 154 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105332_added_entity_Customer.xml 87 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105333_added_entity_Membership.xml 51 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105333_added_entity_constraints_Membership.xml 18 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105334_added_entity_Share.xml 51 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105334_added_entity_constraints_Share.xml 18 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105335_added_entity_Asset.xml 51 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105335_added_entity_constraints_Asset.xml 18 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105336_added_entity_SepaMandate.xml 67 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105336_added_entity_constraints_SepaMandate.xml 18 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105342_added_entity_UserRoleAssignment.xml 45 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/20190507105342_added_entity_constraints_UserRoleAssignment.xml 18 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/constraints_Membership.xml 15 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/changelog/constraints_UserRoleAssignment.xml 15 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization.xml 46 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_Asset.xml 96 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_Customer.xml 131 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_Membership.xml 95 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_SepaMandate.xml 112 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_Share.xml 96 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_User.xml 98 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_UserAuthority.xml 75 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/historicization/historicization_UserRoleAssignment.xml 87 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/master.xml 56 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/assets.csv 58 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/assets.xml 31 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/customers.csv 7 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/customers.xml 32 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/memberships.csv 7 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/memberships.xml 32 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/sepamandates.csv 6 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/sepamandates.xml 32 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/shares.csv 13 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/shares.xml 32 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/user_role_assignments.csv 17 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/user_role_assignments.xml 20 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/users.csv 24 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/users.xml 20 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/users_authorities.csv 33 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/sample-data/users_authorities.xml 20 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/users.csv 5 ●●●●● patch | view | raw | blame | history
src/main/resources/config/liquibase/users_authorities.csv 7 ●●●●● patch | view | raw | blame | history
src/main/resources/config/tls/keystore.p12 patch | view | raw | blame | history
src/main/resources/i18n/messages.properties 21 ●●●●● patch | view | raw | blame | history
src/main/resources/i18n/messages_de.properties 21 ●●●●● patch | view | raw | blame | history
src/main/resources/i18n/messages_en.properties 21 ●●●●● patch | view | raw | blame | history
src/main/resources/idea.gdsl 90 ●●●●● patch | view | raw | blame | history
src/main/resources/logback-spring.xml 73 ●●●●● patch | view | raw | blame | history
src/main/resources/swagger/api.yml 7 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/error.html 163 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/mail/activationEmail.html 25 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/mail/creationEmail.html 25 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/mail/passwordResetEmail.html 25 ●●●●● patch | view | raw | blame | history
src/main/webapp/404.html 61 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/account.module.ts 30 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/account.route.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/activate/activate.component.html 17 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/activate/activate.component.ts 37 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/activate/activate.route.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/activate/activate.service.ts 16 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/index.ts 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html 77 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts 65 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/init/password-reset-init.component.html 46 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts 43 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password/password-strength-bar.component.ts 85 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password/password-strength-bar.css 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password/password.component.html 77 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password/password.component.ts 46 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password/password.route.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/password/password.service.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/register/register.component.html 124 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/register/register.component.ts 75 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/register/register.route.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/register/register.service.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/settings/settings.component.html 86 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/settings/settings.component.ts 63 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/account/settings/settings.route.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/admin.module.ts 54 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/admin.route.ts 18 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/audits/audit-data.model.ts 3 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/audits/audit.model.ts 5 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/audits/audits.component.html 52 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/audits/audits.component.ts 126 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/audits/audits.route.ts 17 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/audits/audits.service.ts 25 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/configuration/configuration.component.html 46 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/configuration/configuration.component.ts 43 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/configuration/configuration.route.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/configuration/configuration.service.ts 67 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/docs/docs.component.html 2 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/docs/docs.component.ts 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/docs/docs.route.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/health/health-modal.component.html 36 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/health/health-modal.component.ts 41 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/health/health.component.html 34 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/health/health.component.ts 66 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/health/health.route.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/health/health.service.ts 133 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/index.ts 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/logs/log.model.ts 3 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/logs/logs.component.html 28 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/logs/logs.component.ts 32 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/logs/logs.route.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/logs/logs.service.ts 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/metrics/metrics.component.html 56 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/metrics/metrics.component.ts 42 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/metrics/metrics.route.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/metrics/metrics.service.ts 18 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts 29 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management-detail.component.html 49 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management-detail.component.ts 20 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management-update.component.html 124 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management-update.component.ts 58 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management.component.html 79 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management.component.ts 144 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/admin/user-management/user-management.route.ts 68 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/app-routing.module.ts 23 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/app.constants.ts 8 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/app.main.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/app.module.ts 72 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/blocks/config/prod.config.ts 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/blocks/config/uib-pagination.config.ts 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts 25 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/blocks/interceptor/auth.interceptor.ts 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts 25 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/blocks/interceptor/notification.interceptor.ts 37 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/auth/account.service.ts 114 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/auth/auth-jwt.service.ts 59 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/auth/csrf.service.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/auth/state-storage.service.ts 46 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/auth/user-route-access-service.ts 52 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/core.module.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/index.ts 13 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/language/language.constants.ts 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/language/language.helper.ts 65 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/login/login-modal.service.ts 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/login/login.service.ts 38 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/user/account.model.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/user/user.model.ts 47 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/core/user/user.service.ts 39 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset-delete-dialog.component.ts 65 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset-detail.component.html 49 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset-detail.component.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset-update.component.html 112 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset-update.component.ts 79 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset.component.html 94 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset.component.ts 141 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset.module.ts 34 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset.route.ts 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/asset.service.ts 77 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/asset/index.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer-delete-dialog.component.ts 65 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer-detail.component.html 83 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer-detail.component.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer-update.component.html 222 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer-update.component.ts 51 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer.component.html 74 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer.component.ts 122 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer.module.ts 40 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer.route.ts 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/customer.service.ts 74 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/customer/index.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/entity.module.ts 39 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/index.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership-delete-dialog.component.ts 69 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership-detail.component.html 49 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership-detail.component.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership-update.component.html 100 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership-update.component.ts 80 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership.component.html 84 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership.component.ts 142 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership.module.ts 40 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership.route.ts 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/membership/membership.service.ts 98 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/index.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate-delete-dialog.component.ts 72 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate-detail.component.html 65 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate-detail.component.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate-update.component.html 147 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate-update.component.ts 81 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate.component.html 96 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate.component.ts 150 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate.module.ts 40 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate.route.ts 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/sepa-mandate/sepa-mandate.service.ts 101 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/index.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share-delete-dialog.component.ts 65 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share-detail.component.html 49 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share-detail.component.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share-update.component.html 108 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share-update.component.ts 78 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share.component.html 90 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share.component.ts 141 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share.module.ts 34 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share.route.ts 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/share/share.service.ts 77 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/index.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment-delete-dialog.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment-delete-dialog.component.ts 72 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment-detail.component.html 39 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment-detail.component.ts 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment-update.component.html 77 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment-update.component.ts 75 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment.component.html 90 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment.component.ts 139 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment.module.ts 45 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment.route.ts 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/entities/user-role-assignment/user-role-assignment.service.ts 38 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/home/home.component.html 41 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/home/home.component.ts 44 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/home/home.css 23 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/home/home.module.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/home/home.route.ts 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/home/index.ts 3 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/error/error.component.html 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/error/error.component.ts 28 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/error/error.route.ts 36 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/footer/footer.component.html 3 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/footer/footer.component.ts 7 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/index.ts 10 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/main/main.component.html 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/main/main.component.ts 31 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/navbar/active-menu.directive.ts 26 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/navbar/navbar.component.html 188 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/navbar/navbar.component.ts 79 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/navbar/navbar.css 89 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/navbar/navbar.route.ts 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/profiles/page-ribbon.component.ts 26 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/profiles/page-ribbon.css 32 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/profiles/profile-info.model.ts 6 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/layouts/profiles/profile.service.ts 40 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/polyfills.ts 70 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/alert/alert-error.component.ts 114 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/alert/alert.component.ts 35 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/auth/has-any-authority.directive.ts 42 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/constants/error.constants.ts 4 ●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/constants/input.constants.ts 2 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/constants/pagination.constants.ts 3 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/index.ts 13 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/language/find-language-from-key.pipe.ts 13 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/login/login.component.html 43 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/login/login.component.ts 87 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/model/asset.model.ts 34 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/model/customer.model.ts 60 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/model/membership.model.ts 35 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/model/sepa-mandate.model.ts 33 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/model/share.model.ts 30 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/model/user-role-assignment.model.ts 29 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/shared-common.module.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/shared-libs.module.ts 20 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/shared.module.ts 21 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/util/datepicker-adapter.ts 21 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/util/linebreaks-pipe.ts 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/util/request-util.ts 18 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/shared/util/tablefilter.ts 79 ●●●●● patch | view | raw | blame | history
src/main/webapp/app/vendor.ts 81 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/css/documentation.css 3 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/css/global.css 238 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/css/loading.css 152 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/css/vendor.css 2 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_0.svg 198 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_0_head-192.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_0_head-256.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_0_head-384.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_0_head-512.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_1.svg 9387 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_1_head-192.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_1_head-256.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_1_head-384.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_1_head-512.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_2.svg 841 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_2_head-192.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_2_head-256.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_2_head-384.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_2_head-512.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_3.svg 308 ●●●●● patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_3_head-192.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_3_head-256.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_3_head-384.png patch | view | raw | blame | history
src/main/webapp/content/images/jhipster_family_member_3_head-512.png patch | view | raw | blame | history
src/main/webapp/content/images/logo-jhipster.png patch | view | raw | blame | history
src/main/webapp/favicon.ico patch | view | raw | blame | history
src/main/webapp/i18n/de/activate.json 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/asset.json 26 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/assetAction.json 13 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/audits.json 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/configuration.json 10 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/custom-error.json 23 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/customer.json 37 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/customerKind.json 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/error.json 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/global.json 142 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/health.json 28 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/home.json 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/login.json 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/logs.json 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/membership.json 28 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/metrics.json 93 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/password.json 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/register.json 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/reset.json 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/sepaMandate.json 30 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/sessions.json 15 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/settings.json 32 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/share.json 26 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/shareAction.json 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/user-management.json 30 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/userRole.json 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/userRoleAssignment.json 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/de/vatRegion.json 10 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/activate.json 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/asset.json 26 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/assetAction.json 13 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/audits.json 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/configuration.json 10 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/custom-error.json 23 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/customer.json 37 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/customerKind.json 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/error.json 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/global.json 143 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/health.json 28 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/home.json 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/login.json 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/logs.json 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/membership.json 28 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/metrics.json 102 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/password.json 12 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/register.json 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/reset.json 27 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/sepaMandate.json 30 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/sessions.json 15 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/settings.json 32 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/share.json 26 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/shareAction.json 9 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/user-management.json 30 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/userRole.json 14 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/userRoleAssignment.json 24 ●●●●● patch | view | raw | blame | history
src/main/webapp/i18n/en/vatRegion.json 10 ●●●●● patch | view | raw | blame | history
src/main/webapp/index.html 109 ●●●●● patch | view | raw | blame | history
src/main/webapp/manifest.webapp 31 ●●●●● patch | view | raw | blame | history
src/main/webapp/robots.txt 11 ●●●●● patch | view | raw | blame | history
src/main/webapp/swagger-ui/dist/images/throbber.gif patch | view | raw | blame | history
src/main/webapp/swagger-ui/index.html 166 ●●●●● patch | view | raw | blame | history
src/test/features/user/user.feature 6 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/config/WebConfigurerTest.java 193 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/config/WebConfigurerTestController.java 17 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/config/timezone/HibernateTimeZoneTest.java 178 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/cucumber/CucumberContextConfiguration.java 23 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/cucumber/CucumberTest.java 13 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/cucumber/stepdefs/StepDefs.java 10 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/cucumber/stepdefs/UserStepDefs.java 49 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/liquibase/ReplaceCustomChangeUnitTest.java 165 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/AssetRepositoryIntTest.java 76 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/CustomAuditEventRepositoryIntTest.java 168 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/CustomerRepositoryIntTest.java 52 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/MembershipRepositoryIntTest.java 104 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/SepaMandateRepositoryIntTest.java 62 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/ShareRepositoryIntTest.java 75 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/timezone/DateTimeWrapper.java 134 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/repository/timezone/DateTimeWrapperRepository.java 13 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/security/DomainUserDetailsServiceIntTest.java 128 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/security/SecurityUtilsUnitTest.java 74 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/security/jwt/JWTFilterTest.java 119 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/security/jwt/TokenProviderTest.java 116 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/AssetServiceUnitTest.java 180 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/AssetValidatorUnitTest.java 318 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/MailServiceIntTest.java 192 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/MembershipServiceUnitTest.java 68 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/MembershipValidatorUnitTest.java 149 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/ShareServiceUnitTest.java 178 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/ShareValidatorUnitTest.java 190 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/UserRoleAssignmentServiceUnitTest.java 99 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/UserServiceIntTest.java 194 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/JSonAccessFilterTest.java 34 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/JSonAccessFilterTestFixture.java 237 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/JSonBuilder.java 91 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/JSonDeserializationWithAccessFilterUnitTest.java 579 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/JSonSerializationWithAccessFilterUnitTest.java 218 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/RoleUnitTest.java 195 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/SecurityContextDouble.java 57 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/SecurityContextFake.java 23 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/accessfilter/SecurityContextMock.java 47 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/AccessMappingsUnitTestBase.java 237 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/AssetDTOIntTest.java 229 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/AssetDTOUnitTest.java 92 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/CustomerDTOUnitTest.java 188 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/MembershipDTOIntTest.java 197 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/MembershipDTOUnitTest.java 108 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/SepaMandateDTOIntTest.java 206 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/SepaMandateDTOUnitTest.java 137 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/ShareDTOIntTest.java 227 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/ShareDTOUnitTest.java 92 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/dto/UserRoleAssignmentUnitTest.java 163 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/mapper/UserMapperTest.java 151 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/service/util/ReflectionUtilUnitTest.java 147 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/AccountResourceIntTest.java 829 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/AssetResourceIntTest.java 777 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/AuditResourceIntTest.java 164 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/CustomerResourceIntTest.java 1339 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/LogsResourceIntTest.java 70 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/MembershipResourceIntTest.java 837 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/MembershipResourceUnitTest.java 58 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/SepaMandateResourceIntTest.java 1009 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/SepaMandateResourceUnitTest.java 58 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/ShareResourceIntTest.java 802 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/TestUtil.java 147 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/UserJWTControllerIntTest.java 130 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/UserResourceIntTest.java 622 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/UserRoleAssignmentResourceIntTest.java 552 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/UserRoleAssignmentResourceUnitTest.java 58 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/errors/ExceptionTranslatorIntTest.java 152 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/errors/ExceptionTranslatorTestController.java 88 ●●●●● patch | view | raw | blame | history
src/test/java/org/hostsharing/hsadminng/web/rest/util/PaginationUtilUnitTest.java 45 ●●●●● patch | view | raw | blame | history
src/test/javascript/jest-global-mocks.ts 15 ●●●●● patch | view | raw | blame | history
src/test/javascript/jest.conf.js 26 ●●●●● patch | view | raw | blame | history
src/test/javascript/jest.ts 2 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/activate/activate.component.spec.ts 72 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts 119 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts 110 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts 48 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/password/password.component.spec.ts 89 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/register/register.component.spec.ts 121 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/account/settings/settings.component.spec.ts 81 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/audits/audits.component.spec.ts 133 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/audits/audits.service.spec.ts 59 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts 71 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts 64 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/health/health.component.spec.ts 321 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/logs/logs.component.spec.ts 77 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/logs/logs.service.spec.ts 58 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts 55 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts 57 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts 54 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts 65 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts 102 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts 85 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/core/user/account.service.spec.ts 110 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/core/user/user.service.spec.ts 66 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/asset/asset-delete-dialog.component.spec.ts 52 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/asset/asset-detail.component.spec.ts 40 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/asset/asset-update.component.spec.ts 60 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/asset/asset.component.spec.ts 128 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/asset/asset.service.spec.ts 142 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/customer/customer-delete-dialog.component.spec.ts 52 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/customer/customer-detail.component.spec.ts 40 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/customer/customer-update.component.spec.ts 60 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/customer/customer.component.spec.ts 128 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/customer/customer.service.spec.ts 172 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/membership/membership-delete-dialog.component.spec.ts 52 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/membership/membership-detail.component.spec.ts 40 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/membership/membership-update.component.spec.ts 60 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/membership/membership.component.spec.ts 128 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/membership/membership.service.spec.ts 150 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/sepa-mandate/sepa-mandate-delete-dialog.component.spec.ts 52 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/sepa-mandate/sepa-mandate-detail.component.spec.ts 40 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/sepa-mandate/sepa-mandate-update.component.spec.ts 60 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/sepa-mandate/sepa-mandate.component.spec.ts 128 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/sepa-mandate/sepa-mandate.service.spec.ts 174 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/share/share-delete-dialog.component.spec.ts 52 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/share/share-detail.component.spec.ts 40 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/share/share-update.component.spec.ts 60 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/share/share.component.spec.ts 128 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/share/share.service.spec.ts 142 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/user-role-assignment/user-role-assignment-delete-dialog.component.spec.ts 52 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/user-role-assignment/user-role-assignment-detail.component.spec.ts 40 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/user-role-assignment/user-role-assignment-update.component.spec.ts 60 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/user-role-assignment/user-role-assignment.component.spec.ts 128 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/entities/user-role-assignment/user-role-assignment.service.spec.ts 108 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts 135 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/shared/login/login.component.spec.ts 157 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/shared/util/linebreaks-pipe.spec.ts 37 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/app/shared/util/tablefilter.spec.ts 145 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-account.service.ts 35 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-active-modal.service.ts 12 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-alert.service.ts 11 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-event-manager.service.ts 12 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-language.service.ts 36 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-login.service.ts 29 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-route.service.ts 29 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/mock-state-storage.service.ts 22 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/helpers/spyobject.ts 69 ●●●●● patch | view | raw | blame | history
src/test/javascript/spec/test.module.ts 72 ●●●●● patch | view | raw | blame | history
src/test/resources/config/application.yml 107 ●●●●● patch | view | raw | blame | history
src/test/resources/i18n/messages_en.properties 1 ●●●● patch | view | raw | blame | history
src/test/resources/logback.xml 44 ●●●●● patch | view | raw | blame | history
src/test/resources/templates/mail/testEmail.html 1 ●●●● patch | view | raw | blame | history
tsconfig-aot.json 28 ●●●●● patch | view | raw | blame | history
tsconfig.json 25 ●●●●● patch | view | raw | blame | history
tslint.json 76 ●●●●● patch | view | raw | blame | history
vue/.gitignore 21 ●●●●● patch | view | raw | blame | history
vue/README.md 37 ●●●●● patch | view | raw | blame | history
vue/babel.config.js 5 ●●●●● patch | view | raw | blame | history
vue/package-lock.json 11184 ●●●●● patch | view | raw | blame | history
vue/package.json 49 ●●●●● patch | view | raw | blame | history
vue/public/favicon.ico patch | view | raw | blame | history
vue/public/index.html 17 ●●●●● patch | view | raw | blame | history
vue/src/App.vue 32 ●●●●● patch | view | raw | blame | history
vue/src/assets/logo.png patch | view | raw | blame | history
vue/src/components/EntityList.vue 25 ●●●●● patch | view | raw | blame | history
vue/src/components/HelloWorld.vue 58 ●●●●● patch | view | raw | blame | history
vue/src/hsadmin.js 28 ●●●●● patch | view | raw | blame | history
vue/src/main.js 10 ●●●●● patch | view | raw | blame | history
vue/src/router.js 45 ●●●●● patch | view | raw | blame | history
vue/src/views/About.vue 5 ●●●●● patch | view | raw | blame | history
vue/src/views/Customer.vue 55 ●●●●● patch | view | raw | blame | history
vue/src/views/Customers.vue 29 ●●●●● patch | view | raw | blame | history
vue/src/views/Home.vue 18 ●●●●● patch | view | raw | blame | history
vue/src/views/Login.vue 37 ●●●●● patch | view | raw | blame | history
webpack/logo-jhipster.png patch | view | raw | blame | history
webpack/utils.js 30 ●●●●● patch | view | raw | blame | history
webpack/webpack.common.js 96 ●●●●● patch | view | raw | blame | history
webpack/webpack.dev.js 132 ●●●●● patch | view | raw | blame | history
webpack/webpack.prod.js 125 ●●●●● patch | view | raw | blame | history
.editorconfig
@@ -18,7 +18,3 @@
[*.md]
trim_trailing_whitespace = false
[package.json]
indent_style = space
indent_size = 2
.huskyrc
File was deleted
.jhipster/Asset.json
File was deleted
.jhipster/Customer.json
File was deleted
.jhipster/Membership.json
File was deleted
.jhipster/SepaMandate.json
File was deleted
.jhipster/Share.json
File was deleted
.jhipster/UserRoleAssignment.json
File was deleted
.prettierignore
File was deleted
.prettierrc
File was deleted
.yo-rc.json
File was deleted
Glossary.md
New file
@@ -0,0 +1,18 @@
# hsadminNg Glossary
### Business Object
Represents an object from the
### Tenant
The RBAC
### RBAC
abbreviation for *Role Based Access Control*
### Role Based Access Control (RBAC)
A system to control access to business objects by defining users, roles, and permissions.
For more information see
JHIPSTER.md
File was deleted
Jenkinsfile
File was deleted
README.md
@@ -1,350 +1,77 @@
# hsadminNg Development
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
-   [Setting up the Development Environment](#setting-up-the-development-environment)
-   [Frequent Tasks](#frequent-tasks)
    -   [Building the Application with Test Execution](#building-the-application-with-test-execution)
    -   [Starting the Application](#starting-the-application)
    -   [Running JUnit tests with branch coverage](#running-junit-tests-with-branch-coverage)
-   [HOWTO Commits](#howto-commits)
    -   [Creating HOWTO Commits](#creating-howto-commits)
-   [Special Build Tasks](#special-build-tasks)
    -   [Spotless Formatting](#spotless-formatting)
    -   [Mutation Testing PiTest](#mutation-testing-pitest)
    -   [Git Workflow for JHipster Generator](#git-workflow-for-jhipster-generator)
    -   [Generating the Table of Contents for Markdown](#generating-the-table-of-contents-for-markdown)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
## Setting up the Development Environment
You'll often need to execute `./gradlew`, therefore we suggest to define this alias:
### PostgreSQL Server
    alias gw='./gradlew'
So far the spike contains almost only PostgreSQL Code.
All you need so far, is a PostgreSQL database, for now with full admin rights.
The easiest way to set it up is using docker:
TODO: Instructions for setting up the dev environment from scratch.
Initially, pull an image compatible to current PostgreSQL version of Hostsharing:
## Frequent Tasks
    docker pull postgres:13.7-bullseye
### Building the Application with Test Execution
Create and run a container with the given PostgreSQL version:
    gw build
    docker run --name hsadmin-ng-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:13.7-bullseye
### Starting the Application
To check if the PostgreSQL container is running, the following command should list a container with the name "hsadmin-ng-postgres":
To use an **H2 in-memory database** populated with sample-data.
    docker container ls
    gw bootRun
Stop the PostgreSQL container:
    docker stop hsadmin-ng-postgres
To use an **H2 file-based database**, start the application with the h2file profile:
Start the PostgreSQL container again:
    gw bootRun -Ph2file
    gw bootRun -Ph2file -Psample-data     # populated with sample data
    docker container start hsadmin-ng-postgres
To use a **local Postgres database**, first prepare your environment:
Remove the PostgreSQL container:
    export HSADMINNG_DB_URL='jdbc:postgresql://localhost:5432/DBNAME'
    export HSADMINNG_DB_USER='DBUSER'
    export HSADMINNG_DB_PASS='DBPASS'
    docker rm hsadmin-ng-postgres
Where `DBNAME`, `DBUSER` and `DBPASS` are replaced by your credentials.
After the PostgreSQL container is removed, you need to create it again as shown in "Create and run ..." above.
Then start the application with the pgsql profile:
### Markdown with PlantUML plugin
    gw bootRun -Ppgsql
    gw bootRun -Ppgsql -Psample-data     # populated with sample data
Can you see the following diagram?
To use a **remote Postgres database** on a Hostsharing server,
```plantuml
@startuml
me -> you: Can you see this diagram?
you -> me: Sorry, I don't :-(
me -> you: Install some tooling!
@enduml
```
    autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" \
        -f -N -L 55432:127.0.0.1:5432 "xyz00@xyz.hostsharing.net"
If not, you need to install some tooling.
Then prepare your environment, e.g. like this:
#### for IntelliJ IDEA (or derived products)
    export HSADMINNG_DB_URL='jdbc:postgresql://localhost:55432/xyz00_hsadminng'
    export HSADMINNG_DB_USER='xyz00_hsadminng'
    export HSADMINNG_DB_PASS='whatever'
You just need the bundled Markdown plugin enabled and install and activate the PlantUML plugin in its settings:
In all cases, you can also **specify the port** to used for the application via environment:
jetbrains://idea/settings?name=Languages+%26+Frameworks--Markdown
    SERVER_PORT=8081 gw bootRun ...
You might also need to install Graphviz on your operating system.
For Debian-based Linux systems this might work:
For starting the JVM of the application in **debug-mode**, add `--debug-jvm` to any of the options above, e.g.
```sh
sudo apt install graphviz
```
    gw bootRun -Ppgsql -Psample-data --debug-jvm
### Running JUnit tests with branch coverage
### Ubuntu Linux command line
#### for IntelliJ IDEA
```sh
sudo apt-get install pandoc texlive-latex-base texlive-fonts-recommended texlive-extra-utils texlive-latex-extra pandoc-plantuml-filter
```
see: https://confluence.jetbrains.com/display/IDEADEV/IDEA+Coverage+Runner
```sh
pandoc --filter pandoc-plantuml rbac.md -o rbac.pdf
```
Either apply it to specific test configurations or,
better, delete the previous test configurations and amend the JUnit template.
### for other IDEs / operating systems
## HOWTO Commits
There are git tags on some commits which show how to add certain features.
Find all of such tags with:
    git tag | grep HOWTO
### Creating HOWTO Commits
If you want to add such a commit, make sure that it contains no clutter
(no changes which are not necessary for whatever the commit is about to explain),
and is complete with all unit tests, code coverage, pitest and other checks.
Otherwise the next developer would run into the same problems again.
One way to keep the commit clean, is to develop it on a local branch.
If any other changes (e.g. bugfixes, API extensions etc.) are necessary,
apply these only to the master or cherry-pick just these to the master,
then rebase your local branch. Do not forget to run all checks locally:
    gw clean check pitest # might need over an hour
(Check the PiTest section for speeding up mutation testing.)
To create and push a new tag use:
    git tag HOWTO-... master
    git push origin HOWTO-...
To moved an existing the tag to another commit (here current master again), do this:
    git tag --force HOWTO-... master
    git push --force origin HOWTO-...
## Special Build Tasks
Besides common build tasks like `build`, `test` or `bootRun` this projects has some not so common tasks which are explained in this section.
### Spotless Formatting
To make sure that no IDE auto-formatter destroys the git history of any file and
especially to avoid merge conflicts from JHipster generated files after these had been changed,
we are using a standard formatter enforced by _spotless_, which is based on the standard Eclipse formatter.
The rules can be checked and applied with these commands:
    gw spotlessCheck
    gw spotlessApply
The spotlessCheck task is included as an early step in our Jenkins build pipeline.
Therefore wrong formatting is automatically detected.
Our configuration can be found under the directory `cfg/spotless`.
Currently we only have specific rules for _\*.java_-files and their import-order.
#### Our Changes to the Standard Eclipse Formatter
We amended the Standard Eclipse Formatter in these respects:
-   Lines of code are never joined, thus the developer has control about linebreaks,
    which is important for readability in some implementations like toString().
-   Lines in comments are never joined either, because that often destroys readable stucture.
-   Parts of files can be excluded from getting formatted, by using `@formatter:off` and `@formatter:on` in a comment.
    See for example in class `SecurityConfiguration`.
#### Pre-Commit Hook
If you like, you could add this code to the _pre-commit or \_pre_push_ hook\_ in your `.git/hooks` directory:
    if  ! ./gradlew spotlessCheck; then
        exit 1
    fi
#### The Tagged Spotless Commit
The commit which introduces the spotless configuration is tagged.
Through this tag it can easily be cherry-picked in the JHipster workflow.
If you need to amend the commit tagged 'spotless', e.g. to change the spotless configuration,
it can be done with these steps:
    git tag REAL-HEAD
    git reset --hard spotless^
    git cherry-pick -n spotless
    ...
    git add .
    # do NOT run: gw spotlessApply yet!
    # for the case you have a commit hook which runs spotlessCheck:
    git commit --no-verify
    git tag --force spotless
    git push --no-verify origin spotless
    git reset --hard REAL-HEAD
    git tag -d REAL-HEAD
### Mutation Testing PiTest
    ./gradlew pitest
Runs (almost) all JUnit tests under mutation testing.
Mutation testing is a means to determine the quality of the tests.
On Jenkins, the results can be found in the build artifacts under:
-   https://ci.hostsharing.net/job/hsadmin-ng-pitest/XX/artifact/build/reports/pitest/index.html
Where XX is the build number. Or for the latest build under:
-   https://ci.hostsharing.net/job/hsadmin-ng-pitest/lastCompletedBuild/artifact/build/reports/pitest/index.html
#### Some Background Information on Mutation Testing
PiTest does it with these steps:
-   initially PiTest checks which production code is executed by which tests
-   if the tests don't pass, it stops
-   otherwise the production code is 'mutated' and PiTest checks whether this makes a test fail ('mutant killed')
-   Finally it checks thresholds for coverage and mutant killing.
More information about can be found here:
-   PiTest: http://pitest.org/
-   gradle-plugin: https://gradle-pitest-plugin.solidsoft.info/
#### How to Configure PiTest
These thresholds can be configured in `build.gradle`,
but we should generally not lower these.
There is also a list of excluded files, all generated by JHipster or MapStruct, not containing any changes by us.
As you might figure, mutation testing is CPU-hungry.
To limit load in our Jenkins build server, it only uses 2 CPU threads, thus it needs over an hour.
If you want to spend more CPU threads on your local system, you can change that via command line:
    gw pitest -Doverride.pitest.threads=7
I suggest to leave one CPU thread for other tasks or your might lag extremely.
### Git Workflow for JHipster Generator
The following workflow steps make sure that
-   JHipster re-imports work properly,
-   the git history of changes to the JDL-files, the generated code and the master is comprehensible,
-   and merging newly generated code to the master branch is smooth.
It uses a git branch `jhipster-generated` to track the history of the JDL model file and the generated source code.
Applying commits which contain non-generated changes to that branch breaks the normal git history for generated files.
Therefore, this documentation is also not available in that branch.
Thus:
**MANUAL STEP before starting:** Copy this workflow documentation, because this file will be gone once you switched the branch.
| WARNING: The following steps are just a guideline. You should understand what you are doing! |
| -------------------------------------------------------------------------------------------- |
#### 1. Preparing the `jhipster-generated` git Branch
This step assumes that the latest `*.jdl` files are on the `HEAD` of the `jhipster-generated` git branch.
On a re-import of a JDL-file, JHipster does not remove any generated classes which belong to entities deleted from the JDL-file.
Therefore, the project has to be reset to a clean state before changes to the JDL file can be re-imported.
We have not yet finally tested a simplified workflow for just adding new entities or properties.
A git tag `jdl-base` is assumed to sit on the base commit after the application was generated, but before any entities were imported.
    git checkout jhipster-generated
    git pull
    git tag REAL-HEAD
    git reset --hard jdl-base
    git clean -f -d
    git cherry-pick -n spotless
    git reset --soft REAL-HEAD
    git checkout REAL-HEAD src/main/jdl/customer.jdl
    git checkout REAL-HEAD src/main/jdl/accessrights.jdl
    git checkout REAL-HEAD src/main/jdl/... # once there are more
    git tag -d REAL-HEAD
#### 2. Amending and Re-Importing the JDL
**MANUAL STEP:** First apply all necessary changes to the JDL files.
Then re-import like this:
    # (Re-) Importing
    jhipster import-jdl src/main/jdl/customer.jdl
    jhipster import-jdl src/main/jdl/accessrights.jdl
    jhipster import-jdl src/main/jdl/... # once there are more
For smoothly being able to merge, we need the same formatting in the generated code as on the master:
    gw spotlessApply
#### 3. Committing our Changes
    git add .
    git commit -m"..."
#### 4. Merging our Changes to the `master` Branch
    git checkout master
    git pull
**MANUAL STEP:** If you've renamed any identifiers, use the refactoring feature of your IDE to rename in master as well.
To avoid oodles of merge-conflicts, you need to do that **BEFORE MERGING!**
Commit any of such changes, if any.
Now we can finally merge our changes to master.
    git merge jhipster-generated
It's a good idea doing this step in an IDE because it makes conflict resolving much easier.
Typical merge conflicts stem from:
-   Random numbers in test data of `*IntTest.java` files.
-   Timestamps in Liquibase-xml-Files.
Now, I suggest to run all tests locally:
    gw clean test
Once everything works again, we can push our new version:
    git push
#### 5. General Aftermath
Think about which additional code could be effected by your JDL-changes!
Files which are not at all in the `jhipster-generated` branch, don't show conflicts even though they might need changes.
Here some examples for amendments to be done:
-   in `historicization_*.xml`: the columns or their constraints
-   `sampledata/*.xml/csv`
If you find more of such general cases, please add them here!
#### 6. Special Aftermath for new Entities
Because we have added quite some functionality, after introducing new entities, there is a lot more to amend.
Here some issues to consider:
-   add sample-data for the new entity
-   internal (Angular) frontend: add table filters
-   internal (Angular) frontend: amend input fields for multiline, if applicable
-   internal (Angular) frontend: check if dates are properly formatted
-   \*Mapper: add displayLabel for entity itself and parents
-   \*DTO: add access-right annotations with customized JSON serializer/deserializer
-   Validator: implement entity-based validator and call it in the generated service
-   external API: add new type to client library
WARNING: This list is most likely incomplete. Pleas add any new found issue!
For many of these issues look for HOWTO-commits in git or HOWTO comments in the source code.
### Generating the Table of Contents for Markdown
This README file contains a table of contents generated by _doctoc_.
It's quite simple to use:
npm install -g doctoc
doctoc --maxlevel 3 README.md
Further information can be found [https://github.com/thlorenz/doctoc/blob/master/README.md](on the _doctoc_ github page).
If you have figured out how it works, please add instructions above this section.
adr/2022-07-18.row-level-security-mechanism.md
New file
@@ -0,0 +1,160 @@
# Use VIEWs with JOIN into Permission-Assignments for Row-Level-Security
**Status:**
- [x] proposed by Michael Hönnig
- [ ] accepted by (Participants)
- [ ] rejected by (Participants)
- [ ] superseded by (superseding ADR)
## Context and Problem Statement
We need to decide how to apply the access rules defined in our RBAC system to the visibility of table rows for the accessing user.
The core problem here is, that in our RBAC system, determining the permissions of the accessing user has to consider a hierarchy of roles.
### Technical Background
The session variable `hsadminng.currentUser` contains the accessing (domain-level) user, which is unrelated to the PostgreSQL user).
Given is a stored function `isPermissionGrantedToSubject` which detects if the accessing user has a given permission (e.g. 'view').
Given is also a stored function `queryAllPermissionsOfSubjectId` which returns the flattened view to all permissions assigned to the given accessing user.
In the following code snippets `customer` is just an example domain table.
## Considered Options
* Perform Visibility-Checks programmatically in the Backend
* Add Visibility-Checks in the Backend
* POLICY with ENABLE ROW LEVEL SECURITY
* VIEW-RULE with  ON SELECT DO INSTEAD
* VIEW with JOIN into Flattened Permissions
### Perform Visibility-Checks programmatically in the Backend
In this solution, the database ignores row level visibility and returns all rows which match a given query. Afterwards, the result is filtered programmatically with Java-code in the backend.
#### Advantages
Very flexible access, programmatic, rules could be implemented.
The role-hierarchy and permissions for currently logged-in users user could be cached in the backend.
The access logic can be tested in pure Java unit tests.
At least regarding this aspect, an in-memory database could be used for integration testing; though the recursive Role-evaluation uses PostgreSQL features anyway.
#### Disadvantages
It's inefficient when initial query is not very restrictive, e.g. as on overview pages in a frontend, which often show all accessible objects, large parts or even whole database tables need to be transferred from the database to the backend.
It's error-prone and security leaks can happen too easily, because after every query the access rights for all participating joins have to be considered.
### Add Visibility-Checks in the Backend
In this solution again, the database ignores row level visibility and returns all rows which match a given query. And the backend adds filter conditions to each query sent to the database.
#### Advantages
At least regarding this aspect, an in-memory database could be used for integration testing.
#### Disadvantages
It's error-prone and security leaks can happen too easily, because for every query the access rights for all participating joins have to be considered.
### POLICY with ENABLE ROW LEVEL SECURITY
For restricted DB-users, which are used by the backend, access to rows is filtered using a policy:
    SET SESSION AUTHORIZATION DEFAULT;
    CREATE ROLE restricted;
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO restricted;
    ALTER TABLE customer ENABLE ROW LEVEL SECURITY;
    CREATE POLICY customer_policy ON customer
        FOR SELECT
        TO restricted
        USING (
            isPermissionGrantedToSubject(findPermissionId('customer', id, 'view'), currentUserId())
        );
    SET SESSION AUTHORIZATION restricted;
    SET hsadminng.currentUser TO 'alex@example.com';
    SELECT * from customer; -- will only return visible rows
#### Advantages
Using POLICY together with ENABLE ROW LEVEL SECURITY is the PostgreSQL native mechanism to control access to data on the role level. Therefore, it looked like an obvious and elegant solution.
Every access at from the backend is under access control at the database level.
### Disadvantages
Unfortunately security mechanisms in PostgreSQL prevent the query optimizer to work well beyond ownership barriers (session user vs. table owner) and a SELECT from a table with 1 million objects needed over 30 seconds with our hierarchical RBAC policy.
We are bound to PostgreSQL, including integration tests and testing the RBAC system itself.
### VIEW-RULE with ON SELECT DO INSTEAD
    SET SESSION SESSION AUTHORIZATION DEFAULT;
    CREATE VIEW cust_view AS
        SELECT * FROM customer;
    CREATE OR REPLACE RULE "_RETURN" AS
        ON SELECT TO cust_view
        DO INSTEAD
            SELECT * FROM customer WHERE isPermissionGrantedToSubject(findPermissionId('customer', id, 'view'), currentUserId());
    SET SESSION AUTHORIZATION restricted;
    SET hsadminng.currentUser TO 'alex@example.com';
    SELECT * from customer; -- will only return visible rows
#### Advantages
Every access at from the backend is under access control at the database level.
Also using ON UPDATE etc., original tables could be completely hidden from the backend, and thus improved security.
### Disadvantages
Unfortunately security mechanisms in PostgreSQL prevent the query optimizer to work well beyond ownership barriers (session user vs. table owner) and a SELECT from a table with 1 million objects needed over 30 seconds with our hierarchical RBAC policy.
We are bound to PostgreSQL, including integration tests and testing the RBAC system itself.
An extra view needed for every table.
### VIEW with JOIN into flattened permissions
We do not access the tables directly from the backend, but via views which join the flattened permissions
    SET SESSION SESSION AUTHORIZATION DEFAULT;
    CREATE OR REPLACE VIEW cust_view AS
        SELECT c.id, c.reference, c.prefix
          FROM customer AS c
          JOIN queryAllPermissionsOfSubjectId(currentUserId()) AS p
               ON p.tableName='customer' AND p.rowId=c.id AND p.op='view';
    GRANT ALL PRIVILEGES ON cust_view TO restricted;
    SET SESSION SESSION AUTHORIZATION restricted;
    SET hsadminng.currentUser TO 'alex@example.com';
    SELECT * from cust_view; -- will only return visible rows
Alternatively the JOIN could also be applied in a "ON SELECT DO INSTEAD"-RULE, if there is any advantage for later features.
#### Advantages
Every access at from the backend is under access control at the database level.
No special PostgreSQL features needed; though the recursive Role-evaluation uses PostgreSQL features anyway.
Very fast, on my laptop a SELECT * FROM a table with 1 million rows just took about 50ms.
Also using ON UPDATE etc., original tables could be completely hidden from the backend, and thus improved security.
### Disadvantages
An extra view needed for every table.
## Decision Outcome
We chose the option **"VIEW with JOIN into flattened permissions"** because it supports the best combination of performance and security with almost no disadvantge.
angular.json
File was deleted
build-cucumber.gradle
File was deleted
build-jacoco.gradle
File was deleted
build-pitest.gradle
File was deleted
build-spotless.gradle
File was deleted
build.gradle
File was deleted
cfg/spotless/eclipse_formatter.xml
File was deleted
cfg/spotless/hsadminng.importorder
File was deleted
cfg/spotless/javascript_formatters.xml
File was deleted
gradle.properties
File was deleted
gradle/docker.gradle
File was deleted
gradle/profile_dev.gradle
File was deleted
gradle/profile_prod.gradle
File was deleted
gradle/sonar.gradle
File was deleted
gradle/swagger.gradle
File was deleted
gradle/wrapper/gradle-wrapper.jar
Binary files differ
gradle/wrapper/gradle-wrapper.properties
File was deleted
gradle/zipkin.gradle
File was deleted
gradlew
File was deleted
gradlew.bat
File was deleted
package-lock.json
File was deleted
package.json
File was deleted
postcss.config.js
File was deleted
proxy.conf.json
File was deleted
settings.gradle
File was deleted
sql/00-util.sql
New file
@@ -0,0 +1,38 @@
abort;
set local session authorization default;
CREATE OR REPLACE FUNCTION array_distinct(anyarray) RETURNS anyarray AS $f$
SELECT array_agg(DISTINCT x) FROM unnest($1) t(x);
$f$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE FUNCTION lastRowCount()
    RETURNS bigint
    LANGUAGE plpgsql AS $$
DECLARE
    lastRowCount bigint;
BEGIN
    GET DIAGNOSTICS lastRowCount = ROW_COUNT;
    RETURN lastRowCount;
END;
$$;
-- ========================================================
-- Test Data helpers
-- --------------------------------------------------------
CREATE OR REPLACE FUNCTION intToVarChar(i integer, len integer)
    RETURNS varchar
    LANGUAGE plpgsql AS $$
DECLARE
partial varchar;
BEGIN
SELECT chr(ascii('a') + i%26) INTO partial;
IF len > 1 THEN
        RETURN intToVarChar(i/26, len-1) || partial;
ELSE
        RETURN partial;
END IF;
END; $$;
SELECT * FROM intToVarChar(211, 4);
sql/10-rbac-base.sql
New file
@@ -0,0 +1,657 @@
-- ========================================================
-- RBAC
-- --------------------------------------------------------
SET SESSION SESSION AUTHORIZATION DEFAULT;
-- https://arctype.com/blog/postgres-uuid/#creating-a-uuid-primary-key-using-uuid-osp-postgresql-example
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
DROP TABLE IF EXISTS "RbacPermission";
DROP TABLE IF EXISTS "RbacGrants";
DROP TABLE IF EXISTS "RbacUser";
DROP TABLE IF EXISTS RbacReference CASCADE;
DROP TYPE IF EXISTS RbacOp CASCADE;
DROP TYPE IF EXISTS ReferenceType CASCADE;
CREATE TYPE ReferenceType AS ENUM ('RbacUser', 'RbacRole', 'RbacPermission');
CREATE TABLE RbacReference
(
    uuid uuid UNIQUE DEFAULT uuid_generate_v4(),
    type ReferenceType not null
);
CREATE TABLE RbacUser
(
    uuid uuid primary key references RbacReference (uuid) ON DELETE CASCADE,
    name varchar(63) not null unique
);
CREATE TABLE RbacRole
(
    uuid uuid primary key references RbacReference (uuid) ON DELETE CASCADE,
    name varchar(63) not null unique
);
CREATE TABLE RbacGrants
(
    ascendantUuid uuid references RbacReference (uuid) ON DELETE CASCADE,
    descendantUuid uuid references RbacReference (uuid) ON DELETE CASCADE,
    -- apply bool not null, -- alternative 1 to implement assumable roles
    primary key (ascendantUuid, descendantUuid)
);
CREATE INDEX ON RbacGrants (ascendantUuid);
CREATE INDEX ON RbacGrants (descendantUuid);
DROP DOMAIN IF EXISTS RbacOp CASCADE;
CREATE DOMAIN RbacOp AS VARCHAR(67)
    CHECK(
          VALUE = '*'
       OR VALUE = 'delete'
       OR VALUE = 'edit'
       OR VALUE = 'view'
       OR VALUE = 'assume'
       OR VALUE ~ '^add-[a-z]+$'
        );
DROP TABLE IF EXISTS RbacObject;
CREATE TABLE RbacObject
(
    uuid uuid UNIQUE DEFAULT uuid_generate_v4(),
    objectTable varchar(64) not null,
    unique (objectTable, uuid)
);
CREATE OR REPLACE FUNCTION createRbacObject()
    RETURNS trigger
    LANGUAGE plpgsql STRICT AS $$
DECLARE
    objectUuid uuid;
BEGIN
    IF TG_OP = 'INSERT' THEN
        INSERT INTO RbacObject (objectTable) VALUES (TG_TABLE_NAME) RETURNING uuid INTO objectUuid;
        NEW.uuid = objectUuid;
        RETURN NEW;
    ELSE
        RAISE EXCEPTION 'invalid usage of TRIGGER AFTER INSERT';
    END IF;
END; $$;
DROP TABLE IF EXISTS RbacPermission;
CREATE TABLE RbacPermission
(   uuid uuid primary key references RbacReference (uuid) ON DELETE CASCADE,
    objectUuid uuid not null,
    op RbacOp not null,
    unique (objectUuid, op)
);
CREATE OR REPLACE FUNCTION hasPermission(forObjectUuid uuid, forOp RbacOp)
    RETURNS bool
    LANGUAGE sql AS $$
        SELECT EXISTS (
            SELECT op
              FROM RbacPermission p
             WHERE p.objectUuid=forObjectUuid AND p.op in ('*', forOp)
            );
    $$;
CREATE OR REPLACE FUNCTION createRbacUser(userName varchar)
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE plpgsql AS $$
declare
    objectId uuid;
BEGIN
    INSERT INTO RbacReference (type) VALUES ('RbacUser') RETURNING uuid INTO objectId;
    INSERT INTO RbacUser (uuid, name) VALUES (objectid, userName);
    return objectId;
END;
$$;
CREATE OR REPLACE FUNCTION findRbacUser(userName varchar) -- TODO: rename to ...Id
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE sql AS $$
        SELECT uuid FROM RbacUser WHERE name = userName
$$;
CREATE OR REPLACE FUNCTION getRbacUserId(userName varchar, whenNotExists RbacWhenNotExists)
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE plpgsql AS $$
DECLARE
    userUuid uuid;
BEGIN
    userUuid = findRbacUser(userName);
    IF ( userUuid IS NULL ) THEN
        IF ( whenNotExists = 'fail') THEN
            RAISE EXCEPTION 'RbacUser with name="%" not found', userName;
        END IF;
        IF ( whenNotExists = 'create') THEN
            userUuid = createRbacUser(userName);
        END IF;
    END IF;
    return userUuid;
END;
$$;
CREATE OR REPLACE FUNCTION createRole(roleName varchar)
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE plpgsql AS $$
declare
    referenceId uuid;
BEGIN
    INSERT INTO RbacReference (type) VALUES ('RbacRole') RETURNING uuid INTO referenceId;
    INSERT INTO RbacRole (uuid, name) VALUES (referenceId, roleName);
    IF (referenceId IS NULL) THEN
        RAISE EXCEPTION 'referenceId for roleName "%" is unexpectedly null', roleName;
    end if;
    return referenceId;
END;
$$;
CREATE OR REPLACE PROCEDURE deleteRole(roleUUid uuid)
    LANGUAGE plpgsql AS $$
BEGIN
    DELETE FROM RbacRole WHERE uuid=roleUUid;
END;
$$;
CREATE OR REPLACE FUNCTION findRoleId(roleName varchar)
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE sql AS $$
        SELECT uuid FROM RbacRole WHERE name = roleName
$$;
CREATE TYPE RbacWhenNotExists AS ENUM ('fail', 'create');
CREATE OR REPLACE FUNCTION getRoleId(roleName varchar, whenNotExists RbacWhenNotExists)
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE plpgsql AS $$
DECLARE
    roleUuid uuid;
BEGIN
    roleUuid = findRoleId(roleName);
    IF ( roleUuid IS NULL ) THEN
        IF ( whenNotExists = 'fail') THEN
            RAISE EXCEPTION 'RbacRole with name="%" not found', roleName;
        END IF;
        IF ( whenNotExists = 'create') THEN
            roleUuid = createRole(roleName);
        END IF;
    END IF;
    return roleUuid;
END;
$$;
-- select getRoleId('hostmaster', 'create');
CREATE OR REPLACE FUNCTION createPermissions(forObjectUuid uuid, permitOps RbacOp[])
    RETURNS uuid[]
    LANGUAGE plpgsql AS $$
DECLARE
    refId uuid;
    permissionIds uuid[] = ARRAY[]::uuid[];
BEGIN
    IF ( forObjectUuid IS NULL ) THEN
        RAISE EXCEPTION 'forObjectUuid must not be null';
    END IF;
    IF ( array_length(permitOps, 1) > 1 AND '*' = any(permitOps) ) THEN
        RAISE EXCEPTION '"*" operation must not be assigned along with other operations: %', permitOps;
    END IF;
    FOR i IN array_lower(permitOps, 1)..array_upper(permitOps, 1) LOOP
        refId = (SELECT uuid FROM RbacPermission WHERE objectUuid=forObjectUuid AND op=permitOps[i]);
        IF (refId IS NULL) THEN
            INSERT INTO RbacReference ("type") VALUES ('RbacPermission') RETURNING uuid INTO refId;
            INSERT INTO RbacPermission (uuid, objectUuid, op) VALUES (refId, forObjectUuid, permitOps[i]);
        END IF;
        permissionIds = permissionIds || refId;
    END LOOP;
    return permissionIds;
END;
$$;
CREATE OR REPLACE FUNCTION findPermissionId(forObjectTable varchar, forObjectUuid uuid, forOp RbacOp)
    RETURNS uuid
    RETURNS NULL ON NULL INPUT
    STABLE LEAKPROOF
    LANGUAGE sql AS $$
        SELECT uuid FROM RbacPermission p
         WHERE p.objectUuid=forObjectUuid AND p.op in ('*', forOp)
$$;
CREATE OR REPLACE FUNCTION assertReferenceType(argument varchar, referenceId uuid, expectedType ReferenceType)
    RETURNS ReferenceType
    LANGUAGE plpgsql AS $$
DECLARE
    actualType ReferenceType;
BEGIN
    actualType = (SELECT type FROM RbacReference WHERE uuid=referenceId);
    IF ( actualType <> expectedType ) THEN
        RAISE EXCEPTION '% must reference a %, but got a %', argument, expectedType, actualType;
    end if;
    RETURN expectedType;
END; $$;
CREATE OR REPLACE PROCEDURE grantPermissionsToRole(roleUuid uuid, permissionIds uuid[])
    LANGUAGE plpgsql AS $$
BEGIN
    FOR i IN array_lower(permissionIds, 1)..array_upper(permissionIds, 1) LOOP
        perform assertReferenceType('roleId (ascendant)', roleUuid, 'RbacRole');
        perform assertReferenceType('permissionId (descendant)',  permissionIds[i], 'RbacPermission');
        -- INSERT INTO RbacGrants (ascendantUuid, descendantUuid, apply) VALUES (roleId, permissionIds[i], true); -- assumeV1
        INSERT INTO RbacGrants (ascendantUuid, descendantUuid) VALUES (roleUuid, permissionIds[i]);
    END LOOP;
END;
$$;
CREATE OR REPLACE PROCEDURE grantRoleToRole(subRoleId uuid, superRoleId uuid
        -- , doapply bool = true -- assumeV1
        )
    LANGUAGE plpgsql AS $$
BEGIN
    perform assertReferenceType('superRoleId (ascendant)', superRoleId, 'RbacRole');
    perform assertReferenceType('subRoleId (descendant)',  subRoleId, 'RbacRole');
    RAISE NOTICE 'granting subRole % to superRole %', subRoleId, superRoleId; -- TODO: remove
    IF ( isGranted(subRoleId, superRoleId) ) THEN
        RAISE EXCEPTION 'Cyclic role grant detected between % and %', subRoleId, superRoleId;
    END IF;
    -- INSERT INTO RbacGrants (ascendantUuid, descendantUuid, apply) VALUES (superRoleId, subRoleId, doapply); -- assumeV1
    INSERT INTO RbacGrants (ascendantUuid, descendantUuid) VALUES (superRoleId, subRoleId)
        ON CONFLICT DO NOTHING ; -- TODO: remove
END; $$;
CREATE OR REPLACE PROCEDURE revokeRoleFromRole(subRoleId uuid, superRoleId uuid)
    LANGUAGE plpgsql AS $$
BEGIN
    perform assertReferenceType('superRoleId (ascendant)', superRoleId, 'RbacRole');
    perform assertReferenceType('subRoleId (descendant)',  subRoleId, 'RbacRole');
    IF ( isGranted(subRoleId, superRoleId) ) THEN
        DELETE FROM RbacGrants WHERE ascendantUuid=superRoleId AND descendantUuid=subRoleId;
    END IF;
END; $$;
CREATE OR REPLACE PROCEDURE grantRoleToUser(roleId uuid, userId uuid)
    LANGUAGE plpgsql AS $$
BEGIN
    perform assertReferenceType('roleId (ascendant)', roleId, 'RbacRole');
    perform assertReferenceType('userId (descendant)',  userId, 'RbacUser');
    -- INSERT INTO RbacGrants (ascendantUuid, descendantUuid, apply) VALUES (userId, roleId, true); -- assumeV1
    INSERT INTO RbacGrants (ascendantUuid, descendantUuid) VALUES (userId, roleId)
        ON CONFLICT DO NOTHING ; -- TODO: remove
END; $$;
abort;
set local session authorization default;
CREATE OR REPLACE FUNCTION queryAccessibleObjectUuidsOfSubjectIds(
            requiredOp RbacOp,
            -- objectTable varchar, -- TODO: maybe another optimization? but test perforamance for joins!
            subjectIds uuid[],
            maxDepth integer = 8,
            maxObjects integer = 16000)
    RETURNS SETOF uuid
    RETURNS NULL ON NULL INPUT
    LANGUAGE plpgsql AS $$
    DECLARE
        foundRows bigint;
    BEGIN
         RETURN QUERY SELECT DISTINCT perm.objectUuid
          FROM (
               WITH RECURSIVE grants AS (
                   SELECT descendantUuid, ascendantUuid, 1 AS level
                       FROM RbacGrants
                       WHERE ascendantUuid = ANY(subjectIds)
                   UNION ALL
                   SELECT "grant".descendantUuid, "grant".ascendantUuid, level + 1 AS level
                        FROM RbacGrants "grant"
                        INNER JOIN grants recur ON recur.descendantUuid = "grant".ascendantUuid
                   WHERE level <= maxDepth
               ) SELECT descendantUuid
               FROM grants
               -- LIMIT maxObjects+1
           ) as granted
         JOIN RbacPermission perm ON granted.descendantUuid=perm.uuid AND perm.op IN ('*', requiredOp);
         foundRows = lastRowCount();
         IF foundRows > maxObjects THEN
             RAISE EXCEPTION 'Too many accessible objects, limit is %, found %.', maxObjects, foundRows
                 USING
                     ERRCODE = 'P0003', -- 'HS-ADMIN-NG:ACC-OBJ-EXC',
                     HINT = 'Please assume a sub-role and try again.';
         END IF;
    END;
$$;
abort;
set local session authorization restricted;
begin transaction;
set local statement_timeout TO '60s';
select count(*)
  from queryAccessibleObjectUuidsOfSubjectIds('view', ARRAY[findRbacUser('mike@hostsharing.net')], 4, 10000);
end transaction;
---
abort;
set local session authorization default;
CREATE OR REPLACE FUNCTION queryRequiredPermissionsOfSubjectIds(requiredOp RbacOp, subjectIds uuid[])
    RETURNS SETOF RbacPermission
    STRICT
    LANGUAGE sql AS $$
        SELECT DISTINCT *
          FROM RbacPermission
         WHERE op = '*' OR op = requiredOp
           AND uuid IN (
                WITH RECURSIVE grants AS (
                    SELECT DISTINCT
                        descendantUuid,
                        ascendantUuid
                    FROM RbacGrants
                    WHERE
                            ascendantUuid = ANY(subjectIds)
                    UNION ALL
                    SELECT
                        "grant".descendantUuid,
                        "grant".ascendantUuid
                    FROM RbacGrants "grant"
                             INNER JOIN grants recur ON recur.descendantUuid = "grant".ascendantUuid
                ) SELECT
                    descendantUuid
                FROM grants
            );
$$;
abort;
set local session authorization restricted;
begin transaction;
-- set local statement_timeout TO '5s';
set local statement_timeout TO '5min';
select count(*) from queryRequiredPermissionsOfSubjectIds('view', ARRAY[findRbacUser('mike@hostsharing.net')]);
end transaction;
---
abort;
set local session authorization default;
CREATE OR REPLACE FUNCTION queryAllPermissionsOfSubjectIds(subjectIds uuid[])
    RETURNS SETOF RbacPermission
    STRICT
    LANGUAGE sql AS $$
        SELECT DISTINCT * FROM RbacPermission WHERE uuid IN (
            WITH RECURSIVE grants AS (
                SELECT DISTINCT
                    descendantUuid,
                    ascendantUuid
                FROM RbacGrants
                WHERE
                        ascendantUuid = ANY(subjectIds)
                UNION ALL
                SELECT
                    "grant".descendantUuid,
                    "grant".ascendantUuid
                FROM RbacGrants "grant"
                         INNER JOIN grants recur ON recur.descendantUuid = "grant".ascendantUuid
            ) SELECT
                descendantUuid
            FROM grants
        );
        $$;
abort;
set local session authorization restricted;
begin transaction;
    set local statement_timeout TO '5s';
    select count(*) from queryAllPermissionsOfSubjectIds(ARRAY[findRbacUser('mike@hostsharing.net')]);
end transaction;
---
CREATE OR REPLACE FUNCTION queryAllPermissionsOfSubjectId(subjectId uuid) -- TODO: remove?
    RETURNS SETOF RbacPermission
    RETURNS NULL ON NULL INPUT
    LANGUAGE sql AS $$
        SELECT * FROM RbacPermission WHERE uuid IN (
        WITH RECURSIVE grants AS (
            SELECT
                descendantUuid,
                ascendantUuid
            FROM
                RbacGrants
            WHERE
                ascendantUuid = subjectId
            UNION ALL
            SELECT
                "grant".descendantUuid,
                "grant".ascendantUuid
            FROM RbacGrants "grant"
                 INNER JOIN grants recur ON recur.descendantUuid = "grant".ascendantUuid
        ) SELECT
            descendantUuid
        FROM
            grants
    );
$$;
---
CREATE OR REPLACE FUNCTION queryAllRbacUsersWithPermissionsFor(objectId uuid)
    RETURNS SETOF RbacUser
    RETURNS NULL ON NULL INPUT
    LANGUAGE sql AS $$
SELECT * FROM RbacUser WHERE uuid IN (
    WITH RECURSIVE grants AS (
        SELECT
            descendantUuid,
            ascendantUuid
        FROM
            RbacGrants
        WHERE
            descendantUuid = objectId
        UNION ALL
        SELECT
            "grant".descendantUuid,
            "grant".ascendantUuid
        FROM
            RbacGrants "grant"
                INNER JOIN grants recur ON recur.ascendantUuid = "grant".descendantUuid
    ) SELECT
        ascendantUuid
    FROM
        grants
);
$$;
CREATE OR REPLACE FUNCTION findGrantees(grantedId uuid)
    RETURNS SETOF RbacReference
    RETURNS NULL ON NULL INPUT
    LANGUAGE sql AS $$
    SELECT reference.*
      FROM (
        WITH RECURSIVE grants AS (
            SELECT
                descendantUuid,
                ascendantUuid
            FROM
                RbacGrants
            WHERE
                    descendantUuid = grantedId
            UNION ALL
            SELECT
                "grant".descendantUuid,
                "grant".ascendantUuid
            FROM
                RbacGrants "grant"
                    INNER JOIN grants recur ON recur.ascendantUuid = "grant".descendantUuid
        ) SELECT
            ascendantUuid
        FROM
            grants
      ) as grantee
    JOIN RbacReference reference ON reference.uuid=grantee.ascendantUuid;
$$;
CREATE OR REPLACE FUNCTION isGranted(granteeId uuid, grantedId uuid)
    RETURNS bool
    RETURNS NULL ON NULL INPUT
    LANGUAGE sql AS $$
SELECT granteeId=grantedId OR granteeId IN (
    WITH RECURSIVE grants AS (
        SELECT
            descendantUuid,
            ascendantUuid
        FROM
            RbacGrants
        WHERE
                descendantUuid = grantedId
        UNION ALL
        SELECT
            "grant".descendantUuid,
            "grant".ascendantUuid
        FROM
            RbacGrants "grant"
                INNER JOIN grants recur ON recur.ascendantUuid = "grant".descendantUuid
    ) SELECT
        ascendantUuid
    FROM