52 lines
928 B
Go
52 lines
928 B
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
type WbAuthData struct {
|
|
Token string `json:"token"`
|
|
}
|
|
|
|
func NewWbAuthData(token string) WbAuthData {
|
|
return WbAuthData{
|
|
Token: token,
|
|
}
|
|
}
|
|
|
|
func DecodeWildberriesJwt(token []byte) (WbAuthData, jwt.MapClaims, error) {
|
|
var authData WbAuthData
|
|
err := json.Unmarshal(token, &authData)
|
|
if err != nil {
|
|
return authData, nil, fmt.Errorf("failed to unmarshal JWT: %w", err)
|
|
}
|
|
claims := jwt.MapClaims{}
|
|
_, _, err = jwt.NewParser().ParseUnverified(authData.Token, claims)
|
|
if err != nil {
|
|
return authData, nil, fmt.Errorf("invalid JWT: %w", err)
|
|
}
|
|
|
|
return authData, claims, nil
|
|
}
|
|
|
|
func ToPtrs[T any](s []T) []*T {
|
|
res := make([]*T, len(s))
|
|
for i := range s {
|
|
res[i] = &s[i]
|
|
}
|
|
return res
|
|
}
|
|
|
|
func DerefSlice[T any](s []*T) []T {
|
|
res := make([]T, len(s))
|
|
for i := range s {
|
|
if s[i] != nil {
|
|
res[i] = *s[i]
|
|
}
|
|
}
|
|
return res
|
|
}
|