mirror of
https://github.com/optim-enterprises-bv/databunker.git
synced 2025-10-30 01:22:28 +00:00
review record expiration code
This commit is contained in:
@@ -149,9 +149,8 @@ func (e mainEnv) expStart(w http.ResponseWriter, r *http.Request, ps httprouter.
|
|||||||
utils.ReturnError(w, r, "failed to decode request body", 405, err, event)
|
utils.ReturnError(w, r, "failed to decode request body", 405, err, event)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
expirationStr := utils.GetStringValue(postData["expiration"])
|
endtime := utils.SetExpiration(e.conf.Policy.MaxUserRetentionPeriod, postData["expiration"])
|
||||||
expiration := utils.SetExpiration(e.conf.Policy.MaxUserRetentionPeriod, expirationStr)
|
// fmt.Printf("Set exp time: %d\n", endtime)
|
||||||
endtime, _ := utils.ParseExpiration(expiration)
|
|
||||||
status := utils.GetStringValue(postData["status"])
|
status := utils.GetStringValue(postData["status"])
|
||||||
if len(status) == 0 {
|
if len(status) == 0 {
|
||||||
status = "wait"
|
status = "wait"
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ func (e mainEnv) sessionCreate(w http.ResponseWriter, r *http.Request, ps httpro
|
|||||||
utils.ReturnError(w, r, "empty body", 405, nil, event)
|
utils.ReturnError(w, r, "empty body", 405, nil, event)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
expirationStr := utils.GetStringValue(postData["expiration"])
|
expiration := utils.SetExpiration(e.conf.Policy.MaxSessionRetentionPeriod, postData["expiration"])
|
||||||
expiration := utils.SetExpiration(e.conf.Policy.MaxSessionRetentionPeriod, expirationStr)
|
// now := int32(time.Now().Unix())
|
||||||
log.Printf("Record expiration: %s", expiration)
|
// log.Printf("Record expiration: %d now %d", expiration, now)
|
||||||
userToken := utils.GetStringValue(postData["token"])
|
userToken := utils.GetStringValue(postData["token"])
|
||||||
userLogin := utils.GetStringValue(postData["login"])
|
userLogin := utils.GetStringValue(postData["login"])
|
||||||
userEmail := utils.GetStringValue(postData["email"])
|
userEmail := utils.GetStringValue(postData["email"])
|
||||||
@@ -123,7 +123,7 @@ func (e mainEnv) sessionNewOld(w http.ResponseWriter, r *http.Request, ps httpro
|
|||||||
}
|
}
|
||||||
expirationStr := utils.GetStringValue(postData["expiration"])
|
expirationStr := utils.GetStringValue(postData["expiration"])
|
||||||
expiration := utils.SetExpiration(e.conf.Policy.MaxSessionRetentionPeriod, expirationStr)
|
expiration := utils.SetExpiration(e.conf.Policy.MaxSessionRetentionPeriod, expirationStr)
|
||||||
log.Printf("Record expiration: %s", expiration)
|
log.Printf("Record expiration: %d", expiration)
|
||||||
jsonData, err := json.Marshal(postData)
|
jsonData, err := json.Marshal(postData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.ReturnError(w, r, "internal error", 405, err, event)
|
utils.ReturnError(w, r, "internal error", 405, err, event)
|
||||||
|
|||||||
@@ -16,17 +16,7 @@ type sessionEvent struct {
|
|||||||
Data string `json:"data"`
|
Data string `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dbobj dbcon) createSessionRecord(sessionUUID string, userTOKEN string, expiration string, data []byte) (string, error) {
|
func (dbobj dbcon) createSessionRecord(sessionUUID string, userTOKEN string, endtime int32, data []byte) (string, error) {
|
||||||
var endtime int32
|
|
||||||
var err error
|
|
||||||
now := int32(time.Now().Unix())
|
|
||||||
if len(expiration) > 0 {
|
|
||||||
endtime, err = utils.ParseExpiration(expiration)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
//log.Printf("expiration set to: %d, now: %d", endtime, now)
|
|
||||||
}
|
|
||||||
recordKey, err := utils.GenerateRecordKey()
|
recordKey, err := utils.GenerateRecordKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -36,6 +26,7 @@ func (dbobj dbcon) createSessionRecord(sessionUUID string, userTOKEN string, exp
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
encodedStr := base64.StdEncoding.EncodeToString(encoded)
|
encodedStr := base64.StdEncoding.EncodeToString(encoded)
|
||||||
|
now := int32(time.Now().Unix())
|
||||||
bdoc := bson.M{}
|
bdoc := bson.M{}
|
||||||
bdoc["token"] = userTOKEN
|
bdoc["token"] = userTOKEN
|
||||||
bdoc["session"] = sessionUUID
|
bdoc["session"] = sessionUUID
|
||||||
@@ -65,7 +56,7 @@ func (dbobj dbcon) getSession(sessionUUID string) (int32, []byte, string, error)
|
|||||||
}
|
}
|
||||||
// check expiration
|
// check expiration
|
||||||
now := int32(time.Now().Unix())
|
now := int32(time.Now().Unix())
|
||||||
//log.Printf("getSession checking now: %d exp %d", now, record["endtime"].(int32))
|
// fmt.Printf("getSession checking now: %d exp %d\n", now, record["endtime"].(int32))
|
||||||
if now > record["endtime"].(int32) {
|
if now > record["endtime"].(int32) {
|
||||||
return 0, nil, "", errors.New("session expired")
|
return 0, nil, "", errors.New("session expired")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"reflect"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/julienschmidt/httprouter"
|
"github.com/julienschmidt/httprouter"
|
||||||
@@ -33,26 +32,13 @@ func (e mainEnv) sharedRecordCreate(w http.ResponseWriter, r *http.Request, ps h
|
|||||||
session := utils.GetStringValue(postData["session"])
|
session := utils.GetStringValue(postData["session"])
|
||||||
partner := utils.GetStringValue(postData["partner"])
|
partner := utils.GetStringValue(postData["partner"])
|
||||||
appName := utils.GetStringValue(postData["app"])
|
appName := utils.GetStringValue(postData["app"])
|
||||||
expiration := e.conf.Policy.MaxShareableRecordRetentionPeriod
|
|
||||||
|
|
||||||
if len(appName) > 0 {
|
if len(appName) > 0 {
|
||||||
appName = strings.ToLower(appName)
|
appName = strings.ToLower(appName)
|
||||||
if utils.CheckValidApp(appName) == false {
|
if utils.CheckValidApp(appName) == false {
|
||||||
utils.ReturnError(w, r, "unknown app name", 405, nil, event)
|
utils.ReturnError(w, r, "unknown app name", 405, nil, event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if value, ok := postData["expiration"]; ok {
|
expiration := utils.SetExpiration(e.conf.Policy.MaxShareableRecordRetentionPeriod, postData["expiration"])
|
||||||
if reflect.TypeOf(value) == reflect.TypeOf("string") {
|
|
||||||
expiration = utils.SetExpiration(e.conf.Policy.MaxShareableRecordRetentionPeriod, value.(string))
|
|
||||||
} else {
|
|
||||||
utils.ReturnError(w, r, "failed to parse expiration field", 405, err, event)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(expiration) == 0 {
|
|
||||||
// using default expiration time for record
|
|
||||||
expiration = "1m"
|
|
||||||
}
|
|
||||||
recordUUID, err := e.db.saveSharedRecord(userTOKEN, fields, expiration, session, appName, partner, e.conf)
|
recordUUID, err := e.db.saveSharedRecord(userTOKEN, fields, expiration, session, appName, partner, e.conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.ReturnError(w, r, err.Error(), 405, err, event)
|
utils.ReturnError(w, r, err.Error(), 405, err, event)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"log"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -12,25 +11,16 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (dbobj dbcon) saveSharedRecord(userTOKEN string, fields string, expiration string, session string, appName string, partner string, conf Config) (string, error) {
|
func (dbobj dbcon) saveSharedRecord(userTOKEN string, fields string, endtime int32, session string, appName string, partner string, conf Config) (string, error) {
|
||||||
if utils.CheckValidUUID(userTOKEN) == false {
|
if utils.CheckValidUUID(userTOKEN) == false {
|
||||||
return "", errors.New("bad uuid")
|
return "", errors.New("bad uuid")
|
||||||
}
|
}
|
||||||
if len(expiration) == 0 {
|
|
||||||
return "", errors.New("failed to parse expiration")
|
|
||||||
}
|
|
||||||
if len(appName) > 0 {
|
if len(appName) > 0 {
|
||||||
apps, _ := dbobj.listAllApps(conf)
|
apps, _ := dbobj.listAllApps(conf)
|
||||||
if strings.Contains(string(apps), appName) == false {
|
if strings.Contains(string(apps), appName) == false {
|
||||||
return "", errors.New("app not found")
|
return "", errors.New("app not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Expiration is : %s\n", expiration)
|
|
||||||
start, err := utils.ParseExpiration(expiration)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
recordUUID, err := uuid.GenerateUUID()
|
recordUUID, err := uuid.GenerateUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -40,7 +30,7 @@ func (dbobj dbcon) saveSharedRecord(userTOKEN string, fields string, expiration
|
|||||||
bdoc["token"] = userTOKEN
|
bdoc["token"] = userTOKEN
|
||||||
bdoc["record"] = recordUUID
|
bdoc["record"] = recordUUID
|
||||||
bdoc["when"] = now
|
bdoc["when"] = now
|
||||||
bdoc["endtime"] = start
|
bdoc["endtime"] = endtime
|
||||||
if len(fields) > 0 {
|
if len(fields) > 0 {
|
||||||
bdoc["fields"] = fields
|
bdoc["fields"] = fields
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,7 +170,6 @@ func GetExpirationNum(val interface{}) int32 {
|
|||||||
case string:
|
case string:
|
||||||
expiration := val.(string)
|
expiration := val.(string)
|
||||||
match := regexExpiration.FindStringSubmatch(expiration)
|
match := regexExpiration.FindStringSubmatch(expiration)
|
||||||
log.Printf("match: %v", match)
|
|
||||||
// expiration format: 10d, 10h, 10m, 10s
|
// expiration format: 10d, 10h, 10m, 10s
|
||||||
if len(match) == 2 {
|
if len(match) == 2 {
|
||||||
num = Atoi(match[1])
|
num = Atoi(match[1])
|
||||||
@@ -314,10 +313,7 @@ func Atoi(s string) int32 {
|
|||||||
return int32(n)
|
return int32(n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetExpiration(maxExpiration string, userExpiration string) string {
|
func SetExpiration(maxExpiration interface{}, userExpiration interface{}) int32 {
|
||||||
if len(userExpiration) == 0 {
|
|
||||||
return maxExpiration
|
|
||||||
}
|
|
||||||
userExpirationNum, _ := ParseExpiration(userExpiration)
|
userExpirationNum, _ := ParseExpiration(userExpiration)
|
||||||
maxExpirationNum, _ := ParseExpiration(maxExpiration)
|
maxExpirationNum, _ := ParseExpiration(maxExpiration)
|
||||||
if maxExpirationNum == 0 {
|
if maxExpirationNum == 0 {
|
||||||
@@ -325,12 +321,12 @@ func SetExpiration(maxExpiration string, userExpiration string) string {
|
|||||||
maxExpirationNum, _ = ParseExpiration(maxExpiration)
|
maxExpirationNum, _ = ParseExpiration(maxExpiration)
|
||||||
}
|
}
|
||||||
if userExpirationNum == 0 {
|
if userExpirationNum == 0 {
|
||||||
return maxExpiration
|
return maxExpirationNum
|
||||||
}
|
}
|
||||||
if userExpirationNum > maxExpirationNum {
|
if userExpirationNum > maxExpirationNum {
|
||||||
return maxExpiration
|
return maxExpirationNum
|
||||||
}
|
}
|
||||||
return userExpiration
|
return userExpirationNum
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseExpiration0(expiration string) (int32, error) {
|
func ParseExpiration0(expiration string) (int32, error) {
|
||||||
@@ -357,7 +353,7 @@ func ParseExpiration0(expiration string) (int32, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ParseExpiration(expiration interface{}) (int32, error) {
|
func ParseExpiration(expiration interface{}) (int32, error) {
|
||||||
now := int32(time.Now().Unix()) + 10
|
now := int32(time.Now().Unix())
|
||||||
result := GetExpirationNum(expiration)
|
result := GetExpirationNum(expiration)
|
||||||
if result == 0 {
|
if result == 0 {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user