租房小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.7 KiB

3 months ago
  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 { setSTSToken } = require('../utils/setSTSToken');
  7. const { isFunction } = require('../utils/isFunction');
  8. const proto = exports;
  9. /**
  10. * asyncSignatureUrl
  11. * @param {String} name object name
  12. * @param {Object} options options
  13. * @param {boolean} [strictObjectNameValidation=true] the flag of verifying object name strictly
  14. */
  15. proto.asyncSignatureUrl = async function asyncSignatureUrl(name, options, strictObjectNameValidation = true) {
  16. if (isIP(this.options.endpoint.hostname)) {
  17. throw new Error('can not get the object URL when endpoint is IP');
  18. }
  19. if (strictObjectNameValidation && /^\?/.test(name)) {
  20. throw new Error(`Invalid object name ${name}`);
  21. }
  22. options = options || {};
  23. name = this._objectName(name);
  24. options.method = options.method || 'GET';
  25. const expires = utility.timestamp() + (options.expires || 1800);
  26. const params = {
  27. bucket: this.options.bucket,
  28. object: name
  29. };
  30. const resource = this._getResource(params);
  31. if (this.options.stsToken && isFunction(this.options.refreshSTSToken)) {
  32. await setSTSToken.call(this);
  33. }
  34. if (this.options.stsToken) {
  35. options['security-token'] = this.options.stsToken;
  36. }
  37. const signRes = signHelper._signatureForURL(this.options.accessKeySecret, options, resource, expires);
  38. const url = urlutil.parse(this._getReqUrl(params));
  39. url.query = {
  40. OSSAccessKeyId: this.options.accessKeyId,
  41. Expires: expires,
  42. Signature: signRes.Signature
  43. };
  44. copy(signRes.subResource).to(url.query);
  45. return url.format();
  46. };