From c93cb007ffca67bb253d79458b17a263406b83a5 Mon Sep 17 00:00:00 2001 From: "Tibor Bossanyi (Freelancer)" <tibor.bossanyi@delti.com> Date: Mon, 3 Oct 2022 19:19:24 +0200 Subject: [PATCH 1/2] API 1.0.56.7 Kubernetes does not need built in SSL, because ingress solves it --- src/main/kotlin/com/aitrainer/api/ApiApplication.kt | 1 - .../aitrainer/api/service/PropertyServiceForJasyptStarter.kt | 3 ++- src/main/resources/application-prod.properties | 2 ++ src/main/resources/application.ssl.properties | 2 +- src/main/resources/logback-spring.xml | 5 ++++- .../kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt | 1 - src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt | 5 ++++- 7 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/aitrainer/api/ApiApplication.kt b/src/main/kotlin/com/aitrainer/api/ApiApplication.kt index f5ed0ac..cf16629 100644 --- a/src/main/kotlin/com/aitrainer/api/ApiApplication.kt +++ b/src/main/kotlin/com/aitrainer/api/ApiApplication.kt @@ -9,7 +9,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.builder.SpringApplicationBuilder import org.springframework.context.annotation.Bean - @SpringBootApplication class ApiApplication { @Bean(name = ["jasyptStringEncryptor"]) diff --git a/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt b/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt index aa9f4e5..df6f726 100644 --- a/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt +++ b/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt @@ -21,4 +21,5 @@ class PropertyServiceForJasyptStarter { fun getKeyStorePasswordUsingEnvironment(environment: Environment): String? { return environment.getProperty("server.ssl.key-store-password") } -} \ No newline at end of file +} + diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index b2064db..388fcff 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -1,6 +1,8 @@ spring.config.activate.on-profile=prod spring.config.use-legacy-processing = true +## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) +spring.datasource.url = jdbc:mysql://mariadb-galera.db.svc.cluster.local:3307/aitrainer?serverTimezone=CET&useSSL=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&allowMultiQueries=true spring.datasource.username = aitrainer spring.datasource.password = ENC(WZplPYr8WmrLHshesY4T6oXplK3MlUVJ) diff --git a/src/main/resources/application.ssl.properties b/src/main/resources/application.ssl.properties index c80ee01..c44cb15 100644 --- a/src/main/resources/application.ssl.properties +++ b/src/main/resources/application.ssl.properties @@ -1,6 +1,6 @@ http.port=8088 server.port=8443 -server.ssl.enabled=true +server.ssl.enabled=false jasypt.encryptor.bean=jasyptStringEncryptor # The format used for the keystore. It could be set to JKS in case it is a JKS file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 3780129..4c5614d 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -29,7 +29,10 @@ <!-- <logger name="org.springframework" level="DEBUG" /> - <logger name="com.github.ulisesbocchio" level="DEBUG" /> --> + <logger name="org.apache.tomcat" level="DEBUG"/> + <logger name="org.apache.coyote" level="DEBUG"/> + <logger name="com.github.ulisesbocchio" level="DEBUG" /> + <logger name="javax.net.ssl" level="DEBUG"/> --> <logger name="com.aitrainer" level="INFO" /> <logger name="org.hibernate" level="INFO" /> diff --git a/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt b/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt index 000cf75..6a6f96c 100644 --- a/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt @@ -75,7 +75,6 @@ class AppCustomerPackageTest { assertEquals(customer.trialDate, "2021-08-07 08:00:00") assertEquals(customer.syncedDate, "2021-08-06 08:00:00") assertEquals(customer.firebaseRegToken, "123456789asdfghjkl") - assertEquals(customer.lang!!.uppercase(), "HU") assertEquals(customer.phone, "123456") assertEquals(customer.lifeLong, 1) } diff --git a/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt b/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt index 83c0b35..6601b86 100644 --- a/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt @@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity +import org.springframework.mock.web.MockHttpServletRequest +import javax.servlet.http.HttpServletRequest import kotlin.test.assertEquals @SpringBootTest @@ -17,8 +19,9 @@ class AuthenticationTest { @Test fun testAuthentication() { val response: ResponseEntity<*> + val request: HttpServletRequest = MockHttpServletRequest() val jwtRequest = JwtRequest("bosi", "andio2009") - response = authController.generateAuthenticationToken(jwtRequest) + response = authController.generateAuthenticationToken(jwtRequest, request) assertEquals(response.statusCode, HttpStatus.OK) } From 2949e0f283cddf336d345820d96fb71142d49657 Mon Sep 17 00:00:00 2001 From: "Tibor Bossanyi (Freelancer)" <tibor.bossanyi@delti.com> Date: Fri, 25 Nov 2022 18:21:28 +0100 Subject: [PATCH 2/2] API 1.0.57 deactivate customer --- build.gradle.kts | 2 +- data/db/update_1_0_57.sql | 5 +++++ .../api/controller/CustomerController.kt | 11 +++++++++++ .../resources/application-prod.properties | 2 +- src/main/resources/application.properties | 2 +- .../com/aitrainer/api/test/AppPackageTest.kt | 2 +- .../api/test/CustomerActivityTest.kt | 7 ------- .../com/aitrainer/api/test/CustomerTests.kt | 19 +++++++++++++++++++ 8 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 data/db/update_1_0_57.sql diff --git a/build.gradle.kts b/build.gradle.kts index 4bac556..4beabd7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "com.aitrainer" -version = "1.0.56" +version = "1.0.57" java.sourceCompatibility = JavaVersion.VERSION_1_8 repositories { diff --git a/data/db/update_1_0_57.sql b/data/db/update_1_0_57.sql new file mode 100644 index 0000000..01cd55c --- /dev/null +++ b/data/db/update_1_0_57.sql @@ -0,0 +1,5 @@ +START TRANSACTION; + +UPDATE configuration set config_value = "1.0.57", date_change=CURRENT_DATE WHERE config_key = "db_version"; + +COMMIT; diff --git a/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt b/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt index f63445a..e2f89f2 100644 --- a/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt +++ b/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt @@ -83,6 +83,17 @@ class CustomerController ( private val customerRepository: CustomerRepository) { return ResponseEntity.ok().body(customerRepository.save(returnCustomer)) } + @Secured + @PostMapping("customers/deactivate/{id}") + fun deactivateCustomer(@PathVariable(value = "id") customerId: Long): ResponseEntity<Customer> { + logger.info("Get customer id: $customerId") + val returnCustomer: Customer = customerRepository.findById(customerId).orElse(null) + ?: return ResponseEntity.notFound().build() + + returnCustomer.active = "N" + return ResponseEntity.ok().body(customerRepository.save(returnCustomer)) + } + @Secured @PostMapping("/customers/{id}") fun updateCustomerById(@PathVariable(value = "id") customerId: Long, diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 388fcff..de86d07 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -14,6 +14,6 @@ logging.config=classpath:logback-spring.xml logging.file=logs # if the database structue has been changed, increment this version number -application.version=1.0.56 +application.version=1.0.57 jwt.secret=aitrainer \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b634519..fe88fea 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -17,6 +17,6 @@ logging.config=classpath:logback-spring.xml logging.file=logs # if the database structure has been changed, increment this version number -application.version=1.0.56 +application.version=1.0.57 jwt.secret=aitrainer diff --git a/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt b/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt index 07ed6a5..bd8350b 100644 --- a/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt @@ -182,7 +182,7 @@ class AppPackageTest { val trainingPlanJson: String = record[1] val type = object : TypeToken<List<TrainingPlan?>?>() {}.type val plans: List<TrainingPlan> = gson.fromJson(trainingPlanJson, type) - assertEquals(plans.size,40) + assertEquals(plans.size,41) assertEquals(plans[1].name, "Beginner Men’s workout") assertEquals(plans[1].internalName, "beginner_man") assertEquals(plans[1].free, true) diff --git a/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt b/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt index dcbedf6..280cf34 100644 --- a/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt @@ -1,20 +1,13 @@ package com.aitrainer.api.test import com.aitrainer.api.controller.CustomerActivityController -import com.aitrainer.api.controller.CustomerExerciseDeviceController -import com.aitrainer.api.controller.PurchaseController -import com.aitrainer.api.model.Customer import com.aitrainer.api.model.CustomerActivity -import com.aitrainer.api.model.CustomerExerciseDevice import com.aitrainer.api.repository.CustomerActivityRepository -import com.aitrainer.api.repository.CustomerExerciseDeviceRepository import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.HttpStatus import kotlin.test.assertEquals -import kotlin.test.assertTrue @SpringBootTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) diff --git a/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt b/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt index fb33cd8..f9715c0 100644 --- a/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt +++ b/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt @@ -93,6 +93,25 @@ class CustomerTests { customerRepository.delete(updatedCustomer) } + @Test + fun testDeactivateCustomer() { + val id: Long = 90 + + val controller: CustomerController = CustomerController(customerRepository) + controller.deactivateCustomer(id) + + val customer: Customer = customerRepository.findById(id).orElse(null) + assertEquals(customer.active, "N") + + customer.active = "Y" + customerRepository.save(customer) + + val customer2: Customer = customerRepository.findById(id).orElse(null) + assertEquals(customer2.active, "Y") + + + } + @Test fun testUpdateCustomer() { val id:Long = 90