auto logout
This commit is contained in:
@@ -2,6 +2,8 @@ package auth
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"sismedika.com/sas/westone/types"
|
||||
@@ -16,7 +18,7 @@ func (s *Store) SignInWestone(email string, password string) (*types.User, error
|
||||
M_UserID,
|
||||
M_UserName,
|
||||
M_UserGroupDashboard,
|
||||
IFNULL(M_UserFullName, "") as M_StaffName,
|
||||
M_StaffName,
|
||||
10000000 as time_autologout
|
||||
FROM m_user
|
||||
JOIN m_usergroup ON M_UserM_UserGroupID = M_UserGroupID
|
||||
@@ -66,11 +68,282 @@ func (s *Store) LogSignIn(email string, ip string, status string, tipe string, p
|
||||
|
||||
_, err = tx.NamedExec(qry, logval)
|
||||
if err != nil {
|
||||
return err
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "email: " + email,
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return err
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "email: " + email,
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *Store) LogRISLogin(userID int, userAgent string, userName string, message string, status string) error {
|
||||
tx, err := s.db.BeginTxx(context.Background(), nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
logval := types.LogRISLogin{
|
||||
LogLoginM_UserID: strconv.Itoa(userID),
|
||||
LogLoginDateTime: time.Now().Format("2006-01-02 15:04:05"),
|
||||
LogLoginUserAgent: userAgent,
|
||||
LogLoginUserName: userName,
|
||||
LogLoginMessage: message,
|
||||
LogLoginStatus: status,
|
||||
}
|
||||
|
||||
qry := `INSERT INTO log_login
|
||||
(Log_LoginM_UserID, Log_LoginDateTime, Log_LoginUserAgent, Log_LoginUserName, Log_LoginMessage, Log_LoginStatus)
|
||||
VALUES (:Log_LoginM_UserID, :Log_LoginDateTime, :Log_LoginUserAgent, :Log_LoginUserName, :Log_LoginMessage, :Log_LoginStatus)`
|
||||
|
||||
_, err = tx.NamedExec(qry, logval)
|
||||
if err != nil {
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "userName: " + userName,
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "userName: " + userName,
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *Store) UpdateUserToken(userID int, token string) error {
|
||||
tx, err := s.db.BeginTxx(context.Background(), nil)
|
||||
if err != nil {
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "",
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
qrySys := `SELECT Conf_SystemIsAutoLogOut, Conf_SystemAutoLogOutDuration FROM conf_system LIMIT 1`
|
||||
var isAutoLogOut string
|
||||
var autoLogOutDuration int
|
||||
err = s.db.QueryRow(qrySys).Scan(&isAutoLogOut, &autoLogOutDuration)
|
||||
if err != nil {
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "AUTH",
|
||||
Params: "",
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
expiredDate := time.Now().Add(time.Duration(autoLogOutDuration) * time.Minute)
|
||||
|
||||
qry := `UPDATE m_user SET M_UserToken = :token, M_UserExpiredToken = :expiredDate WHERE M_UserID = :userID`
|
||||
|
||||
_, err = tx.NamedExec(qry, map[string]interface{}{
|
||||
"token": token,
|
||||
"userID": userID,
|
||||
"expiredDate": expiredDate.Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
// fmt.Println("err", err)
|
||||
if err != nil {
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "",
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return &utils.LogError{
|
||||
Code: "151",
|
||||
TraceID: utils.RandomTraceID(15),
|
||||
Type: "LOG AUTH",
|
||||
Params: "",
|
||||
Query: "-",
|
||||
Message: err.Error(),
|
||||
TimeStamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *Store) UpdateExpiredToken(token string) error {
|
||||
// fmt.Printf("Masuk expired token")
|
||||
tx, err := s.db.BeginTxx(context.Background(), nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to begin transaction: %v", err)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
qrySys := `SELECT Conf_SystemIsAutoLogOut, Conf_SystemAutoLogOutDuration FROM conf_system LIMIT 1`
|
||||
var isAutoLogOut string
|
||||
var autoLogOutDuration int
|
||||
err = s.db.QueryRow(qrySys).Scan(&isAutoLogOut, &autoLogOutDuration)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get system config: %v", err)
|
||||
}
|
||||
|
||||
if isAutoLogOut == "Y" {
|
||||
qryEt := `SELECT DATE_FORMAT(M_UserExpiredToken, '%Y-%m-%d %H:%i:%s') as M_UserExpiredToken FROM m_user WHERE M_UserToken = ?`
|
||||
|
||||
var expiredToken string
|
||||
err = s.db.Get(&expiredToken, qryEt, token)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get expired token: %v", err)
|
||||
}
|
||||
|
||||
timeNow := time.Now().Format("2006-01-02 15:04:05")
|
||||
|
||||
expiredTime, err := time.Parse("2006-01-02 15:04:05", expiredToken)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse expired token: %v", err)
|
||||
}
|
||||
|
||||
timeNowParsed, err := time.Parse("2006-01-02 15:04:05", timeNow)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse current time: %v", err)
|
||||
}
|
||||
|
||||
if timeNowParsed.After(expiredTime) {
|
||||
fmt.Printf("timenow: %v, expiredTime: %v", timeNow, expiredTime)
|
||||
// fmt.Println("token expired")
|
||||
return fmt.Errorf("token expired")
|
||||
} else {
|
||||
// fmt.Println("token belum expired")
|
||||
fmt.Printf("timenow: %v, expiredTime: %v", timeNow, expiredTime)
|
||||
|
||||
}
|
||||
|
||||
timeNowAdd := timeNowParsed.Add(time.Duration(autoLogOutDuration) * time.Minute)
|
||||
qryUpdateExpiredToken := `UPDATE m_user SET M_UserExpiredToken = ? WHERE M_UserToken = ?`
|
||||
_, err = tx.Exec(qryUpdateExpiredToken, timeNowAdd.Format("2006-01-02 15:04:05"), token)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update expired token: %v", err)
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return fmt.Errorf("failed to commit transaction: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *Store) UpdateExpiredTokenBu(userID int) error {
|
||||
fmt.Printf("Masuk expired token")
|
||||
tx, err := s.db.BeginTxx(context.Background(), nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to begin transaction: %v", err)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
qrySys := `SELECT Conf_SystemIsAutoLogOut, Conf_SystemAutoLogOutDuration FROM conf_system LIMIT 1`
|
||||
var isAutoLogOut string
|
||||
var autoLogOutDuration int
|
||||
err = s.db.QueryRow(qrySys).Scan(&isAutoLogOut, &autoLogOutDuration)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get system config: %v", err)
|
||||
}
|
||||
|
||||
if isAutoLogOut == "Y" {
|
||||
qryEt := `SELECT DATE_FORMAT(M_UserExpiredToken, '%Y-%m-%d %H:%i:%s') as M_UserExpiredToken FROM m_user WHERE M_UserID = ?`
|
||||
|
||||
var expiredToken string
|
||||
err = s.db.Get(&expiredToken, qryEt, userID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get expired token: %v", err)
|
||||
}
|
||||
|
||||
timeNow := time.Now().Format("2006-01-02 15:04:05")
|
||||
|
||||
expiredTime, err := time.Parse("2006-01-02 15:04:05", expiredToken)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse expired token: %v", err)
|
||||
}
|
||||
|
||||
timeNowParsed, err := time.Parse("2006-01-02 15:04:05", timeNow)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse current time: %v", err)
|
||||
}
|
||||
|
||||
if timeNowParsed.After(expiredTime) {
|
||||
fmt.Printf("timenow: %v, expiredTime: %v", timeNow, expiredTime)
|
||||
fmt.Println("token expired")
|
||||
return fmt.Errorf("token expired")
|
||||
} else {
|
||||
fmt.Println("token belum expired")
|
||||
fmt.Printf("timenow: %v, expiredTime: %v", timeNow, expiredTime)
|
||||
|
||||
}
|
||||
|
||||
timeNowAdd := timeNowParsed.Add(time.Duration(autoLogOutDuration) * time.Minute)
|
||||
qryUpdateExpiredToken := `UPDATE m_user SET M_UserExpiredToken = ? WHERE M_UserID = ?`
|
||||
_, err = tx.Exec(qryUpdateExpiredToken, timeNowAdd.Format("2006-01-02 15:04:05"), userID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update expired token: %v", err)
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return fmt.Errorf("failed to commit transaction: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user