@@ -19,9 +19,10 @@ func (m *Manager) CreateSession(username, ipAddress, userAgent string) (uuid.UUI
1919 m .mutex .Lock ()
2020 defer m .mutex .Unlock ()
2121
22- /* check if session exists */
23- if _ , exists := m .sessionsMap [username ]; exists {
24- return uuid .Nil , fmt .Errorf ("user already exists in active sessions" )
22+ /* check if session exists -> if yes, reset the timer and return the session ID */
23+ if session , exists := m .sessionsMap [username ]; exists {
24+ m .RefreshTimer (username )
25+ return session .ID , nil
2526 }
2627
2728 /* Generate session metadata */
@@ -215,11 +216,7 @@ func (m *Manager) AddTransaction(session *Session, txn *types.Transaction) error
215216}
216217
217218/* refresh the session timer */
218- func (m * Manager ) refreshTimer (username string ) error {
219- /* thread safety for the manager */
220- m .mutex .Lock ()
221- defer m .mutex .Unlock ()
222-
219+ func (m * Manager ) RefreshTimer (username string ) error {
223220 /* get session from sessionMap */
224221 session , exists := m .sessionsMap [username ]
225222 if ! exists {
@@ -245,6 +242,29 @@ func (m *Manager) refreshTimer(username string) error {
245242 )
246243
247244 /* update Redis for session */
245+ m .saveSessionRedis (session )
248246
249247 return nil
250248}
249+
250+ /* check is a session exists for a username */
251+ func (m * Manager ) SessionExistance (username string ) (uuid.UUID , bool , error ) {
252+ /* thread safety for the manager */
253+ m .mutex .Lock ()
254+ defer m .mutex .Unlock ()
255+
256+ /* get session from sessionMap */
257+ session , exists := m .sessionsMap [username ]
258+ if exists {
259+
260+ /* thread safety for the session */
261+ session .Mutex .Lock ()
262+ defer session .Mutex .Unlock ()
263+
264+ if session .Username == username {
265+ return session .ID , true , nil
266+ }
267+ }
268+
269+ return uuid .Nil , false , nil
270+ }
0 commit comments