package keepweb
import (
+ "errors"
"net/http"
"sync"
"sync/atomic"
return nil, nil, nil, err
}
sess.client.AuthToken = token
+ sess.client.Timeout = time.Minute
+ // A non-empty origin header tells controller to
+ // prioritize our traffic as interactive, which is
+ // true most of the time.
+ origin := c.cluster.Services.WebDAVDownload.ExternalURL
+ sess.client.SendHeader = http.Header{"Origin": {origin.Scheme + "://" + origin.Host}}
sess.arvadosclient, err = arvadosclient.New(sess.client)
if err != nil {
return nil, nil, nil, err
if user == nil || expired {
user = new(arvados.User)
err := sess.client.RequestAndDecode(user, "GET", "/arvados/v1/users/current", nil, nil)
- if statusErr, ok := err.(interface{ HTTPStatus() int }); ok && statusErr.HTTPStatus() == http.StatusForbidden {
+ if he := errorWithHTTPStatus(nil); errors.As(err, &he) && he.HTTPStatus() == http.StatusForbidden {
// token is OK, but "get user id" api is out
// of scope -- return nil, signifying unknown
// user