Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions .github/workflows/swagger-json.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Sync Swagger to AMRIT-Docs

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
swagger-sync:
runs-on: ubuntu-latest

Comment thread
coderabbitai[bot] marked this conversation as resolved.
services:
redis:
image: redis:7
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 5s
--health-timeout 5s
--health-retries 10

steps:
- name: Checkout API repo
uses: actions/checkout@v4

- name: Set up Java 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: maven

- name: Build API (skip tests)
run: mvn clean package -DskipTests

- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq

- name: Run API in swagger profile
run: |
mvn spring-boot:run \
-Dspring-boot.run.profiles=swagger \
-Dspring-boot.run.arguments=--server.port=9090,--spring.redis.host=localhost \
> app.log 2>&1 &
echo $! > api_pid.txt

- name: Wait for API & fetch Swagger
run: |
for i in {1..30}; do
CODE=$(curl --connect-timeout 2 --max-time 5 -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true)
if [ "$CODE" = "200" ]; then
if jq . swagger_raw.json > helpline104-api.json; then
echo "Swagger generated successfully"
exit 0
else
echo "Failed to parse swagger_raw.json with jq"
exit 1
fi
fi
echo "Waiting for API... ($i)"
sleep 5
done

echo "Swagger not generated"
cat app.log || true
exit 1

- name: Stop API
if: always()
run: |
if [ -f api_pid.txt ]; then
kill $(cat api_pid.txt) || true
fi

- name: Checkout AMRIT-Docs
uses: actions/checkout@v4
with:
repository: PSMRI/AMRIT-Docs
token: ${{ secrets.DOCS_REPO_TOKEN }}
path: amrit-docs

- name: Copy Swagger JSON
run: |
mkdir -p amrit-docs/docs/swagger
cp helpline104-api.json amrit-docs/docs/swagger/helpline104-api.json

- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.DOCS_REPO_TOKEN }}
path: amrit-docs
branch: auto/swagger-update-${{ github.run_id }}
base: main
commit-message: Auto-update Helpline104-API swagger
title: Auto-update Helpline104-API swagger
body: |
This PR automatically updates the Helpline104-API Swagger JSON
from the latest main branch build.
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,11 @@
<version>0.12.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>


</dependencies>
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/iemr/helpline104/config/RedisConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,14 @@ public RedisTemplate<String, M_User> redisTemplate(RedisConnectionFactory factor
return template;
}

// Add a generic RedisTemplate<String, Object> bean for TokenDenylist and other usages
@Bean(name = "genericRedisTemplate")
Comment thread
DurgaPrasad-54 marked this conversation as resolved.
Outdated
public RedisTemplate<String, Object> genericRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer());
return template;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
Expand All @@ -26,6 +27,7 @@ public class JwtAuthenticationUtil {
@Autowired
private JwtUtil jwtUtil;
@Autowired
@Qualifier("genericRedisTemplate")
private RedisTemplate<String, Object> redisTemplate;
Comment thread
coderabbitai[bot] marked this conversation as resolved.
@Autowired
private IEMRUserRepositoryCustom iEMRUserRepositoryCustom;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/iemr/helpline104/utils/TokenDenylist.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;
Expand All @@ -15,6 +16,7 @@ public class TokenDenylist {
private static final String PREFIX = "denied_";

@Autowired
@Qualifier("genericRedisTemplate")
private RedisTemplate<String, Object> redisTemplate;

private String getKey(String jti) {
Expand Down
20 changes: 20 additions & 0 deletions src/main/resources/application-swagger.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
spring.datasource.url=jdbc:h2:mem:swaggerdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=SA
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none

# Disable Redis if not needed for docs (optional)
spring.redis.host=localhost
spring.redis.port=6379

# CORS for Swagger UI
cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080}

jwt.secret=JWT_SECRET
# Logging
logging.level.root=INFO

# Use environment variable for JWT secret
jwt.secret=${JWT_SECRET_KEY:default-swagger-secret-change-me}
2 changes: 2 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ spring.session.store-type=redis
#spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379
spring.datasource.username=${DB_USERNAME:}
Comment thread
DurgaPrasad-54 marked this conversation as resolved.
Outdated
spring.datasource.password=${DB_PASSWORD:}
## Below values are needed for extending the expiry time and extend expiry time.
iemr.extend.expiry.time=true
iemr.session.expiry.time=7200
Expand Down
Loading