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) {
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) {
shortToken := transfercoderepo.ParseShortToken(token)
token, valid, dbErr := shortToken.JWT(nil)
var validErr error
validErr = fmt.Errorf("token not valid")
return Token(token), utils.ORErrors(dbErr, validErr)