signatureUrl.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const urlutil = require('url');
  2. const utility = require('utility');
  3. const copy = require('copy-to');
  4. const signHelper = require('../../common/signUtils');
  5. const { isIP } = require('../utils/isIP');
  6. const proto = exports;
  7. proto.signatureUrl = function signatureUrl(name, options) {
  8. if (isIP(this.options.endpoint.hostname)) {
  9. throw new Error('can not get the object URL when endpoint is IP');
  10. }
  11. options = options || {};
  12. name = this._objectName(name);
  13. options.method = options.method || 'GET';
  14. const expires = utility.timestamp() + (options.expires || 1800);
  15. const params = {
  16. bucket: this.options.bucket,
  17. object: name
  18. };
  19. const resource = this._getResource(params);
  20. if (this.options.stsToken) {
  21. options['security-token'] = this.options.stsToken;
  22. }
  23. const signRes = signHelper._signatureForURL(this.options.accessKeySecret, options, resource, expires);
  24. const url = urlutil.parse(this._getReqUrl(params));
  25. url.query = {
  26. OSSAccessKeyId: this.options.accessKeyId,
  27. Expires: expires,
  28. Signature: signRes.Signature
  29. };
  30. copy(signRes.subResource).to(url.query);
  31. return url.format();
  32. };