// LoadAuthorize looks up AuthorizeData by a code. // Client information MUST be loaded together. // Optionally can return error if expired. func (s *Storage) LoadAuthorize(code string) (*osin.AuthorizeData, error) { var data osin.AuthorizeData var extra string var cid string if err := s.db.QueryRow("SELECT client, code, expires_in, scope, redirect_uri, state, created_at, extra FROM authorize WHERE code=$1 LIMIT 1", code).Scan(&cid, &data.Code, &data.ExpiresIn, &data.Scope, &data.RedirectUri, &data.State, &data.CreatedAt, &extra); err == sql.ErrNoRows { return nil, pkg.ErrNotFound } else if err != nil { return nil, errors.New(err) } data.UserData = extra c, err := s.GetClient(cid) if err != nil { return nil, err } if data.ExpireAt().Before(time.Now()) { return nil, errors.Errorf("Token expired at %s.", data.ExpireAt().String()) } data.Client = c return &data, nil }