| OLD | NEW |
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package coordinator | 5 package coordinator |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "sync" | 8 "sync" |
| 9 "sync/atomic" | 9 "sync/atomic" |
| 10 "time" | 10 "time" |
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 func (si *googleStorage) Close() { | 501 func (si *googleStorage) Close() { |
| 502 if err := si.gs.Close(); err != nil { | 502 if err := si.gs.Close(); err != nil { |
| 503 log.WithError(err).Warningf(si.ctx, "Failed to close Google Stor
age client.") | 503 log.WithError(err).Warningf(si.ctx, "Failed to close Google Stor
age client.") |
| 504 } | 504 } |
| 505 si.Storage.Close() | 505 si.Storage.Close() |
| 506 } | 506 } |
| 507 | 507 |
| 508 func (si *googleStorage) GetSignedURLs(c context.Context, req *URLSigningRequest
) (*URLSigningResponse, error) { | 508 func (si *googleStorage) GetSignedURLs(c context.Context, req *URLSigningRequest
) (*URLSigningResponse, error) { |
| 509 info, err := si.svc.signer.ServiceInfo(c) | 509 info, err := si.svc.signer.ServiceInfo(c) |
| 510 if err != nil { | 510 if err != nil { |
| 511 » » return nil, errors.Annotate(err).InternalReason("failed to get s
ervice info").Err() | 511 » » return nil, errors.Annotate(err, "").InternalReason("failed to g
et service info").Err() |
| 512 } | 512 } |
| 513 | 513 |
| 514 lifetime := req.Lifetime | 514 lifetime := req.Lifetime |
| 515 switch { | 515 switch { |
| 516 case lifetime < 0: | 516 case lifetime < 0: |
| 517 » » return nil, errors.Reason("invalid signed URL lifetime: %(lifeti
me)s").D("lifetime", lifetime).Err() | 517 » » return nil, errors.Reason("invalid signed URL lifetime: %s", lif
etime).Err() |
| 518 | 518 |
| 519 case lifetime > maxSignedURLLifetime: | 519 case lifetime > maxSignedURLLifetime: |
| 520 lifetime = maxSignedURLLifetime | 520 lifetime = maxSignedURLLifetime |
| 521 } | 521 } |
| 522 | 522 |
| 523 // Get our signing options. | 523 // Get our signing options. |
| 524 resp := URLSigningResponse{ | 524 resp := URLSigningResponse{ |
| 525 Expiration: clock.Now(c).Add(lifetime), | 525 Expiration: clock.Now(c).Add(lifetime), |
| 526 } | 526 } |
| 527 opts := gcst.SignedURLOptions{ | 527 opts := gcst.SignedURLOptions{ |
| 528 GoogleAccessID: info.ServiceAccountName, | 528 GoogleAccessID: info.ServiceAccountName, |
| 529 SignBytes: func(b []byte) ([]byte, error) { | 529 SignBytes: func(b []byte) ([]byte, error) { |
| 530 _, signedBytes, err := si.svc.signer.SignBytes(c, b) | 530 _, signedBytes, err := si.svc.signer.SignBytes(c, b) |
| 531 return signedBytes, err | 531 return signedBytes, err |
| 532 }, | 532 }, |
| 533 Method: "GET", | 533 Method: "GET", |
| 534 Expires: resp.Expiration, | 534 Expires: resp.Expiration, |
| 535 } | 535 } |
| 536 | 536 |
| 537 doSign := func(path gs.Path) (string, error) { | 537 doSign := func(path gs.Path) (string, error) { |
| 538 url, err := gcst.SignedURL(path.Bucket(), path.Filename(), &opts
) | 538 url, err := gcst.SignedURL(path.Bucket(), path.Filename(), &opts
) |
| 539 if err != nil { | 539 if err != nil { |
| 540 » » » return "", errors.Annotate(err).InternalReason("failed t
o sign URL"). | 540 » » » return "", errors.Annotate(err, "").InternalReason( |
| 541 » » » » D("bucket", path.Bucket()).D("filename", path.Fi
lename).Err() | 541 » » » » "failed to sign URL: bucket(%s)/filename(%s)", p
ath.Bucket(), path.Filename).Err() |
| 542 } | 542 } |
| 543 return url, nil | 543 return url, nil |
| 544 } | 544 } |
| 545 | 545 |
| 546 // Sign stream URL. | 546 // Sign stream URL. |
| 547 if req.Stream { | 547 if req.Stream { |
| 548 if resp.Stream, err = doSign(si.stream); err != nil { | 548 if resp.Stream, err = doSign(si.stream); err != nil { |
| 549 » » » return nil, errors.Annotate(err).InternalReason("failed
to sign stream URL").Err() | 549 » » » return nil, errors.Annotate(err, "").InternalReason("fai
led to sign stream URL").Err() |
| 550 } | 550 } |
| 551 } | 551 } |
| 552 | 552 |
| 553 // Sign index URL. | 553 // Sign index URL. |
| 554 if req.Index { | 554 if req.Index { |
| 555 if resp.Index, err = doSign(si.index); err != nil { | 555 if resp.Index, err = doSign(si.index); err != nil { |
| 556 » » » return nil, errors.Annotate(err).InternalReason("failed
to sign index URL").Err() | 556 » » » return nil, errors.Annotate(err, "").InternalReason("fai
led to sign index URL").Err() |
| 557 } | 557 } |
| 558 } | 558 } |
| 559 | 559 |
| 560 return &resp, nil | 560 return &resp, nil |
| 561 } | 561 } |
| OLD | NEW |