import crypto from 'crypto'; import moment from 'moment'; const makePolicy = () => { const policy = { conditions: [ { bucket: process.env.AWS_S3_UPLOAD_BUCKET_NAME }, ['starts-with', '$key', ''], { acl: 'public-read' }, ['content-length-range', 0, process.env.AWS_S3_UPLOAD_MAX_SIZE], ['starts-with', '$Content-Type', 'image'], ['starts-with', '$Cache-Control', ''], ], expiration: moment() .add(24 * 60, 'minutes') .format('YYYY-MM-DDTHH:mm:ss\\Z'), }; return new Buffer(JSON.stringify(policy)).toString('base64'); }; const signPolicy = policy => { const signature = crypto .createHmac('sha1', process.env.AWS_SECRET_ACCESS_KEY) .update(policy) .digest('base64'); return signature; }; export { makePolicy, signPolicy };