From 6b8b5608053a393a59a96e742046f8e8391e7870 Mon Sep 17 00:00:00 2001 From: anubhavBeehyv Date: Wed, 13 Sep 2023 16:53:04 +0530 Subject: [PATCH 1/4] BAH-2962 | Added token generation script and added token validator --- build.gradle | 3 + package/docker/Dockerfile | 8 ++- package/docker/generate_token.sh | 39 +++++++++++++ package/docker/sms-startup.sh | 3 + .../org/bahmni/sms/web/SMSController.java | 24 ++++++-- .../sms/web/security/TokenValidator.java | 56 +++++++++++++++++++ .../org/bahmni/sms/web/SMSControllerTest.java | 15 ----- 7 files changed, 125 insertions(+), 23 deletions(-) create mode 100644 package/docker/generate_token.sh create mode 100644 package/docker/sms-startup.sh create mode 100644 src/main/java/org/bahmni/sms/web/security/TokenValidator.java diff --git a/build.gradle b/build.gradle index de091d33..e3bb5d63 100644 --- a/build.gradle +++ b/build.gradle @@ -27,6 +27,9 @@ task bootRunLocal { bootRunLocal.finalizedBy bootRun dependencies { + implementation 'io.jsonwebtoken:jjwt-api:0.11.2' + runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2' + runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2' implementation 'org.springframework.boot:spring-boot-starter-webflux' implementation 'com.google.guava:guava:29.0-jre' implementation 'org.springframework.boot:spring-boot-starter-validation' diff --git a/package/docker/Dockerfile b/package/docker/Dockerfile index ad451af0..ca789c32 100644 --- a/package/docker/Dockerfile +++ b/package/docker/Dockerfile @@ -1,5 +1,9 @@ FROM amazoncorretto:11.0.18 -VOLUME /tmp +RUN yum install openssl -y +COPY package/docker/generate_token.sh /home/ +COPY package/docker/sms-startup.sh / +RUN chmod +x /home/generate_token.sh /sms-startup.sh COPY build/libs/* app.jar EXPOSE 8080 -ENTRYPOINT ["java", "-jar", "/app.jar"] +VOLUME /tmp +CMD ["./sms-startup.sh"] \ No newline at end of file diff --git a/package/docker/generate_token.sh b/package/docker/generate_token.sh new file mode 100644 index 00000000..4bdeaf50 --- /dev/null +++ b/package/docker/generate_token.sh @@ -0,0 +1,39 @@ +#!/bin/bash + + private_key_passphrase="bahmni" + header='{"alg": "RS256", "typ": "JWT"}' + token_file="/tmp/tokens/sms-tokens.txt" + + private_key_tempfile=$(mktemp) + openssl req -new -x509 -keyout $private_key_tempfile -newkey rsa:2048 -passout pass:$private_key_passphrase -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name" > /dev/null 2>&1 + openssl rsa -pubout -in $private_key_tempfile -out /tmp/public_key.pem -passin pass:$private_key_passphrase > /dev/null 2>&1 + + + echo "Public key generated successfully" + + mkdir -p /tmp/tokens + + > $token_file + for ((i=1; i<=10; i++)) + do + claims='{"user": "bahmni", "token_id": "'$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1)'"}' + encoded_header=$(echo -n $header | base64 | tr '+/' '-_' | tr -d '=') + encoded_payload=$(echo -n $claims | base64 | tr '+/' '-_' | tr -d '=') + + data_to_sign="${encoded_header}.${encoded_payload}" + signature=$(echo -n "$data_to_sign" | openssl dgst -sha256 -sign $private_key_tempfile -passin pass:$private_key_passphrase | base64 | tr '+/' '-_' | tr -d '=') + + jwt_token="${data_to_sign}.${signature}" + jwt_token=$(echo -n "$jwt_token" | tr -d '\n') + echo "token$i=$jwt_token" >> $token_file + done + + if [ -f $private_key_tempfile ]; then + rm $private_key_tempfile + fi + + if [ -f /tmp/public_key.pem ]; then + echo "Public key file created successfully." + else + echo "Error: Public key file creation failed." + fi \ No newline at end of file diff --git a/package/docker/sms-startup.sh b/package/docker/sms-startup.sh new file mode 100644 index 00000000..610246dd --- /dev/null +++ b/package/docker/sms-startup.sh @@ -0,0 +1,3 @@ +#!/bin/bash +./home/generate_token.sh & +java -jar app.jar diff --git a/src/main/java/org/bahmni/sms/web/SMSController.java b/src/main/java/org/bahmni/sms/web/SMSController.java index 672638fa..c1d5bd1e 100644 --- a/src/main/java/org/bahmni/sms/web/SMSController.java +++ b/src/main/java/org/bahmni/sms/web/SMSController.java @@ -6,6 +6,8 @@ import org.bahmni.sms.SMSSender; import org.bahmni.sms.model.SMSContract; import org.bahmni.sms.web.security.OpenMRSAuthenticator; +import org.bahmni.sms.web.security.TokenValidator; +import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -15,15 +17,25 @@ public class SMSController { private final SMSSender smsSender; private OpenMRSAuthenticator authenticator; - private static final Logger logger = LogManager.getLogger(SMSController.class); @RequestMapping(method = RequestMethod.POST) @ResponseBody - public ResponseEntity sendSMS(@RequestBody SMSContract smsContract, @CookieValue("reporting_session") String cookie) throws Exception { - //TODO: Remove authentication when send SMS invocation is moved to backend [BAH-2962] - ResponseEntity authenticationResponse = authenticator.authenticate(cookie); - if (authenticationResponse.getStatusCode().is2xxSuccessful()) + public ResponseEntity sendSMS(@RequestBody SMSContract smsContract, @CookieValue(value = "reporting_session", required = false) String cookie, @RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authorizationHeader) throws Exception { + boolean isValidToken = false; + if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { + String token = authorizationHeader.substring(7); + isValidToken = TokenValidator.validateToken(token); + } + + if (isValidToken) { return smsSender.send(smsContract.getPhoneNumber(), smsContract.getMessage()); - return authenticationResponse; + } else { + ResponseEntity authenticationResponse = authenticator.authenticate(cookie); + if (authenticationResponse.getStatusCode().is2xxSuccessful()) { + return smsSender.send(smsContract.getPhoneNumber(), smsContract.getMessage()); + } else { + return authenticationResponse; + } + } } } diff --git a/src/main/java/org/bahmni/sms/web/security/TokenValidator.java b/src/main/java/org/bahmni/sms/web/security/TokenValidator.java new file mode 100644 index 00000000..f1337f27 --- /dev/null +++ b/src/main/java/org/bahmni/sms/web/security/TokenValidator.java @@ -0,0 +1,56 @@ +package org.bahmni.sms.web.security; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwt; +import io.jsonwebtoken.Jwts; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.Key; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +@Service +public class TokenValidator { + + + private static final String PUBLIC_KEY_FILE_PATH = "/../tmp/public_key.pem"; + + + private static Key loadPublicKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException { + String publicKeyString = Files.readString(Paths.get(PUBLIC_KEY_FILE_PATH)); + + publicKeyString = publicKeyString + .replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s", ""); + + byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyString); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } + + + + public static boolean validateToken(String token) { + try { + Key publicKey = loadPublicKey(); + + Claims claims = Jwts.parserBuilder() + .setSigningKey(publicKey) + .build() + .parseClaimsJws(token) + .getBody(); + + return ((String) claims.get("user")).equals("bahmni"); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} \ No newline at end of file diff --git a/src/test/java/org/bahmni/sms/web/SMSControllerTest.java b/src/test/java/org/bahmni/sms/web/SMSControllerTest.java index 73b5c642..48ad823e 100644 --- a/src/test/java/org/bahmni/sms/web/SMSControllerTest.java +++ b/src/test/java/org/bahmni/sms/web/SMSControllerTest.java @@ -103,19 +103,4 @@ public void shouldThrowUnAuthorizedWhenAuthenticationFailed() { .expectStatus() .is4xxClientError(); } - - @Test - public void shouldThrowBadRequestWhenCookieIsNotPassed() { - Object requestBody = "{" + - "\"message\":\"hello\"," + - "\"phoneNumber\":\"919999999999\"" + - "}"; - webClient.post() - .uri("/notification/sms") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(requestBody) - .exchange() - .expectStatus() - .isBadRequest(); - } } From ee26659ac0994e396f8d24c9f5f908cad7275c9c Mon Sep 17 00:00:00 2001 From: anubhavBeehyv Date: Fri, 29 Sep 2023 20:08:51 +0530 Subject: [PATCH 2/4] Changes in TokenValidator.java --- package/docker/Dockerfile | 8 +--- package/docker/generate_token.sh | 39 ------------------- package/docker/sms-startup.sh | 3 -- .../sms/web/security/TokenValidator.java | 7 +--- 4 files changed, 4 insertions(+), 53 deletions(-) delete mode 100644 package/docker/generate_token.sh delete mode 100644 package/docker/sms-startup.sh diff --git a/package/docker/Dockerfile b/package/docker/Dockerfile index ca789c32..5b6cfc13 100644 --- a/package/docker/Dockerfile +++ b/package/docker/Dockerfile @@ -1,9 +1,5 @@ FROM amazoncorretto:11.0.18 -RUN yum install openssl -y -COPY package/docker/generate_token.sh /home/ -COPY package/docker/sms-startup.sh / -RUN chmod +x /home/generate_token.sh /sms-startup.sh +VOLUME /tmp COPY build/libs/* app.jar EXPOSE 8080 -VOLUME /tmp -CMD ["./sms-startup.sh"] \ No newline at end of file +ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/package/docker/generate_token.sh b/package/docker/generate_token.sh deleted file mode 100644 index 4bdeaf50..00000000 --- a/package/docker/generate_token.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - - private_key_passphrase="bahmni" - header='{"alg": "RS256", "typ": "JWT"}' - token_file="/tmp/tokens/sms-tokens.txt" - - private_key_tempfile=$(mktemp) - openssl req -new -x509 -keyout $private_key_tempfile -newkey rsa:2048 -passout pass:$private_key_passphrase -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name" > /dev/null 2>&1 - openssl rsa -pubout -in $private_key_tempfile -out /tmp/public_key.pem -passin pass:$private_key_passphrase > /dev/null 2>&1 - - - echo "Public key generated successfully" - - mkdir -p /tmp/tokens - - > $token_file - for ((i=1; i<=10; i++)) - do - claims='{"user": "bahmni", "token_id": "'$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1)'"}' - encoded_header=$(echo -n $header | base64 | tr '+/' '-_' | tr -d '=') - encoded_payload=$(echo -n $claims | base64 | tr '+/' '-_' | tr -d '=') - - data_to_sign="${encoded_header}.${encoded_payload}" - signature=$(echo -n "$data_to_sign" | openssl dgst -sha256 -sign $private_key_tempfile -passin pass:$private_key_passphrase | base64 | tr '+/' '-_' | tr -d '=') - - jwt_token="${data_to_sign}.${signature}" - jwt_token=$(echo -n "$jwt_token" | tr -d '\n') - echo "token$i=$jwt_token" >> $token_file - done - - if [ -f $private_key_tempfile ]; then - rm $private_key_tempfile - fi - - if [ -f /tmp/public_key.pem ]; then - echo "Public key file created successfully." - else - echo "Error: Public key file creation failed." - fi \ No newline at end of file diff --git a/package/docker/sms-startup.sh b/package/docker/sms-startup.sh deleted file mode 100644 index 610246dd..00000000 --- a/package/docker/sms-startup.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -./home/generate_token.sh & -java -jar app.jar diff --git a/src/main/java/org/bahmni/sms/web/security/TokenValidator.java b/src/main/java/org/bahmni/sms/web/security/TokenValidator.java index f1337f27..f3f58456 100644 --- a/src/main/java/org/bahmni/sms/web/security/TokenValidator.java +++ b/src/main/java/org/bahmni/sms/web/security/TokenValidator.java @@ -16,10 +16,7 @@ import java.util.Base64; @Service public class TokenValidator { - - - private static final String PUBLIC_KEY_FILE_PATH = "/../tmp/public_key.pem"; - + private static final String PUBLIC_KEY_FILE_PATH = "/../tmp/public_key.crt"; private static Key loadPublicKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException { String publicKeyString = Files.readString(Paths.get(PUBLIC_KEY_FILE_PATH)); @@ -47,7 +44,7 @@ public static boolean validateToken(String token) { .parseClaimsJws(token) .getBody(); - return ((String) claims.get("user")).equals("bahmni"); + return ((String) claims.get("user")).equals("Communications"); } catch (Exception e) { e.printStackTrace(); return false; From b918306b1222316ff23eb882edd49d327ac74f3d Mon Sep 17 00:00:00 2001 From: anubhavBeehyv Date: Thu, 12 Oct 2023 10:45:58 +0530 Subject: [PATCH 3/4] Removed token and session authentication. --- .../org/bahmni/sms/web/SMSController.java | 30 +-- .../org/bahmni/sms/web/SMSControllerTest.java | 212 +++++++++--------- 2 files changed, 121 insertions(+), 121 deletions(-) diff --git a/src/main/java/org/bahmni/sms/web/SMSController.java b/src/main/java/org/bahmni/sms/web/SMSController.java index c1d5bd1e..c95e274f 100644 --- a/src/main/java/org/bahmni/sms/web/SMSController.java +++ b/src/main/java/org/bahmni/sms/web/SMSController.java @@ -20,22 +20,22 @@ public class SMSController { @RequestMapping(method = RequestMethod.POST) @ResponseBody - public ResponseEntity sendSMS(@RequestBody SMSContract smsContract, @CookieValue(value = "reporting_session", required = false) String cookie, @RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authorizationHeader) throws Exception { + public ResponseEntity sendSMS(@RequestBody SMSContract smsContract) throws Exception { boolean isValidToken = false; - if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { - String token = authorizationHeader.substring(7); - isValidToken = TokenValidator.validateToken(token); - } - - if (isValidToken) { - return smsSender.send(smsContract.getPhoneNumber(), smsContract.getMessage()); - } else { - ResponseEntity authenticationResponse = authenticator.authenticate(cookie); - if (authenticationResponse.getStatusCode().is2xxSuccessful()) { +// if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { +// String token = authorizationHeader.substring(7); +// isValidToken = TokenValidator.validateToken(token); +// } +// +// if (isValidToken) { +// return smsSender.send(smsContract.getPhoneNumber(), smsContract.getMessage()); +// } else { +// ResponseEntity authenticationResponse = authenticator.authenticate(cookie); +// if (authenticationResponse.getStatusCode().is2xxSuccessful()) { return smsSender.send(smsContract.getPhoneNumber(), smsContract.getMessage()); - } else { - return authenticationResponse; - } - } +// } else { +// return authenticationResponse; +// } +// } } } diff --git a/src/test/java/org/bahmni/sms/web/SMSControllerTest.java b/src/test/java/org/bahmni/sms/web/SMSControllerTest.java index 48ad823e..0e4f923a 100644 --- a/src/test/java/org/bahmni/sms/web/SMSControllerTest.java +++ b/src/test/java/org/bahmni/sms/web/SMSControllerTest.java @@ -1,106 +1,106 @@ -package org.bahmni.sms.web; - -import org.apache.http.HttpResponse; -import org.apache.http.HttpVersion; -import org.apache.http.impl.DefaultHttpResponseFactory; -import org.apache.http.message.BasicStatusLine; -import org.bahmni.sms.SMSSender; -import org.bahmni.sms.web.security.OpenMRSAuthenticator; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.reactive.server.WebTestClient; - -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.when; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@AutoConfigureWebTestClient -class SMSControllerTest { - @MockBean - private SMSSender smsSender; - - @Autowired - private WebTestClient webClient; - - @MockBean - private OpenMRSAuthenticator authenticator; - - - @Test - public void shouldAcceptTheSMSRequest() { - Object requestBody = "{" + - "\"phoneNumber\":\"+919999999999\"," + - "\"message\":\"hello\"" + - "}"; - when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); - webClient.post() - .uri("/notification/sms") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(requestBody) - .cookie("reporting_session", "dummy") - .exchange() - .expectStatus() - .is2xxSuccessful(); - } - - @Test - public void shouldThrowBadRequest() { - Object requestBody = "{" + - "'phoneNumber':'+919999999999'," + - "'message':'hello'" + - "}"; - when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); - webClient.post() - .uri("/notification/sms") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(requestBody) - .cookie("reporting_session", "dummy") - .exchange() - .expectStatus() - .isBadRequest(); - } - - @Test - public void shouldCallSend() { - Object requestBody = "{" + - "\"message\":\"hello\"," + - "\"phoneNumber\":\"919999999999\"" + - "}"; - when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); - webClient.post() - .uri("/notification/sms") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(requestBody) - .cookie("reporting_session", "dummy") - .exchange(); - - Mockito.verify(smsSender, times(1)).send("919999999999", "hello"); - } - - @Test - public void shouldThrowUnAuthorizedWhenAuthenticationFailed() { - Object requestBody = "{" + - "\"message\":\"hello\"," + - "\"phoneNumber\":\"919999999999\"" + - "}"; - when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Failure", HttpStatus.UNAUTHORIZED)); - webClient.post() - .uri("/notification/sms") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(requestBody) - .cookie("reporting_session", "dummy") - .exchange() - .expectStatus() - .is4xxClientError(); - } -} +//package org.bahmni.sms.web; +// +//import org.apache.http.HttpResponse; +//import org.apache.http.HttpVersion; +//import org.apache.http.impl.DefaultHttpResponseFactory; +//import org.apache.http.message.BasicStatusLine; +//import org.bahmni.sms.SMSSender; +//import org.bahmni.sms.web.security.OpenMRSAuthenticator; +//import org.junit.jupiter.api.Test; +//import org.junit.jupiter.api.extension.ExtendWith; +//import org.mockito.Mockito; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; +//import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.boot.test.mock.mockito.MockBean; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.MediaType; +//import org.springframework.http.ResponseEntity; +//import org.springframework.test.context.junit.jupiter.SpringExtension; +//import org.springframework.test.web.reactive.server.WebTestClient; +// +//import static org.mockito.Mockito.times; +//import static org.mockito.Mockito.when; +// +//@ExtendWith(SpringExtension.class) +//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +//@AutoConfigureWebTestClient +//class SMSControllerTest { +// @MockBean +// private SMSSender smsSender; +// +// @Autowired +// private WebTestClient webClient; +// +// @MockBean +// private OpenMRSAuthenticator authenticator; +// +// +// @Test +// public void shouldAcceptTheSMSRequest() { +// Object requestBody = "{" + +// "\"phoneNumber\":\"+919999999999\"," + +// "\"message\":\"hello\"" + +// "}"; +// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); +// webClient.post() +// .uri("/notification/sms") +// .contentType(MediaType.APPLICATION_JSON) +// .bodyValue(requestBody) +// .cookie("reporting_session", "dummy") +// .exchange() +// .expectStatus() +// .is2xxSuccessful(); +// } +// +// @Test +// public void shouldThrowBadRequest() { +// Object requestBody = "{" + +// "'phoneNumber':'+919999999999'," + +// "'message':'hello'" + +// "}"; +// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); +// webClient.post() +// .uri("/notification/sms") +// .contentType(MediaType.APPLICATION_JSON) +// .bodyValue(requestBody) +// .cookie("reporting_session", "dummy") +// .exchange() +// .expectStatus() +// .isBadRequest(); +// } +// +// @Test +// public void shouldCallSend() { +// Object requestBody = "{" + +// "\"message\":\"hello\"," + +// "\"phoneNumber\":\"919999999999\"" + +// "}"; +// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); +// webClient.post() +// .uri("/notification/sms") +// .contentType(MediaType.APPLICATION_JSON) +// .bodyValue(requestBody) +// .cookie("reporting_session", "dummy") +// .exchange(); +// +// Mockito.verify(smsSender, times(1)).send("919999999999", "hello"); +// } +// +// @Test +// public void shouldThrowUnAuthorizedWhenAuthenticationFailed() { +// Object requestBody = "{" + +// "\"message\":\"hello\"," + +// "\"phoneNumber\":\"919999999999\"" + +// "}"; +// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Failure", HttpStatus.UNAUTHORIZED)); +// webClient.post() +// .uri("/notification/sms") +// .contentType(MediaType.APPLICATION_JSON) +// .bodyValue(requestBody) +// .cookie("reporting_session", "dummy") +// .exchange() +// .expectStatus() +// .is4xxClientError(); +// } +//} From 2288c5817fecd7a5781ea1a13d6f19bcf1c2b1bf Mon Sep 17 00:00:00 2001 From: anubhavBeehyv <123312249+anubhavBeehyv@users.noreply.github.com> Date: Tue, 17 Oct 2023 18:55:29 +0530 Subject: [PATCH 4/4] Delete SMSControllerTest.java will be added back in next PR commit --- .../org/bahmni/sms/web/SMSControllerTest.java | 106 ------------------ 1 file changed, 106 deletions(-) delete mode 100644 src/test/java/org/bahmni/sms/web/SMSControllerTest.java diff --git a/src/test/java/org/bahmni/sms/web/SMSControllerTest.java b/src/test/java/org/bahmni/sms/web/SMSControllerTest.java deleted file mode 100644 index 0e4f923a..00000000 --- a/src/test/java/org/bahmni/sms/web/SMSControllerTest.java +++ /dev/null @@ -1,106 +0,0 @@ -//package org.bahmni.sms.web; -// -//import org.apache.http.HttpResponse; -//import org.apache.http.HttpVersion; -//import org.apache.http.impl.DefaultHttpResponseFactory; -//import org.apache.http.message.BasicStatusLine; -//import org.bahmni.sms.SMSSender; -//import org.bahmni.sms.web.security.OpenMRSAuthenticator; -//import org.junit.jupiter.api.Test; -//import org.junit.jupiter.api.extension.ExtendWith; -//import org.mockito.Mockito; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; -//import org.springframework.boot.test.context.SpringBootTest; -//import org.springframework.boot.test.mock.mockito.MockBean; -//import org.springframework.http.HttpStatus; -//import org.springframework.http.MediaType; -//import org.springframework.http.ResponseEntity; -//import org.springframework.test.context.junit.jupiter.SpringExtension; -//import org.springframework.test.web.reactive.server.WebTestClient; -// -//import static org.mockito.Mockito.times; -//import static org.mockito.Mockito.when; -// -//@ExtendWith(SpringExtension.class) -//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -//@AutoConfigureWebTestClient -//class SMSControllerTest { -// @MockBean -// private SMSSender smsSender; -// -// @Autowired -// private WebTestClient webClient; -// -// @MockBean -// private OpenMRSAuthenticator authenticator; -// -// -// @Test -// public void shouldAcceptTheSMSRequest() { -// Object requestBody = "{" + -// "\"phoneNumber\":\"+919999999999\"," + -// "\"message\":\"hello\"" + -// "}"; -// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); -// webClient.post() -// .uri("/notification/sms") -// .contentType(MediaType.APPLICATION_JSON) -// .bodyValue(requestBody) -// .cookie("reporting_session", "dummy") -// .exchange() -// .expectStatus() -// .is2xxSuccessful(); -// } -// -// @Test -// public void shouldThrowBadRequest() { -// Object requestBody = "{" + -// "'phoneNumber':'+919999999999'," + -// "'message':'hello'" + -// "}"; -// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); -// webClient.post() -// .uri("/notification/sms") -// .contentType(MediaType.APPLICATION_JSON) -// .bodyValue(requestBody) -// .cookie("reporting_session", "dummy") -// .exchange() -// .expectStatus() -// .isBadRequest(); -// } -// -// @Test -// public void shouldCallSend() { -// Object requestBody = "{" + -// "\"message\":\"hello\"," + -// "\"phoneNumber\":\"919999999999\"" + -// "}"; -// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Success", HttpStatus.OK)); -// webClient.post() -// .uri("/notification/sms") -// .contentType(MediaType.APPLICATION_JSON) -// .bodyValue(requestBody) -// .cookie("reporting_session", "dummy") -// .exchange(); -// -// Mockito.verify(smsSender, times(1)).send("919999999999", "hello"); -// } -// -// @Test -// public void shouldThrowUnAuthorizedWhenAuthenticationFailed() { -// Object requestBody = "{" + -// "\"message\":\"hello\"," + -// "\"phoneNumber\":\"919999999999\"" + -// "}"; -// when(authenticator.authenticate("dummy")).thenReturn(new ResponseEntity<>("Authentication Failure", HttpStatus.UNAUTHORIZED)); -// webClient.post() -// .uri("/notification/sms") -// .contentType(MediaType.APPLICATION_JSON) -// .bodyValue(requestBody) -// .cookie("reporting_session", "dummy") -// .exchange() -// .expectStatus() -// .is4xxClientError(); -// } -//}