Token and session implementation with Redis
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package tabletoken
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TableTokenPayload struct {
|
||||
TableID uuid.UUID `json:"table_id"`
|
||||
OrganizationID uuid.UUID `json:"organization_id"`
|
||||
OutletID uuid.UUID `json:"outlet_id"`
|
||||
}
|
||||
|
||||
func Encode(tableID, organizationID, outletID uuid.UUID) string {
|
||||
payload := TableTokenPayload{
|
||||
TableID: tableID,
|
||||
OrganizationID: organizationID,
|
||||
OutletID: outletID,
|
||||
}
|
||||
jsonBytes, _ := json.Marshal(payload)
|
||||
return base64.URLEncoding.EncodeToString(jsonBytes)
|
||||
}
|
||||
|
||||
func Decode(token string) (tableID, organizationID, outletID uuid.UUID, err error) {
|
||||
jsonBytes, err := base64.URLEncoding.DecodeString(token)
|
||||
if err != nil {
|
||||
return uuid.Nil, uuid.Nil, uuid.Nil, fmt.Errorf("invalid token encoding: %w", err)
|
||||
}
|
||||
|
||||
var payload TableTokenPayload
|
||||
if err := json.Unmarshal(jsonBytes, &payload); err != nil {
|
||||
return uuid.Nil, uuid.Nil, uuid.Nil, fmt.Errorf("invalid token format: %w", err)
|
||||
}
|
||||
|
||||
if payload.TableID == uuid.Nil || payload.OrganizationID == uuid.Nil || payload.OutletID == uuid.Nil {
|
||||
return uuid.Nil, uuid.Nil, uuid.Nil, fmt.Errorf("token missing required fields")
|
||||
}
|
||||
|
||||
return payload.TableID, payload.OrganizationID, payload.OutletID, nil
|
||||
}
|
||||
Reference in New Issue
Block a user