Skip to content

Commit 1fd7bc4

Browse files
committed
release 3.0.10
1 parent 6e0ec32 commit 1fd7bc4

12 files changed

Lines changed: 170 additions & 99 deletions

File tree

RELEASE_NOTES.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,3 +1504,39 @@
15041504
| ➕ dodane | 3 |
15051505
| 🔧 zmienione | 34 |
15061506
| ➖ usunięte | 0 |
1507+
1508+
---
1509+
# Changelog zmian - `## 3.0.10 (2025-12-22)` - `API: 2.0.0 RC6.1`
1510+
1511+
## 1. ksef-client
1512+
1513+
### 1.1 api
1514+
- **DefaultKsefClient.java**: 🔧 dodanie pola i obsługi `String suffixURl`
1515+
- **KsefApiProperties.java**: 🔧 dodanie metody `String getSuffixUri()`
1516+
- **Url.java**: 🔧 usunięcie prefixów `/api/v2/` w urlach i przeniesienie do `KsefApiProperties`
1517+
1518+
### 1.2 client.model
1519+
- **permission/search/QueryPersonalGrantTargetIdentifier.java**: 🔧 dodanie brakującej wartości enuma `IdentifierType` `INTERNAL_ID("InternalId")`
1520+
1521+
### 1.3 api.services
1522+
- **DefaultCryptographyService.java**: 🔧 dodanie pola `String secureRandomAlgorithm` wraz z konstruktorem który pozwala w metodach `generateRandom256BitsKey` i `generateRandom16BytesIv` używać wskazanego algorytmu
1523+
1524+
## 2. demo-web-app
1525+
1526+
### 2.1 integrationTest
1527+
- **BatchIntegrationTest.java**: 🔧 zmiany w użyciu SecureRandom
1528+
- **QrCodeOnlineIntegrationTest.java**: 🔧 poprawka związana z błędnym invoicingDate
1529+
1530+
### 2.2 api
1531+
- **ExampleApiProperties.java**: 🔧 dodanie konfiguracji pola `String suffixUri` wraz z getterami i setterami
1532+
1533+
### 2.3 resources
1534+
- **application.yaml**: 🔧 dodanie konfiguracji `suffix-uri`
1535+
1536+
## 3. Podsumowanie
1537+
1538+
| Typ zmiany | Liczba plików |
1539+
|-------------|---------------|
1540+
| ➕ dodane | 0 |
1541+
| 🔧 zmienione | 9 |
1542+
| ➖ usunięte | 0 |

demo-web-app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
}
99

1010
group = "pl.akmf.ksef"
11-
version = "3.0.9"
11+
version = "3.0.10"
1212

1313
java {
1414
toolchain {

demo-web-app/src/integrationTest/java/pl/akmf/ksef/sdk/BatchIntegrationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ void shouldThrowWhileSendWithInvalidEncryptedKey() throws JAXBException, IOExcep
347347
// Klucz musi być zaszyfrowany RSA-OAEP kluczem publicznym MF, więc losowe dane nie będą poprawne
348348
int encryptionKeySize = 256; // bytes dla RSA
349349
byte[] corruptedEncryptedKey = new byte[encryptionKeySize];
350-
SecureRandom.getInstanceStrong().nextBytes(corruptedEncryptedKey);
350+
new SecureRandom().nextBytes(corruptedEncryptedKey);
351351
String corruptedEncryptedSymmetricKey = Base64.getEncoder().encodeToString(corruptedEncryptedKey);
352352
corruptedEncryptionInfo.setEncryptedSymmetricKey(corruptedEncryptedSymmetricKey);
353353
corruptedEncryptionInfo.setInitializationVector(encryptionData.encryptionInfo().getInitializationVector());
@@ -457,7 +457,7 @@ void shouldThrowWhileSendWithInvalidInitializationVector() throws JAXBException,
457457
// W AES-CBC poprawny IV jest kluczowy dla odszyfrowania pierwszego bloku
458458
int InitializationVectorSize = 16; // bytes
459459
byte[] corruptedInitializationVector = new byte[InitializationVectorSize];
460-
SecureRandom.getInstanceStrong().nextBytes(corruptedInitializationVector);
460+
new SecureRandom().nextBytes(corruptedInitializationVector);
461461
corruptedEncryptionInfo.setEncryptedSymmetricKey(encryptionData.encryptionInfo().getEncryptedSymmetricKey());
462462
corruptedEncryptionInfo.setInitializationVector(Base64.getEncoder().encodeToString(corruptedInitializationVector));
463463
EncryptionData corruptedEncryptionData = new EncryptionData(encryptionData.cipherKey(), encryptionData.cipherIv(),

demo-web-app/src/integrationTest/java/pl/akmf/ksef/sdk/QrCodeOnlineIntegrationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@ public void qrCodeOnlineE2ETest() throws JAXBException, IOException, ApiExceptio
6969
//Otwarcie sesji online z szyfrowaniem RSA.
7070
String sessionReferenceNumber = openOnlineSession(encryptionData, SystemCode.FA_2, SchemaVersion.VERSION_1_0E, SessionValue.FA, accessToken);
7171

72+
LocalDate invoicingDate = LocalDate.of(2025, 6, 15);
7273
//Utworzenie i wysłanie faktury FA(2)
73-
String invoiceReferenceNumber = sendInvoiceOnlineSession(contextNip, sessionReferenceNumber, encryptionData, "/xml/invoices/sample/invoice-template.xml", accessToken);
74+
String invoiceReferenceNumber = sendInvoiceOnlineSession(contextNip, sessionReferenceNumber, invoicingDate, encryptionData, "/xml/invoices/sample/invoice-template.xml", accessToken);
7475

7576
//Weryfikacja, czy faktura została dodana do sesji.
7677
await().atMost(30, SECONDS)
@@ -109,10 +110,9 @@ public void qrCodeOnlineE2ETest() throws JAXBException, IOException, ApiExceptio
109110
.orElseThrow();
110111
String invoiceKsefNumber = invoiceMetadata.getKsefNumber();
111112
String invoiceHash = invoiceMetadata.getInvoiceHash();
112-
OffsetDateTime invoicingDate = invoiceMetadata.getInvoicingDate();
113113

114114
//Stworzenie linku weryfikacyjnego do faktury za pomoca certyfikatu oraz hashu faktury
115-
String invoiceForOnlineUrl = verificationLinkService.buildInvoiceVerificationUrl(contextNip, invoicingDate.toLocalDate(), invoiceHash);
115+
String invoiceForOnlineUrl = verificationLinkService.buildInvoiceVerificationUrl(contextNip, invoicingDate, invoiceHash);
116116

117117
Assertions.assertNotNull(invoiceForOnlineUrl);
118118
Assertions.assertTrue(invoiceForOnlineUrl.contains(Base64.getUrlEncoder().withoutPadding().encodeToString(Base64.getDecoder().decode(invoiceHash))));
@@ -142,11 +142,11 @@ private String openOnlineSession(EncryptionData encryptionData, SystemCode syste
142142
return openOnlineSessionResponse.getReferenceNumber();
143143
}
144144

145-
private String sendInvoiceOnlineSession(String nip, String sessionReferenceNumber, EncryptionData encryptionData,
145+
private String sendInvoiceOnlineSession(String nip, String sessionReferenceNumber, LocalDate invoicingDate, EncryptionData encryptionData,
146146
String path, String accessToken) throws IOException, ApiException {
147147
String invoiceTemplate = new String(readBytesFromPath(path), StandardCharsets.UTF_8)
148148
.replace("#nip#", nip)
149-
.replace("#invoicing_date#", LocalDate.of(2025, 6, 15).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")))
149+
.replace("#invoicing_date#", invoicingDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")))
150150
.replace("#invoice_number#", UUID.randomUUID().toString());
151151

152152
byte[] invoice = invoiceTemplate.getBytes(StandardCharsets.UTF_8);

demo-web-app/src/main/java/pl/akmf/ksef/sdk/util/ExampleApiProperties.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
public class ExampleApiProperties extends KsefApiProperties {
1414

1515
private String baseUri;
16+
private String suffixUri;
1617
private String qrUri;
1718
private int requestTimeout;
1819
private Map<String, String> defaultHeaders;
@@ -22,6 +23,11 @@ public String getBaseUri() {
2223
return baseUri;
2324
}
2425

26+
@Override
27+
public String getSuffixUri() {
28+
return suffixUri;
29+
}
30+
2531
@Override
2632
public String getQrUri() {
2733
return qrUri;
@@ -44,6 +50,10 @@ public void setBaseUri(String baseUri) {
4450
this.baseUri = baseUri;
4551
}
4652

53+
public void setSuffixUri(String suffixUri) {
54+
this.suffixUri = suffixUri;
55+
}
56+
4757
public void setQrUri(String qrUri) {
4858
this.qrUri = qrUri;
4959
}

demo-web-app/src/main/resources/application.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ server:
44
sdk:
55
config:
66
base-uri: "https://api-test.ksef.mf.gov.pl"
7+
suffix-uri: "v2"
78
qr-uri: "https://qr-test.ksef.mf.gov.pl"
89
request-timeout: 100
910

ksef-client/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66

7-
val appVersion = "3.0.9"
7+
val appVersion = "3.0.10"
88
val artifactName = "ksef-client"
99

1010
val githubRepositoryToken = "token"

ksef-client/src/main/java/pl/akmf/ksef/sdk/api/DefaultKsefClient.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ public class DefaultKsefClient implements KSeFClient {
230230
private final ObjectMapper objectMapper;
231231
private final HttpClient apiClient;
232232
private final String baseURl;
233+
private final String suffixURl;
233234
private final Duration timeout;
234235
private final Map<String, String> defaultHeaders;
235236

@@ -240,6 +241,7 @@ public DefaultKsefClient(HttpClient apiClient,
240241
this.defaultHeaders = ksefApiProperties.getDefaultHeaders();
241242
this.timeout = ksefApiProperties.getRequestTimeout();
242243
this.baseURl = ksefApiProperties.getBaseUri();
244+
this.suffixURl = ksefApiProperties.getSuffixUri();
243245
this.objectMapper = objectMapper;
244246
}
245247

@@ -2052,7 +2054,7 @@ private HttpResponse<byte[]> delete(String uri, Map<String, String> headers) thr
20522054

20532055
private HttpRequest buildRequest(String uri, String method, byte[] body, Map<String, String> additionalHeaders) {
20542056
HttpRequest.Builder builder = HttpRequest.newBuilder()
2055-
.uri(URI.create(baseURl + uri))
2057+
.uri(buildUri(baseURl, suffixURl, uri))
20562058
.timeout(timeout);
20572059

20582060
defaultHeaders.forEach(builder::header);
@@ -2080,7 +2082,7 @@ private HttpRequest buildRequest(String uri, String method, byte[] body, Map<Str
20802082

20812083
private HttpRequest buildRequest(String uri, String method, Object body, Map<String, String> additionalHeaders) throws JsonProcessingException {
20822084
HttpRequest.Builder builder = HttpRequest.newBuilder()
2083-
.uri(URI.create(baseURl + uri))
2085+
.uri(buildUri(baseURl, suffixURl, uri))
20842086
.timeout(timeout);
20852087

20862088
defaultHeaders.forEach(builder::header);
@@ -2277,4 +2279,9 @@ private void validResponse(HttpResponse<byte[]> response,
22772279
throw new ApiException(e);
22782280
}
22792281
}
2282+
2283+
private URI buildUri(String baseUrl, String suffix, String url) {
2284+
URI urlWithSuffix = URI.create(baseUrl + "/").resolve(suffix);
2285+
return URI.create(urlWithSuffix + "/").resolve(url);
2286+
}
22802287
}

ksef-client/src/main/java/pl/akmf/ksef/sdk/api/KsefApiProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
public abstract class KsefApiProperties {
77

88
public abstract String getBaseUri();
9+
public abstract String getSuffixUri();
910
public abstract String getQrUri();
1011

1112
public abstract Duration getRequestTimeout();

0 commit comments

Comments
 (0)