123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- var bodyParser = require('body-parser');
- var STS = require('qcloud-cos-sts');
- var express = require('express');
- var crypto = require('crypto');
- var config = {
- secretId: process.env.SecretId,
- secretKey: process.env.SecretKey,
- proxy: process.env.Proxy,
- durationSeconds: 1800,
- bucket: process.env.Bucket,
- region: process.env.Region,
-
-
- allowPrefix: '_ALLOW_DIR_/*',
-
- allowActions: [
-
-
- 'name/cos:PutObject',
- 'name/cos:PostObject',
-
- 'name/cos:InitiateMultipartUpload',
- 'name/cos:ListMultipartUploads',
- 'name/cos:ListParts',
- 'name/cos:UploadPart',
- 'name/cos:CompleteMultipartUpload'
- ],
- };
- var app = express();
- app.use(bodyParser.json());
- app.all('/sts', function (req, res, next) {
-
- if (config.allowPrefix === '_ALLOW_DIR_/*') {
- res.send({error: '请修改 allowPrefix 配置项,指定允许上传的路径前缀'});
- return;
- }
-
- var LongBucketName = config.bucket;
- var ShortBucketName = LongBucketName.substr(0, LongBucketName.lastIndexOf('-'));
- var AppId = LongBucketName.substr(LongBucketName.lastIndexOf('-') + 1);
- var policy = {
- 'version': '2.0',
- 'statement': [{
- 'action': config.allowActions,
- 'effect': 'allow',
- 'resource': [
- 'qcs::cos:' + config.region + ':uid/' + AppId + ':prefix//' + AppId + '/' + ShortBucketName + '/' + config.allowPrefix,
- ],
- }],
- };
- var startTime = Math.round(Date.now() / 1000);
- STS.getCredential({
- secretId: config.secretId,
- secretKey: config.secretKey,
- proxy: config.proxy,
- region: config.region,
- durationSeconds: config.durationSeconds,
- policy: policy,
- }, function (err, tempKeys) {
- if (tempKeys) tempKeys.startTime = startTime;
- res.send(err || tempKeys);
- });
- });
- app.all('/post-policy', function (req, res, next) {
- var query = req.query;
- var now = Math.round(Date.now() / 1000);
- var exp = now + 900;
- var qKeyTime = now + ';' + exp;
- var qSignAlgorithm = 'sha1';
- var policy = JSON.stringify({
- 'expiration': new Date(exp * 1000).toISOString(),
- 'conditions': [
-
-
-
-
- {'q-sign-algorithm': qSignAlgorithm},
- {'q-ak': config.secretId},
- {'q-sign-time': qKeyTime},
- {'bucket': config.bucket},
- {'key': query.key},
- ]
- });
-
-
- var signKey = crypto.createHmac('sha1', config.secretKey).update(qKeyTime).digest('hex');
-
- var stringToSign = crypto.createHash('sha1').update(policy).digest('hex');
-
- var qSignature = crypto.createHmac('sha1', signKey).update(stringToSign).digest('hex');
- console.log(policy);
- res.send({
- policyObj: JSON.parse(policy),
- policy: Buffer.from(policy).toString('base64'),
- qSignAlgorithm: qSignAlgorithm,
- qAk: config.secretId,
- qKeyTime: qKeyTime,
- qSignature: qSignature,
-
- });
- });
- app.all('*', function (req, res, next) {
- res.send({code: -1, message: '404 Not Found'});
- });
- app.listen(3000);
- console.log('app is listening at http://127.0.0.1:3000');
|