forked from PSMRI/ECD-API
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRedisStorage.java
More file actions
120 lines (99 loc) · 3.98 KB
/
Copy pathRedisStorage.java
File metadata and controls
120 lines (99 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* 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.ecd.utils.redis;
import java.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.types.Expiration;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@Component
public class RedisStorage {
@Autowired
private LettuceConnectionFactory connection;
Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
private @Value("${iemr.session.expiry.time.sec}") int sessionExpiryTimeInSec;
public String getSessionObject(String key) throws Exception {
RedisConnection redisCon = connection.getConnection();
byte[] sessionData = redisCon.stringCommands().get(key.getBytes());
String userRespFromRedis = null;
if (sessionData != null) {
userRespFromRedis = new String(sessionData);
}
if ((userRespFromRedis != null) && (userRespFromRedis.trim().length() != 0)) {
} else {
throw new Exception(
"Unable to fetch session object from Redis server,either session key is invalid or expired.");
}
return userRespFromRedis;
}
public String updateSessionObject(String key) throws Exception {
RedisConnection redisCon = connection.getConnection();
byte[] sessionData = redisCon.stringCommands().get(key.getBytes());
if ((sessionData != null) && sessionData.length > 0) {
logger.info("updating session time in redis for " + key);
redisCon.stringCommands().set(key.getBytes(), sessionData, Expiration.seconds(sessionExpiryTimeInSec),
SetOption.UPSERT);
} else {
throw new Exception("Unable to fetch session object from Redis server");
}
return key;
}
public void updateConcurrentSessionObject(String value) {
try {
JsonObject jsnOBJ = new JsonObject();
JsonParser jsnParser = new JsonParser();
JsonElement jsnElmnt = jsnParser.parse(value);
jsnOBJ = jsnElmnt.getAsJsonObject();
logger.info("updating con-current key:" + jsnOBJ.get("userName"));
if (jsnOBJ.has("userName") && jsnOBJ.get("userName") != null) {
updateSessionObject(jsnOBJ.get("userName").getAsString().trim().toLowerCase());
}
} catch (Exception e) {
}
}
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void cacheUserRole(Long userId, String role) {
try {
redisTemplate.opsForValue().set("role:" + userId, role, Duration.ofHours(1));
} catch (Exception e) {
logger.warn("Failed to cache role for user {} : {} ", userId, e.getMessage());
}
}
public String getUserRoleFromCache(Long userId) {
try {
return redisTemplate.opsForValue().get("role:" + userId);
} catch (Exception e) {
logger.warn("Failed to retrieve cached role for user {} : {} ", userId, e.getMessage());
return null;
}
}
}