44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
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
|
|
}
|