package generates import ( "bytes" "context" "encoding/base64" "strings" "github.com/google/uuid" "github.com/superseriousbusiness/oauth2/v4" ) // NewAuthorizeGenerate create to generate the authorize code instance func NewAuthorizeGenerate() *AuthorizeGenerate { return &AuthorizeGenerate{} } // AuthorizeGenerate generate the authorize code type AuthorizeGenerate struct{} // Token based on the UUID generated token func (ag *AuthorizeGenerate) Token(ctx context.Context, data *oauth2.GenerateBasic) (string, error) { buf := bytes.NewBufferString(data.Client.GetID()) buf.WriteString(data.UserID) token := uuid.NewMD5(uuid.Must(uuid.NewRandom()), buf.Bytes()) code := base64.URLEncoding.EncodeToString([]byte(token.String())) code = strings.ToUpper(strings.TrimRight(code, "=")) return code, nil }