Commit 1b068ebb authored by bazarbay's avatar bazarbay

first commit

parent 44cd2275
Pipeline #326 failed with stages
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
FROM xldevops/jdk17-lts
ARG JAR_FILE=build/libs/printedFormsService-app.jar
#RUN mkdir /app
COPY ${JAR_FILE} /spring-boot-application.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar","/spring-boot-application.jar"]
# Getting Started
### Reference Documentation
For further reference, please consider the following sections:
* [Official Gradle documentation](https://docs.gradle.org)
* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/3.1.5/gradle-plugin/reference/html/)
* [Create an OCI image](https://docs.spring.io/spring-boot/docs/3.1.5/gradle-plugin/reference/html/#build-image)
### Additional Links
These additional references should also help you:
* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle)
# templateService # printedFormsService
\ No newline at end of file
plugins {
id 'java'
id "org.springframework.boot" version "3.1.5"
id "io.spring.dependency-management" version "1.1.0"
}
group = 'kz.project'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
ext {
pluginVersion = '1.1'
set('springCloudVersion', "2022.0.3")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation "org.springframework.boot:spring-boot-starter-actuator"
/*implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'*/
implementation 'org.springframework.cloud:spring-cloud-starter-feign:1.4.7.RELEASE'
runtimeOnly 'org.postgresql:postgresql:42.6.0'
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'
annotationProcessor 'org.projectlombok:lombok'
implementation 'net.sf.jasperreports:jasperreports:6.20.6'
implementation 'org.freemarker:freemarker:2.3.31'
implementation 'com.github.librepdf:openpdf:1.3.30'
implementation ('com.jlefebure:spring-boot-starter-minio:1.10')/*{
exclude('org.springframework.boot:spring-boot-starters')
}*/
compileOnly 'org.projectlombok:lombok:1.18.28'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
implementation 'org.modelmapper:modelmapper:3.2.0'
implementation 'commons-fileupload:commons-fileupload:1.4'
implementation 'commons-codec:commons-codec:1.16.0'
// implementation "org.flywaydb:flyway-core"
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
bootJar {
archiveFileName.set("${project.name}-app.jar")
}
jar { enabled = false }
test {
useJUnitPlatform()
}
\ No newline at end of file
version: '3'
services:
postgres:
image: postgres
environment:
POSTGRES_DB: template_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
expose:
- 5432
ports:
- "5432:5432"
client-backend:
image: templete-service:latest
build:
context: ./
dockerfile: Dockerfile
ports:
- "8081:8081"
depends_on:
- postgres
environment:
- SERVER_PORT= 8081
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/template_db
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
rootProject.name = 'printedFormsService'
package kz.project.printedFormsService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PrintedFormsServiceApplication {
public static void main(String[] args) {
SpringApplication.run(PrintedFormsServiceApplication.class, args);
}
}
package kz.project.printedFormsService;
import lombok.Data;
import java.util.function.Supplier;
@Data
public class ValidationException extends Exception {
private String message;
private int code;
public ValidationException(String message){
super(message);
}
public ValidationException(String message, int code) {
this.message = message;
this.code = code;
}
}
package kz.project.printedFormsService.config;
import freemarker.template.TemplateExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FreemarkerTemplateConfiguration {
@Bean
public freemarker.template.Configuration freemarkerConfiguration() {
freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_30);
configuration.setDefaultEncoding("UTF-8");
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
configuration.setLogTemplateExceptions(false);
return configuration;
}
}
/*
package kz.project.printedFormsService.config;
import kz.project.printedFormsService.converter.JwtAuthConverter;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.CsrfConfigurer;
import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS;
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {
private static final String[] WHITE_LIST_URL = {"/api/v1/auth/**",
"/v2/api-docs",
"/v3/api-docs",
"/v3/api-docs/**",
"/swagger-resources",
"/swagger-resources/**",
"/configuration/ui",
"/configuration/security",
"/swagger-ui/**",
"/webjars/**",
"/swagger-ui.html"};
private final JwtAuthConverter jwtAuthConverter;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.cors(Customizer.withDefaults())
.csrf(CsrfConfigurer::disable)
.authorizeHttpRequests(req ->
req.requestMatchers(WHITE_LIST_URL)
.permitAll()
.anyRequest()
.authenticated()
)
.sessionManagement(session -> session.sessionCreationPolicy(STATELESS))
.oauth2ResourceServer(oauth ->
oauth.jwt(jwt ->
jwt.jwtAuthenticationConverter(jwtAuthConverter)))
*/
/* .authenticationProvider(authenticationProvider)
.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
.logout(logout ->
logout.logoutUrl("/api/v1/auth/logout")
.addLogoutHandler(logoutHandler)
.logoutSuccessHandler((request, response, authentication) -> SecurityContextHolder.clearContext())*//*
;
*/
/* http
.csrf()
.disable()
.authorizeHttpRequests()
.anyRequest()
.authenticated();*//*
*/
/* http
.oauth2ResourceServer()
.jwt()
.jwtAuthenticationConverter(jwtAuthConverter);
http
.sessionManagement()
.sessionCreationPolicy(STATELESS);*//*
return http.build();
}
*/
/* @Bean
public OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService(
ClientRegistrationRepository clientRegistrationRepository,
OAuth2AuthorizedClientRepository authorizedClientRepository) {
DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
return new RefreshTokenOAuth2UserService(delegate, clientRegistrationRepository, authorizedClientRepository);
}*//*
}*/
package kz.project.printedFormsService.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import io.swagger.v3.oas.annotations.servers.Server;
import org.springframework.context.annotation.Configuration;
@OpenAPIDefinition(
info = @Info(
title = "Template Service API",
description = "Loyalty System", version = "1.0.0",
contact = @Contact(
name = "Struchkov Mark",
email = "mark@struchkov.dev",
url = "https://mark.struchkov.dev"
)
)
)
@Configuration
public class SwaggerConfig {
}
package kz.project.printedFormsService.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import kz.project.printedFormsService.data.dto.DTemplateTypeDto;
import kz.project.printedFormsService.service.DTemplateTypeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/dict")
@RequiredArgsConstructor
@Slf4j
@Tag(name = "DTemplate Controller", description = "API TemplateService")
public class DTemplateTypeController {
private final DTemplateTypeService service;
@GetMapping("get/all")
@Operation(description = "Метод для получения шаблона по идентификатору")
public List<DTemplateTypeDto> getDict() {
return service.getAllTemplateType();
}
}
package kz.project.printedFormsService.controller;
;
import kz.project.printedFormsService.ValidationException;
import kz.project.printedFormsService.data.dto.ResponseErrorDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import java.util.Optional;
@ControllerAdvice
public class RestErrorController extends ResponseEntityExceptionHandler {
@ExceptionHandler(ValidationException.class)
//@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Remote service response")
protected ResponseEntity<ResponseErrorDto> handleThereIsNoSuchUserException(ValidationException err) {
err.printStackTrace();
return new ResponseEntity<>(new ResponseErrorDto(err.getMessage(),err.getCode()),HttpStatus.BAD_REQUEST);
}
}
/*
package kz.project.printedFormsService.converter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.NonNull;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.jwt.JwtClaimNames;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
public class JwtAuthConverter implements Converter<Jwt, AbstractAuthenticationToken> {
private final JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter =
new JwtGrantedAuthoritiesConverter();
@Value("${jwt.auth.converter.principle-attribute}")
private String principleAttribute;
@Value("${jwt.auth.converter.resource-id}")
private String resourceId;
@Override
public AbstractAuthenticationToken convert(@NonNull Jwt jwt) {
Collection<GrantedAuthority> authorities = Stream.concat(
jwtGrantedAuthoritiesConverter.convert(jwt).stream(),
extractResourceRoles(jwt).stream()
).collect(Collectors.toSet());
return new JwtAuthenticationToken(
jwt,
authorities,
getPrincipleClaimName(jwt)
);
}
private String getPrincipleClaimName(Jwt jwt) {
String claimName = JwtClaimNames.SUB;
if (principleAttribute != null) {
claimName = principleAttribute;
}
return jwt.getClaim(claimName);
}
private Collection<? extends GrantedAuthority> extractResourceRoles(Jwt jwt) {
Map<String, Object> resourceAccess;
Map<String, Object> resource;
Collection<String> resourceRoles;
if (jwt.getClaim("resource_access") == null) {
return Set.of();
}
resourceAccess = jwt.getClaim("resource_access");
if (resourceAccess.get(resourceId) == null) {
return Set.of();
}
resource = (Map<String, Object>) resourceAccess.get(resourceId);
resourceRoles = (Collection<String>) resource.get("roles");
return resourceRoles
.stream()
.map(role -> new SimpleGrantedAuthority("ROLE_" + role))
.collect(Collectors.toSet());
}
}*/
package kz.project.printedFormsService.converter;
import com.fasterxml.jackson.databind.ObjectMapper;
import kz.project.printedFormsService.data.dto.TemplateDto;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class TempateDtoToStringConverter implements Converter<String, TemplateDto> {
@Autowired
private ObjectMapper objectMapper;
@Override
@SneakyThrows
public TemplateDto convert(String source) {
return objectMapper.readValue(source, TemplateDto.class);
}
}
package kz.project.printedFormsService.data.dto;
import kz.project.printedFormsService.data.entity.dict.DTemplateType;
import kz.project.printedFormsService.service.DTemplateTypeService;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DTemplateTypeDto {
private String code;
private String name;
public static DTemplateTypeDto toDto(DTemplateType et){
return new DTemplateTypeDto(et.getCode(), et.getName());
}
public static List<DTemplateTypeDto>toDtoList(List<DTemplateType> ets){
List<DTemplateTypeDto> dtos = new ArrayList<>();
ets.stream().forEach(i->dtos.add(new DTemplateTypeDto(i.getCode(), i.getName())));
return dtos;
}
}
package kz.project.printedFormsService.data.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Schema(name = "MessageDto", description = "Ответ")
public class ResponseErrorDto {
@NotBlank
@Schema(name = "errorMessage")
private String errorMessage;
@NotBlank
@Schema(name = "code")
private int code;
}
package kz.project.printedFormsService.data.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import kz.project.printedFormsService.data.entity.TemplateEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Schema(name = "TemplateDto", description = "Модель")
public class TemplateDto {
@NotBlank
@Schema(name ="templateId", description = "Код шаблона", defaultValue = "123")
private Long templateId;
@NotBlank
@Schema(name ="code", description = "Код шаблона", defaultValue = "template_1")
private String code;
@NotBlank
@Schema(name ="name", description = "Наименование шаблона",defaultValue = "Шаблон 1")
private String name;
@NotBlank
@Schema(name = "type", description = "Тип фаила")
private String type;
@NotBlank
@Schema(name ="status", description = "Флаг активности", defaultValue = "1")
private Boolean status;
@NotBlank
@Schema(name ="version", description = "Версия активности")
private Integer version;
private TemplateFileDataDto templateFile;
private TemplateFileDataDto headerFile;
private List<GroupIndoDto>groups;
public static TemplateDto toDtoShort(TemplateEntity te) {
return TemplateDto.builder()
.code(te.getCode())
.status(te.getStatus())
.templateFile(new TemplateFileDataDto(te.getTemplate().getId(),te.getTemplate().getName()))
.headerFile(te.getTempleateHeader()!=null?new TemplateFileDataDto(te.getTempleateHeader().getId(),te.getTempleateHeader().getName()):null)
.type(te.getType().getCode())
.version(te.getVersion())
.groups(List.of(new GroupIndoDto("1","группа-1"),new GroupIndoDto("2","группа-2")))
.build();
}
public static TemplateDto toDto(TemplateEntity te) {
return TemplateDto.builder()
.templateId(te.getId())
.name(te.getTemplate().getName())
.code(te.getCode())
.status(te.getStatus())
.templateFile(new TemplateFileDataDto(te.getTemplate().getId(),te.getTemplate().getName()))
.headerFile(te.getTempleateHeader()!=null?new TemplateFileDataDto(te.getTempleateHeader().getId(),te.getTempleateHeader().getName()):null)
.type(te.getType().getCode())
.version(te.getVersion())
.groups(List.of(new GroupIndoDto("1","группа-1"),new GroupIndoDto("2","группа-2")))
.build();
}
public static Page<TemplateDto> toDtoList(Page<TemplateEntity> all){
if(all.getContent()==null)return null;
List<TemplateDto> dtos = new ArrayList<>();
for (TemplateEntity te:all.getContent()) {
dtos.add(TemplateDto.toDto(te));
}
return new PageImpl<>(dtos, PageRequest.of(all.getNumber(),all.getSize()),all.getTotalElements());
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class TemplateFileDataDto{
@NotBlank
@Schema(name ="fileId", description = "Идентификатор файла", defaultValue = "4654654646")
private Long fileId;
@NotBlank
@Schema(name ="fileName", description = "Название файла")
private String fileName;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class GroupIndoDto{
private String groupId;
private String name;
}
}
package kz.project.printedFormsService.data.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
private String name;
private String email;
private List<String>projects;
private List<String> roles;
}
package kz.project.printedFormsService.data.entity;
import jakarta.persistence.*;
import kz.project.printedFormsService.data.entity.dict.DTemplateType;
import lombok.Data;
@Entity
@Table(name = "template", schema = "template_schema")
@Data
public class TemplateEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String code;
private Boolean status;
private Integer version;
@ManyToOne
private DTemplateType type;
@OneToOne
private TemplateFileInfoEntity template;
@OneToOne
private TemplateFileInfoEntity templeateHeader;
}
package kz.project.printedFormsService.data.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "file_info", schema = "template_schema")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TemplateFileInfoEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Boolean isHeader;
private String path;
private Integer hash;
private byte[] data;
}
package kz.project.printedFormsService.data.entity.dict;
import jakarta.persistence.*;
import lombok.Data;
@Entity
@Table(name = "d_template_type", schema = "template_schema")
@Data
public class DTemplateType {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String code;
private String name;
}
/*
package kz.project.printedFormsService.data.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import java.security.Permission;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@RequiredArgsConstructor
public enum Role {
USER(Collections.emptySet()),
ADMIN(
Set.of(
ADMIN_READ,
ADMIN_UPDATE,
ADMIN_DELETE,
ADMIN_CREATE,
MANAGER_READ,
MANAGER_UPDATE,
MANAGER_DELETE,
MANAGER_CREATE
)
),
MANAGER(
Set.of(
MANAGER_READ,
MANAGER_UPDATE,
MANAGER_DELETE,
MANAGER_CREATE
)
)
;
@Getter
private final Set<Permission> permissions;
public List<SimpleGrantedAuthority> getAuthorities() {
var authorities = getPermissions()
.stream()
.map(permission -> new SimpleGrantedAuthority(permission.getPermission()))
.collect(Collectors.toList());
authorities.add(new SimpleGrantedAuthority("ROLE_" + this.name()));
return authorities;
}
}*/
package kz.project.printedFormsService.data.repository;
import kz.project.printedFormsService.data.entity.dict.DTemplateType;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface DTemplateTypeRepository extends JpaRepository<DTemplateType, Long> {
Optional<DTemplateType>findByCode(String code);
}
package kz.project.printedFormsService.data.repository;
import kz.project.printedFormsService.data.entity.TemplateFileInfoEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface TemplateFileInfoRepository extends JpaRepository<TemplateFileInfoEntity, Long> {
}
/*
package kz.project.printedFormsService.data.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface TemplateHeaderRepository extends JpaRepository<TemplateHeaderRepository, Long> {
}
*/
package kz.project.printedFormsService.data.repository;
import kz.project.printedFormsService.data.entity.TemplateEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface TemplateRepository extends JpaRepository<TemplateEntity, Long> {
Optional<TemplateEntity> findByCode(String code);
Page<TemplateEntity> findAllByStatusTrue(Pageable pageable);
Page<TemplateEntity> findAllByStatusFalse(Pageable pageable);
Optional<TemplateEntity> findFirstByCodeOrderByVersionDesc(String code);
Page<TemplateEntity> findAllByCode(Pageable pageable, String code);
}
package kz.project.printedFormsService.service;
import kz.project.printedFormsService.data.dto.DTemplateTypeDto;
import java.util.List;
public interface DTemplateTypeService {
List<DTemplateTypeDto> getAllTemplateType();
}
package kz.project.printedFormsService.service;
import kz.project.printedFormsService.ValidationException;
import kz.project.printedFormsService.data.dto.TemplateDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public interface TemplateService {
Map<String, byte[]> getTemplate(Long id) throws ValidationException;
TemplateDto save(TemplateDto dto, List<MultipartFile> files) throws IOException, ValidationException;
TemplateDto edit(TemplateDto dto, List<MultipartFile> files) throws IOException, ValidationException;
void delete(String code);
Page<TemplateDto> getAllTemplate(Boolean isActive, Pageable pageable);
TemplateDto getTemplateData(Long id) throws ValidationException;
Page<TemplateDto> getAllTemplateByCode(String code, Pageable pageable) throws ValidationException;
}
package kz.project.printedFormsService.service.impl;
import kz.project.printedFormsService.data.dto.DTemplateTypeDto;
import kz.project.printedFormsService.data.entity.dict.DTemplateType;
import kz.project.printedFormsService.data.repository.DTemplateTypeRepository;
import kz.project.printedFormsService.service.DTemplateTypeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class DTemplateTypeServiceImpl implements DTemplateTypeService {
private final DTemplateTypeRepository repository;
public List<DTemplateTypeDto> getAllTemplateType(){
List<DTemplateType> all = repository.findAll();
return DTemplateTypeDto.toDtoList(all);
}
}
package kz.project.printedFormsService.service.impl;
import kz.project.printedFormsService.ValidationException;
import kz.project.printedFormsService.data.dto.TemplateDto;
import kz.project.printedFormsService.data.entity.TemplateEntity;
import kz.project.printedFormsService.data.entity.TemplateFileInfoEntity;
import kz.project.printedFormsService.data.repository.DTemplateTypeRepository;
import kz.project.printedFormsService.data.repository.TemplateFileInfoRepository;
import kz.project.printedFormsService.data.repository.TemplateRepository;
import kz.project.printedFormsService.service.TemplateService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class TemplateServiceImpl implements TemplateService {
private final TemplateRepository repository;
private final DTemplateTypeRepository dTemplateTypeRepository;
private final TemplateFileInfoRepository fileInfoRepository;
@Override
public Map<String, byte[]> getTemplate(Long id) throws ValidationException {
Map<String, byte[]> params = new HashMap<>();
TemplateEntity templateEntity = repository.findById(id).orElse(null);
if (templateEntity == null) throw new ValidationException("по данному параметру отсутствуют данные: "+id, 13);
params.put("body", templateEntity.getTemplate().getData());
params.put("header", templateEntity.getTempleateHeader()!=null?templateEntity.getTempleateHeader().getData():null);
return params;
}
@Override
@Transactional
public TemplateDto save(TemplateDto dto, List<MultipartFile> files) throws IOException, ValidationException {
if (!validateData(dto)) throw new ValidationException("Не переданы обязательные поля", 13);
TemplateEntity templateEntity = createTemplateEntity(dto, files);
TemplateEntity save = repository.save(templateEntity);
return TemplateDto.toDto(save);
}
@Override
@Transactional
public TemplateDto edit(TemplateDto dto, List<MultipartFile> files) throws IOException, ValidationException {
if (!validateData(dto) || dto.getTemplateId() == null || repository.findById(dto.getTemplateId()) == null)
throw new ValidationException("Не переданы обязательные поля", 13);
return TemplateDto.toDto(repository.save(createTemplateEntity(dto, files)));
}
@Override
public void delete(String code) {
repository.delete(repository.findByCode(code).get());
}
@Override
public Page<TemplateDto> getAllTemplate(Boolean isActive, Pageable pageable) {
if (isActive == null) return TemplateDto.toDtoList(repository.findAll(pageable));
else if (isActive)
return TemplateDto.toDtoList(repository.findAllByStatusTrue(pageable));
else return TemplateDto.toDtoList(repository.findAllByStatusFalse(pageable));
}
@Override
public TemplateDto getTemplateData(Long id) throws ValidationException {
if (id == null) throw new ValidationException("Не переданы обязательные поля", 13);
return TemplateDto.toDto(repository.findById(id).orElseThrow(() -> new ValidationException("Не найден шаблон с таким идентификатором или кодом", 13)));
}
@Override
public Page<TemplateDto> getAllTemplateByCode(String code, Pageable pageable) throws ValidationException {
if (code != null) {
Page<TemplateEntity> allByCode = repository.findAllByCode(pageable, code);
if (allByCode != null)
return TemplateDto.toDtoList(allByCode);
}
throw new ValidationException("Не переданы обязательные поля", 13);
}
private TemplateEntity createTemplateEntity(TemplateDto dto, List<MultipartFile> files) throws IOException, ValidationException {
createTempaleFiles(dto, files.get(0).getResource().getContentAsByteArray(), false);
TemplateEntity templateEntity = new TemplateEntity();
templateEntity.setCode(dto.getCode());
templateEntity.setTemplate(createTempaleFiles(dto, files.get(0).getResource().getContentAsByteArray(), false));
templateEntity.setCode(dto.getCode());
templateEntity.setStatus(dto.getStatus());
templateEntity.setType(dTemplateTypeRepository.findByCode(dto.getType()).orElseThrow(()->new ValidationException("Не найден справочное значение по коду: "+dto.getType(),13)));
templateEntity.setVersion(dto.getVersion() + 1);
if (files.size() == 2 && files.get(1) != null)
templateEntity.setTempleateHeader(createTempaleFiles(dto, files.get(1).getResource().getContentAsByteArray(), true));
templateEntity.setStatus(dto.getStatus());
templateEntity.setVersion(dto.getVersion() != null ? dto.getVersion() + 1 : 1);
return templateEntity;
}
private TemplateFileInfoEntity createTempaleFiles(TemplateDto dto, byte[] files, boolean isHeader) throws IOException {
if(files.length==0)
return null;
return fileInfoRepository.save(TemplateFileInfoEntity.builder()
.isHeader(isHeader)
.name(dto.getTemplateFile().getFileName())
.data(files)
.hash(files.hashCode())
.build());
}
private boolean validateData(TemplateDto dto) throws ValidationException {
if (dto == null
|| dto.getCode() == null
|| dto.getName() == null
|| dto.getStatus() == null
|| dto.getType() == null)
return false;
return true;
}
}
"<?xml version="1.0" encoding="UTF-8"?>"
"<!-- Created with Jaspersoft Studio version 6.20.0.final using JasperReports Library version 6.20.0-2bc7ab61c56f459e8176eb05c7705e145cd400ad -->"
"<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="JSONReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d8b3a6dd-e841-46a3-84c5-8738634727d2">"
" <property name="com.jaspersoft.studio.data.defaultdataadapter" value="JSON Adapter 4.jrdax"/>"
" <queryString language="JSON">"
" <![CDATA[age]]>"
" </queryString>"
" <field name="node" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="."/>"
" <fieldDescription><![CDATA[.]]></fieldDescription>"
" </field>"
" <field name="type" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="type"/>"
" <fieldDescription><![CDATA[type]]></fieldDescription>"
" </field>"
" <field name="name" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="name"/>"
" <fieldDescription><![CDATA[name]]></fieldDescription>"
" </field>"
" <field name="age" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="age"/>"
" <fieldDescription><![CDATA[age]]></fieldDescription>"
" </field>"
" <field name="paws" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="paws"/>"
" <fieldDescription><![CDATA[paws]]></fieldDescription>"
" </field>"
" <field name="tail" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="tail"/>"
" <fieldDescription><![CDATA[tail]]></fieldDescription>"
" </field>"
" <field name="eyes" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="eyes"/>"
" <fieldDescription><![CDATA[eyes]]></fieldDescription>"
" </field>"
" <field name="breed" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="breed"/>"
" <fieldDescription><![CDATA[breed]]></fieldDescription>"
" </field>"
" <field name="photo" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="photo"/>"
" <fieldDescription><![CDATA[photo]]></fieldDescription>"
" </field>"
" <field name="thoroughbred" class="java.lang.String">"
" <property name="net.sf.jasperreports.json.field.expression" value="thoroughbred"/>"
" <fieldDescription><![CDATA[thoroughbred]]></fieldDescription>"
" </field>"
" <background>"
" <band splitType="Stretch"/>"
" </background>"
" <detail>"
" <band height="240" splitType="Stretch">"
" <textField>"
" <reportElement x="220" y="60" width="164" height="20" uuid="f5fa2510-f982-4dbf-85f7-f55928f1a569"/>"
" <textFieldExpression><![CDATA[$F{type}]]></textFieldExpression>"
" </textField>"
" <staticText>"
" <reportElement x="163" y="0" width="228" height="40" uuid="206c837b-aa7b-4433-9599-b78f00d628f3"/>"
" <textElement textAlignment="Center" verticalAlignment="Middle">"
" <font fontName="Arial" size="16" isBold="true" isItalic="true"/>"
" </textElement>"
" <text><![CDATA[Описание животного]]></text>"
" </staticText>"
" <staticText>"
" <reportElement x="104" y="60" width="116" height="20" uuid="8a3e1d8c-975d-4caf-a132-a6d3d88a822f"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Тип:]]></text>"
" </staticText>"
" <staticText>"
" <reportElement x="104" y="80" width="116" height="20" uuid="bd555d13-4f8e-4570-9dc7-bdeabe158467"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Кличка:]]></text>"
" </staticText>"
" <staticText>"
" <reportElement x="104" y="100" width="116" height="20" uuid="7d4d1764-eed1-4630-a2b1-10772296874a"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Возраст:]]></text>"
" </staticText>"
" <textField>"
" <reportElement x="220" y="80" width="164" height="20" uuid="97f17486-7d92-443b-b1ca-e3f64dcbdf32"/>"
" <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>"
" </textField>"
" <textField>"
" <reportElement x="220" y="100" width="164" height="20" uuid="cf3151fb-4926-449b-99f0-444ca0fc4c09"/>"
" <textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>"
" </textField>"
" <staticText>"
" <reportElement x="104" y="120" width="116" height="20" uuid="d3e9f3f5-be7b-4d9b-bea0-df94e49dd339"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Свойства:]]></text>"
" </staticText>"
" <staticText>"
" <reportElement x="124" y="140" width="120" height="20" uuid="ef4121e6-a944-416b-bf0f-8c4af995f186"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Лапы:]]></text>"
" </staticText>"
" <textField>"
" <reportElement x="244" y="140" width="140" height="20" uuid="f36c8cee-dde9-49e2-9c86-fa44809a28fd"/>"
" <textFieldExpression><![CDATA[$F{paws}]]></textFieldExpression>"
" </textField>"
" <staticText>"
" <reportElement x="124" y="160" width="120" height="20" uuid="c5115378-8ff4-4813-9e58-52b9a561ad05"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Хвост:]]></text>"
" </staticText>"
" <textField>"
" <reportElement x="244" y="160" width="140" height="20" uuid="679c9859-9dbb-45ba-943a-68ce064f4338"/>"
" <textFieldExpression><![CDATA[$F{tail}]]></textFieldExpression>"
" </textField>"
" <image>"
" <reportElement x="386" y="60" width="124" height="120" uuid="8820e0be-749e-4bf7-b1f4-9252c84875c4"/>"
" <imageExpression><![CDATA[new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($F{photo}))]]></imageExpression>"
" </image>"
" <staticText>"
" <reportElement x="124" y="180" width="120" height="20" uuid="08be4f2f-5101-4c9c-a605-0f6bd63183ab"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Глаза:]]></text>"
" </staticText>"
" <textField>"
" <reportElement x="244" y="180" width="140" height="20" uuid="393ebbbb-3dff-462f-b689-8a1ee31030a5"/>"
" <textFieldExpression><![CDATA[$F{eyes}]]></textFieldExpression>"
" </textField>"
" <staticText>"
" <reportElement x="124" y="200" width="120" height="20" uuid="7a58acc4-d08f-4a1d-b1bb-5935dffb5fb8"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Порода:]]></text>"
" </staticText>"
" <textField>"
" <reportElement x="244" y="200" width="140" height="20" uuid="bc8afc8f-36ff-481f-bfe3-771e7162b019"/>"
" <textFieldExpression><![CDATA[$F{breed}]]></textFieldExpression>"
" </textField>"
" <staticText>"
" <reportElement x="124" y="220" width="120" height="20" uuid="d9d7d32c-6040-4fab-ad87-e016dcf882e0"/>"
" <textElement>"
" <font isBold="true"/>"
" </textElement>"
" <text><![CDATA[Породистый:]]></text>"
" </staticText>"
" <textField>"
" <reportElement x="244" y="220" width="140" height="20" uuid="c726f776-3357-4a2b-832d-046562b63884"/>"
" <textFieldExpression><![CDATA[$F{thoroughbred}]]></textFieldExpression>"
" </textField>"
" </band>"
" </detail>"
"</jasperReport>"
\ No newline at end of file
spring:
# security:
# oauth2:
# resourceserver:
# jwt:
# issuer-uri: http://localhost:8080/realms/external
# jwk-set-uri: ${spring.security.oauth2.resourceserver.jwt.issuer-uri}/protocol/openid-connect/certs
# client:
# registration:
# keycloak:
# client-id: external-client
# client-secret: JaoJ4OvrzUqinB58gKiDGEjpTBSCCxJJ
# redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
# authorization-grant-type: authorization_code
# provider:
# keycloak:
# issuer-uri: ${spring.security.oauth2.resourceserver.jwt.issuer-uri}
# resource:
# token-info-uri: ${spring.security.oauth2.resourceserver.jwt.issuer-uri}/protocol/openid-connect/token
jpa:
hibernate:
jdbc.time_zone: Asia/Almaty
ddl-auto: create
database-platform: org.hibernate.dialect.PostgreSQLDialect
datasource:
url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:template_db}?currentSchema=template_schema
username: ${DATASOURCE_USER:postgres}
password: ${DATASOURCE_PASSWORD:password}
hikari:
maximum-pool-size: ${MAXIMUM_POOL_SIZE:100}
minimum-idle: 2
leak-detection-threshold: 30000 # 30000 - 30 seconds
auto-commit: false
# flyway:
# enabled: ${FLYWAY_ENABLED:true}
# baseline-on-migrate: ${FLYWAY_BASELINE:true}
# out-of-order: ${FLYWAY_OUT_OF_ORDER:true}
server:
port: 8081
#jwt:
# auth:
# converter:
# resource-id: external-client
# principle-attribute: preferred_username
springdoc:
api-docs:
path: ${API_DOCS_PATH:/api-docs}
\ No newline at end of file
create database template_db;
CREATE SCHEMA template_schema;
\ No newline at end of file
This diff is collapsed.
{
"issuer": "http://localhost:8080/realms/external",
"authorization_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/auth",
"token_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/token",
"introspection_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/token/introspect",
"userinfo_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/userinfo",
"end_session_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/logout",
"frontchannel_logout_session_supported": true,
"frontchannel_logout_supported": true,
"jwks_uri": "http://localhost:8080/realms/external/protocol/openid-connect/certs",
"check_session_iframe": "http://localhost:8080/realms/external/protocol/openid-connect/login-status-iframe.html",
"grant_types_supported": [
"authorization_code",
"implicit",
"refresh_token",
"password",
"client_credentials",
"urn:ietf:params:oauth:grant-type:device_code",
"urn:openid:params:grant-type:ciba"
],
"response_types_supported": [
"code",
"none",
"id_token",
"token",
"id_token token",
"code id_token",
"code token",
"code id_token token"
],
"subject_types_supported": [
"public",
"pairwise"
],
"id_token_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512"
],
"id_token_encryption_alg_values_supported": [
"RSA-OAEP",
"RSA-OAEP-256",
"RSA1_5"
],
"id_token_encryption_enc_values_supported": [
"A256GCM",
"A192GCM",
"A128GCM",
"A128CBC-HS256",
"A192CBC-HS384",
"A256CBC-HS512"
],
"userinfo_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512",
"none"
],
"request_object_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512",
"none"
],
"request_object_encryption_alg_values_supported": [
"RSA-OAEP",
"RSA-OAEP-256",
"RSA1_5"
],
"request_object_encryption_enc_values_supported": [
"A256GCM",
"A192GCM",
"A128GCM",
"A128CBC-HS256",
"A192CBC-HS384",
"A256CBC-HS512"
],
"response_modes_supported": [
"query",
"fragment",
"form_post",
"query.jwt",
"fragment.jwt",
"form_post.jwt",
"jwt"
],
"registration_endpoint": "http://localhost:8080/realms/external/clients-registrations/openid-connect",
"token_endpoint_auth_methods_supported": [
"private_key_jwt",
"client_secret_basic",
"client_secret_post",
"tls_client_auth",
"client_secret_jwt"
],
"token_endpoint_auth_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512"
],
"introspection_endpoint_auth_methods_supported": [
"private_key_jwt",
"client_secret_basic",
"client_secret_post",
"tls_client_auth",
"client_secret_jwt"
],
"introspection_endpoint_auth_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512"
],
"authorization_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512"
],
"authorization_encryption_alg_values_supported": [
"RSA-OAEP",
"RSA-OAEP-256",
"RSA1_5"
],
"authorization_encryption_enc_values_supported": [
"A256GCM",
"A192GCM",
"A128GCM",
"A128CBC-HS256",
"A192CBC-HS384",
"A256CBC-HS512"
],
"claims_supported": [
"aud",
"sub",
"iss",
"auth_time",
"name",
"given_name",
"family_name",
"preferred_username",
"email",
"acr"
],
"claim_types_supported": [
"normal"
],
"claims_parameter_supported": true,
"scopes_supported": [
"openid",
"email",
"roles",
"profile",
"microprofile-jwt",
"phone",
"web-origins",
"offline_access",
"address"
],
"request_parameter_supported": true,
"request_uri_parameter_supported": true,
"require_request_uri_registration": true,
"code_challenge_methods_supported": [
"plain",
"S256"
],
"tls_client_certificate_bound_access_tokens": true,
"revocation_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/revoke",
"revocation_endpoint_auth_methods_supported": [
"private_key_jwt",
"client_secret_basic",
"client_secret_post",
"tls_client_auth",
"client_secret_jwt"
],
"revocation_endpoint_auth_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"HS256",
"HS512",
"ES256",
"RS256",
"HS384",
"ES512",
"PS256",
"PS512",
"RS512"
],
"backchannel_logout_supported": true,
"backchannel_logout_session_supported": true,
"device_authorization_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/auth/device",
"backchannel_token_delivery_modes_supported": [
"poll",
"ping"
],
"backchannel_authentication_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/ext/ciba/auth",
"backchannel_authentication_request_signing_alg_values_supported": [
"PS384",
"ES384",
"RS384",
"ES256",
"RS256",
"ES512",
"PS256",
"PS512",
"RS512"
],
"require_pushed_authorization_requests": false,
"pushed_authorization_request_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/ext/par/request",
"mtls_endpoint_aliases": {
"token_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/token",
"revocation_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/revoke",
"introspection_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/token/introspect",
"device_authorization_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/auth/device",
"registration_endpoint": "http://localhost:8080/realms/external/clients-registrations/openid-connect",
"userinfo_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/userinfo",
"pushed_authorization_request_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/ext/par/request",
"backchannel_authentication_endpoint": "http://localhost:8080/realms/external/protocol/openid-connect/ext/ciba/auth"
}
}
\ No newline at end of file
package kz.project.printedFormsService;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws IOException {
byte[] bytes = Files.readAllBytes(Path.of("/home/bazarbay/IdeaProjects/printedFormsService/src/main/resources/Request.xml"));
System.out.println(new String(bytes));
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment