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
validErr = fmt.Errorf("token not valid")
return utils.ORErrors(dbErr, validErr)