func main() { req, _ := http.NewRequest("GET", "http://www.example.com/", nil) res, _ := http.DefaultClient.Do(req) _, _ = ioutil.ReadAll(res.Body) reasons, expires, _ := cachecontrol.CachableResponse(req, res, cachecontrol.Options{}) fmt.Println("Reasons to not cache: ", reasons) fmt.Println("Expiration: ", expires.String()) }
func (r *remoteKeySet) updateKeys(ctx context.Context) error { req, err := http.NewRequest("GET", r.jwksURL, nil) if err != nil { return fmt.Errorf("oidc: can't create request: %v", err) } resp, err := ctxhttp.Do(ctx, clientFromContext(ctx), req) if err != nil { return fmt.Errorf("oidc: get keys failed %v", err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { return fmt.Errorf("oidc: read response body: %v", err) } if resp.StatusCode != http.StatusOK { return fmt.Errorf("oidc: get keys failed: %s %s", resp.Status, body) } var keySet jose.JSONWebKeySet if err := json.Unmarshal(body, &keySet); err != nil { return fmt.Errorf("oidc: failed to decode keys: %v %s", err, body) } // If the server doesn't provide cache control headers, assume the // keys expire immediately. expiry := r.now() _, e, err := cachecontrol.CachableResponse(req, resp, cachecontrol.Options{}) if err == nil && e.After(expiry) { expiry = e } r.mu.Lock() defer r.mu.Unlock() r.cachedKeys = keySet.Keys r.expiry = expiry return nil }