Skip to content
Snippets Groups Projects
token.go 1.05 KiB
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) (err error) {
	var token string
	if err = json.Unmarshal(data, &token); err != nil {
		return
	*t, err = GetLongSuperToken(token)
	return
}

// GetLongSuperToken returns the long / jwt of a super token; the passed token can be a jwt or a short token
func GetLongSuperToken(token string) (Token, error) {
	if utils.IsJWT(token) {
		return Token(token), nil
	shortToken := transfercoderepo.ParseShortToken(token)
	token, valid, dbErr := shortToken.JWT(nil)
	var validErr error
	if !valid {
		validErr = fmt.Errorf("token not valid")
	return Token(token), utils.ORErrors(dbErr, validErr)