-
Notifications
You must be signed in to change notification settings - Fork 45
3.3.0 #227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
3.3.0 #227
Changes from all commits
9f0fbb0
a94ad60
64f84be
01abcbd
0f0113c
a5b595e
a363c33
72715a7
121928c
396359d
0e24515
70a4256
8df1a0f
7222cbd
ede0339
e3a177e
ea47470
dbe771c
48344e0
23cbcca
e914bd3
cafa96e
bab8d0a
8f8cc6f
afd9a1e
465795f
f6ca2b9
825c2c2
02c5a89
6e9d253
cbe0d55
37aadb5
599ed6e
4970f1e
41b327b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package com.iemr.common.config.firebase; | ||
|
||
import com.google.auth.oauth2.GoogleCredentials; | ||
import com.google.firebase.FirebaseApp; | ||
import com.google.firebase.FirebaseOptions; | ||
import com.google.firebase.messaging.FirebaseMessaging; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.core.io.ClassPathResource; | ||
|
||
import java.io.ByteArrayInputStream; | ||
import java.io.IOException; | ||
import java.util.Base64; | ||
|
||
@Configuration | ||
public class FirebaseMessagingConfig { | ||
|
||
@Value("${firebase.enabled:false}") | ||
private boolean firebaseEnabled; | ||
|
||
@Value("${firebase.credential-file:}") | ||
private String firebaseCredentialFile; | ||
|
||
@Value("${firebase.credential-base64:}") | ||
private String firebaseCredentialBase64; | ||
|
||
@Bean | ||
public FirebaseMessaging firebaseMessaging() throws IOException { | ||
if (!firebaseEnabled) { | ||
throw new IllegalStateException("Firebase is disabled"); | ||
} | ||
|
||
GoogleCredentials credentials; | ||
|
||
if (!firebaseCredentialBase64.isBlank()) { | ||
byte[] decoded = Base64.getDecoder().decode(firebaseCredentialBase64); | ||
credentials = GoogleCredentials.fromStream(new ByteArrayInputStream(decoded)); | ||
} else if (!firebaseCredentialFile.isBlank()) { | ||
credentials = GoogleCredentials.fromStream( | ||
new ClassPathResource(firebaseCredentialFile).getInputStream() | ||
); | ||
} else { | ||
throw new IllegalStateException("No Firebase credentials provided"); | ||
} | ||
|
||
FirebaseOptions options = FirebaseOptions.builder() | ||
.setCredentials(credentials) | ||
.build(); | ||
|
||
FirebaseApp firebaseApp = FirebaseApp.getApps().isEmpty() | ||
? FirebaseApp.initializeApp(options) | ||
: FirebaseApp.getInstance(); | ||
|
||
return FirebaseMessaging.getInstance(firebaseApp); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,118 @@ | ||||||||||||||||||
/* | ||||||||||||||||||
* AMRIT β Accessible Medical Records via Integrated Technology | ||||||||||||||||||
* Integrated EHR (Electronic Health Records) Solution | ||||||||||||||||||
* | ||||||||||||||||||
* Copyright (C) "Piramal Swasthya Management and Research Institute" | ||||||||||||||||||
* | ||||||||||||||||||
* This file is part of AMRIT. | ||||||||||||||||||
* | ||||||||||||||||||
* This program is free software: you can redistribute it and/or modify | ||||||||||||||||||
* it under the terms of the GNU General Public License as published by | ||||||||||||||||||
* the Free Software Foundation, either version 3 of the License, or | ||||||||||||||||||
* (at your option) any later version. | ||||||||||||||||||
* | ||||||||||||||||||
* This program is distributed in the hope that it will be useful, | ||||||||||||||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||||||||||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||||||||||||||||
* GNU General Public License for more details. | ||||||||||||||||||
* | ||||||||||||||||||
* You should have received a copy of the GNU General Public License | ||||||||||||||||||
* along with this program. If not, see https://www.gnu.org/licenses/. | ||||||||||||||||||
*/ | ||||||||||||||||||
package com.iemr.common.controller.beneficiaryConsent; | ||||||||||||||||||
|
||||||||||||||||||
import com.iemr.common.data.beneficiaryConsent.BeneficiaryConsentRequest; | ||||||||||||||||||
import com.iemr.common.service.beneficiaryOTPHandler.BeneficiaryOTPHandler; | ||||||||||||||||||
import com.iemr.common.utils.mapper.InputMapper; | ||||||||||||||||||
import com.iemr.common.utils.response.OutputResponse; | ||||||||||||||||||
import io.lettuce.core.dynamic.annotation.Param; | ||||||||||||||||||
import io.swagger.v3.oas.annotations.Operation; | ||||||||||||||||||
import jakarta.ws.rs.core.MediaType; | ||||||||||||||||||
import org.json.JSONObject; | ||||||||||||||||||
import org.slf4j.Logger; | ||||||||||||||||||
import org.slf4j.LoggerFactory; | ||||||||||||||||||
import org.springframework.beans.factory.annotation.Autowired; | ||||||||||||||||||
import org.springframework.web.bind.annotation.RequestBody; | ||||||||||||||||||
import org.springframework.web.bind.annotation.RequestMapping; | ||||||||||||||||||
import org.springframework.web.bind.annotation.RequestMethod; | ||||||||||||||||||
import org.springframework.web.bind.annotation.RestController; | ||||||||||||||||||
|
||||||||||||||||||
@RequestMapping(value = { "/beneficiaryConsent" },headers ="Authorization" ) | ||||||||||||||||||
@RestController | ||||||||||||||||||
public class BeneficiaryConsentController { | ||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add missing @RestController annotation. The class is missing the +@RestController
public class BeneficiaryConsentController { π Committable suggestion
Suggested change
π€ Prompt for AI Agents
|
||||||||||||||||||
final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); | ||||||||||||||||||
|
||||||||||||||||||
@Autowired | ||||||||||||||||||
private BeneficiaryOTPHandler beneficiaryOTPHandler; | ||||||||||||||||||
|
||||||||||||||||||
@Operation(summary = "Send Consent") | ||||||||||||||||||
@RequestMapping(value = "/sendConsent", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") | ||||||||||||||||||
public String sendConsent(@Param(value = "{\"mobNo\":\"String\"}") @RequestBody String requestOBJ) { | ||||||||||||||||||
|
||||||||||||||||||
OutputResponse response = new OutputResponse(); | ||||||||||||||||||
|
||||||||||||||||||
try { | ||||||||||||||||||
BeneficiaryConsentRequest obj = InputMapper.gson().fromJson(requestOBJ, BeneficiaryConsentRequest.class); | ||||||||||||||||||
|
||||||||||||||||||
String success = beneficiaryOTPHandler.sendOTP(obj); // method name unchanged if internal logic still uses 'OTP' | ||||||||||||||||||
logger.info(success.toString()); | ||||||||||||||||||
response.setResponse(success); | ||||||||||||||||||
|
||||||||||||||||||
|
||||||||||||||||||
} catch (Exception e) { | ||||||||||||||||||
response.setError(500, "error : " + e); | ||||||||||||||||||
} | ||||||||||||||||||
return response.toString(); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
@Operation(summary = "Validate Consent") | ||||||||||||||||||
@RequestMapping(value = "/validateConsent", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") | ||||||||||||||||||
public String validateConsent(@Param(value = "{\"mobNo\":\"String\",\"otp\":\"Integer\"}") @RequestBody String requestOBJ) { | ||||||||||||||||||
|
||||||||||||||||||
OutputResponse response = new OutputResponse(); | ||||||||||||||||||
|
||||||||||||||||||
try { | ||||||||||||||||||
BeneficiaryConsentRequest obj = InputMapper.gson().fromJson(requestOBJ, BeneficiaryConsentRequest.class); | ||||||||||||||||||
|
||||||||||||||||||
JSONObject responseOBJ = beneficiaryOTPHandler.validateOTP(obj); | ||||||||||||||||||
if (responseOBJ != null) | ||||||||||||||||||
response.setResponse(responseOBJ.toString()); | ||||||||||||||||||
else | ||||||||||||||||||
response.setError(500, "failure"); | ||||||||||||||||||
|
||||||||||||||||||
} catch (Exception e) { | ||||||||||||||||||
logger.error("error in validating Consent : " + e); | ||||||||||||||||||
response.setError(500, "error : " + e); | ||||||||||||||||||
} | ||||||||||||||||||
return response.toString(); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
@Operation(summary = "Resend Consent") | ||||||||||||||||||
@RequestMapping(value = "/resendConsent", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") | ||||||||||||||||||
public String resendConsent(@Param(value = "{\"mobNo\":\"String\"}") @RequestBody String requestOBJ) { | ||||||||||||||||||
logger.info(requestOBJ.toString()); | ||||||||||||||||||
Check noticeCode scanning / SonarCloud Logging should not be vulnerable to injection attacks Low
Change this code to not log user-controlled data. See more on SonarQube Cloud
|
||||||||||||||||||
|
||||||||||||||||||
OutputResponse response = new OutputResponse(); | ||||||||||||||||||
|
||||||||||||||||||
try { | ||||||||||||||||||
BeneficiaryConsentRequest obj = InputMapper.gson().fromJson(requestOBJ, BeneficiaryConsentRequest.class); | ||||||||||||||||||
|
||||||||||||||||||
String success = beneficiaryOTPHandler.resendOTP(obj); | ||||||||||||||||||
logger.info(success.toString()); | ||||||||||||||||||
|
||||||||||||||||||
if (success.contains("otp")) | ||||||||||||||||||
response.setResponse(success); | ||||||||||||||||||
else | ||||||||||||||||||
response.setError(500, "failure"); | ||||||||||||||||||
Comment on lines
+103
to
+106
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix success condition logic in resendConsent method. Same issue as in - if (success.contains("otp"))
+ if (success.equals("success"))
response.setResponse(success);
else
response.setError(500, "failure"); π Committable suggestion
Suggested change
π€ Prompt for AI Agents
|
||||||||||||||||||
|
||||||||||||||||||
} catch (Exception e) { | ||||||||||||||||||
logger.error("error in re-sending Consent : " + e); | ||||||||||||||||||
response.setError(500, "error : " + e); | ||||||||||||||||||
} | ||||||||||||||||||
return response.toString(); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
|
||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,61 @@ | ||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||
* AMRIT β Accessible Medical Records via Integrated Technology | ||||||||||||||||||||||||||||||||||||
* Integrated EHR (Electronic Health Records) Solution | ||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||
* Copyright (C) "Piramal Swasthya Management and Research Institute" | ||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||
* This file is part of AMRIT. | ||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||
* This program is free software: you can redistribute it and/or modify | ||||||||||||||||||||||||||||||||||||
* it under the terms of the GNU General Public License as published by | ||||||||||||||||||||||||||||||||||||
* the Free Software Foundation, either version 3 of the License, or | ||||||||||||||||||||||||||||||||||||
* (at your option) any later version. | ||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||
* This program is distributed in the hope that it will be useful, | ||||||||||||||||||||||||||||||||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||||||||||||||||||||||||||||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||||||||||||||||||||||||||||||||||
* GNU General Public License for more details. | ||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||
* You should have received a copy of the GNU General Public License | ||||||||||||||||||||||||||||||||||||
* along with this program. If not, see https://www.gnu.org/licenses/. | ||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||
* AMRIT β Accessible Medical Records via Integrated Technology | ||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||
package com.iemr.common.controller.firebaseNotification; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
import com.iemr.common.model.notification.NotificationMessage; | ||||||||||||||||||||||||||||||||||||
import com.iemr.common.model.notification.UserToken; | ||||||||||||||||||||||||||||||||||||
import com.iemr.common.service.firebaseNotification.FirebaseNotificationService; | ||||||||||||||||||||||||||||||||||||
import com.iemr.common.utils.exception.IEMRException; | ||||||||||||||||||||||||||||||||||||
import org.slf4j.Logger; | ||||||||||||||||||||||||||||||||||||
import org.slf4j.LoggerFactory; | ||||||||||||||||||||||||||||||||||||
import org.springframework.beans.factory.annotation.Autowired; | ||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.*; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
@RestController | ||||||||||||||||||||||||||||||||||||
@RequestMapping(value= "/firebaseNotification",headers = "Authorization") | ||||||||||||||||||||||||||||||||||||
public class FirebaseNotificationController { | ||||||||||||||||||||||||||||||||||||
final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
@Autowired | ||||||||||||||||||||||||||||||||||||
FirebaseNotificationService firebaseNotificationService; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
@RequestMapping(value = "sendNotification",method = RequestMethod.POST) | ||||||||||||||||||||||||||||||||||||
public String sendNotificationByToken(@RequestBody NotificationMessage notificationMessage){ | ||||||||||||||||||||||||||||||||||||
return firebaseNotificationService.sendNotification(notificationMessage); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
Comment on lines
+44
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π οΈ Refactor suggestion Add error handling and input validation. The controller lacks error handling and input validation, which could lead to runtime exceptions and poor user experience. Consider adding validation and proper error responses. @RequestMapping(value = "sendNotification",method = RequestMethod.POST)
-public String sendNotificationByToken(@RequestBody NotificationMessage notificationMessage){
+public ResponseEntity<String> sendNotificationByToken(@Valid @RequestBody NotificationMessage notificationMessage){
+ try {
+ if (notificationMessage == null) {
+ return ResponseEntity.badRequest().body("Notification message is required");
+ }
+ String result = firebaseNotificationService.sendNotification(notificationMessage);
+ return ResponseEntity.ok(result);
+ } catch (Exception e) {
+ logger.error("Error sending notification: ", e);
+ return ResponseEntity.internalServerError().body("Failed to send notification");
+ }
- return firebaseNotificationService.sendNotification(notificationMessage);
} π Committable suggestion
Suggested change
π€ Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
@RequestMapping(value = "updateToken",method = RequestMethod.POST) | ||||||||||||||||||||||||||||||||||||
public String updateToken(@RequestBody UserToken userToken){ | ||||||||||||||||||||||||||||||||||||
return firebaseNotificationService.updateToken(userToken); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
Comment on lines
+49
to
+52
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π οΈ Refactor suggestion Add error handling and input validation for updateToken endpoint. Similar to the sendNotification endpoint, this method lacks error handling and input validation. Consider returning proper HTTP status codes and handling potential exceptions. @RequestMapping(value = "updateToken",method = RequestMethod.POST)
-public String updateToken(@RequestBody UserToken userToken){
+public ResponseEntity<String> updateToken(@Valid @RequestBody UserToken userToken){
+ try {
+ if (userToken == null || userToken.getUserId() == null || userToken.getToken() == null) {
+ return ResponseEntity.badRequest().body("User ID and token are required");
+ }
+ String result = firebaseNotificationService.updateToken(userToken);
+ return ResponseEntity.ok(result);
+ } catch (Exception e) {
+ logger.error("Error updating token: ", e);
+ return ResponseEntity.internalServerError().body("Failed to update token");
+ }
- return firebaseNotificationService.updateToken(userToken);
} π Committable suggestion
Suggested change
π€ Prompt for AI Agents
π οΈ Refactor suggestion Add input validation and error handling for consistency. Similar to the @RequestMapping(value = "updateToken",method = RequestMethod.POST)
-public String updateToken(@RequestBody UserToken userToken){
+public ResponseEntity<String> updateToken(@Valid @RequestBody UserToken userToken){
+ try {
+ if (userToken == null) {
+ return ResponseEntity.badRequest().body("User token is required");
+ }
String result = firebaseNotificationService.updateToken(userToken);
- return firebaseNotificationService.updateToken(userToken);
+ return ResponseEntity.ok(result);
+ } catch (Exception e) {
+ logger.error("Error updating token: ", e);
+ return ResponseEntity.internalServerError().body("Failed to update token");
+ }
}
π€ Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
@RequestMapping(value = "getToken",method = RequestMethod.GET,headers = "Authorization") | ||||||||||||||||||||||||||||||||||||
public String getUserToken() throws IEMRException { | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
return firebaseNotificationService.getUserToken(); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
Comment on lines
+54
to
+58
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π οΈ Refactor suggestion Improve error handling for getUserToken endpoint. The getUserToken method throws IEMRException but doesn't handle it properly at the controller level. Consider wrapping in try-catch and returning appropriate HTTP responses. @RequestMapping(value = "getToken",method = RequestMethod.GET,headers = "Authorization")
-public String getUserToken() throws IEMRException {
-
- return firebaseNotificationService.getUserToken();
+public ResponseEntity<String> getUserToken() {
+ try {
+ String token = firebaseNotificationService.getUserToken();
+ if (token == null) {
+ return ResponseEntity.notFound().build();
+ }
+ return ResponseEntity.ok(token);
+ } catch (IEMRException e) {
+ logger.error("Error retrieving user token: ", e);
+ return ResponseEntity.internalServerError().body("Failed to retrieve token");
+ }
} π€ Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -53,14 +53,16 @@ | |
@Operation(summary = "Send OTP") | ||
@RequestMapping(value = "/sendOTP", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") | ||
public String sendOTP(@Param(value = "{\"mobNo\":\"String\"}") @RequestBody String requestOBJ) { | ||
logger.info(requestOBJ.toString()); | ||
Check noticeCode scanning / SonarCloud Logging should not be vulnerable to injection attacks Low
Change this code to not log user-controlled data. See more on SonarQube Cloud
|
||
|
||
OutputResponse response = new OutputResponse(); | ||
|
||
try { | ||
OTPRequestParsor obj = InputMapper.gson().fromJson(requestOBJ, OTPRequestParsor.class); | ||
|
||
String success = otpHandler.sendOTP(obj); | ||
if (success.equalsIgnoreCase("success")) | ||
logger.info(success.toString()); | ||
if (success.contains("otp")) | ||
response.setResponse(success); | ||
else | ||
response.setError(5000, "failure"); | ||
|
@@ -98,14 +100,17 @@ | |
@Operation(summary = "Resend OTP") | ||
@RequestMapping(value = "/resendOTP", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") | ||
public String resendOTP(@Param(value = "{\"mobNo\":\"String\"}") @RequestBody String requestOBJ) { | ||
logger.info(requestOBJ.toString()); | ||
Check noticeCode scanning / SonarCloud Logging should not be vulnerable to injection attacks Low
Change this code to not log user-controlled data. See more on SonarQube Cloud
|
||
|
||
OutputResponse response = new OutputResponse(); | ||
|
||
try { | ||
OTPRequestParsor obj = InputMapper.gson().fromJson(requestOBJ, OTPRequestParsor.class); | ||
|
||
String success = otpHandler.resendOTP(obj); | ||
if (success.equalsIgnoreCase("success")) | ||
logger.info(success.toString()); | ||
|
||
if (success.contains("otp")) | ||
response.setResponse(success); | ||
else | ||
response.setError(5000, "failure"); | ||
|
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,12 @@ | ||||||||
package com.iemr.common.data.beneficiaryConsent; | ||||||||
|
||||||||
import lombok.Data; | ||||||||
|
||||||||
@Data | ||||||||
public class BeneficiaryConsentRequest { | ||||||||
private String mobNo; | ||||||||
private int otp; | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Change OTP field type to String to preserve leading zeros. Using - private int otp;
+ private String otp; π Committable suggestion
Suggested change
π€ Prompt for AI Agents
|
||||||||
private String userName; | ||||||||
private String designation; | ||||||||
|
||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add similar variables to the _docker file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/PSMRI/AMRIT-Deployment-Files
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have added firebase configuration in _ docker file