Skip to content
Snippets Groups Projects
token.go 875 B
Newer Older
package token

import (
	"encoding/json"
	"fmt"

	"github.com/zachmann/mytoken/internal/db/dbrepo/supertokenrepo/transfercoderepo"
	"github.com/zachmann/mytoken/internal/utils"
)

// Token is a type used for tokens passed in http requests; these can be normal SuperTokens or a short token. This type will unmarshal always into a jwt of the (long) SuperToken
type Token string

// UnmarshalJSON implements the json.Unmarshaler interface
func (t *Token) UnmarshalJSON(data []byte) error {
	var token string
	if err := json.Unmarshal(data, &token); err != nil {
		return err
	}
	if utils.IsJWT(token) {
		*t = Token(token)
		return nil
	}
	shortToken := transfercoderepo.ParseShortToken(token)
	token, valid, dbErr := shortToken.JWT(nil)
	var validErr error
	if !valid {
		validErr = fmt.Errorf("token not valid")
	}
	*t = Token(token)
	return utils.ORErrors(dbErr, validErr)