'use strict'; var promisify = require('util').promisify; var request = require('@root/request'); request = promisify(request); var aws4 = require('aws4'); var defaults = { awsAccessKey: 'TQ6UOPROD626SWV5KIP5', awsSecretAccessKey: 'Tm3dNht5QMKxu7EU44ZLflDeE7sFbqQy3Q+XE+MY', awsRegion: 'us-east-1', awsBucket: 'hy8', awsHost: 's3.switch.lxc' }; module.exports.create = function(config) { var awsAccessKey = config.awsAccessKey || defaults.awsAccessKey; var awsSecretAccessKey = config.awsSecretAccessKey || defaults.awsSecretAccessKey; var awsRegion = config.awsRegion || defaults.awsRegion; var awsBucket = config.awsBucket || defaults.awsBucket; var awsHost = config.awsHost || defaults.awsHost; var AWSCredentials = { accessKeyId: awsAccessKey, secretAccessKey: awsSecretAccessKey }; return { init: function(opts) { console.log('init'); return null; }, set: function(data) { console.log('Add Key Auth URL'); var ch = data.challenge; var signed = aws4.sign({ host: awsHost, service: 's3', region: awsRegion, path: '/' + awsBucket + '/' + ch.identifier.value + '/' + ch.token, headers: { 'Content-Type': 'text/plain;charset=UTF-8' }, method: 'PUT', body: ch.keyAuthorization, signQuery: true }, AWSCredentials ); console.log(signed); return request({ // debug: true, method: 'PUT', url: 'http://' + signed.host + signed.path, headers: { 'Content-Type': 'text/plain;charset=UTF-8' }, body: ch.keyAuthorization }).then(function(resp) { // console.log(resp.statusCode); if (200 !== resp.statusCode) { console.error(resp.statusCode); // console.error(resp.body); throw new Error('Could not PUT.'); } return true; }) .catch(function(err) { throw err; // return null; }); }, get: function(data) { console.log('List Key Auth URL'); var ch = data.challenge; var signed = aws4.sign({ host: awsHost, service: 's3', region: awsRegion, path: '/' + awsBucket + '/' + ch.identifier.value + '/' + ch.token, headers: { 'Content-Type': 'text/plain;charset=UTF-8' }, method: 'GET', signQuery: true }, AWSCredentials ); console.log(signed); return request({ // debug: true, method: 'GET', url: 'http://' + signed.host + signed.path, headers: { 'Content-Type': 'text/plain;charset=UTF-8' } }).then(function(resp) { if (200 === resp.statusCode) { return { keyAuthorization: resp.body }; }else if (404 === resp.statusCode){ return null; } // wrong sign returns 403 console.error(resp.statusCode); // console.error(resp.body); throw new Error('Could not GET'); }) .catch(function(err) { throw err; // return null; }); }, remove: function(data) { console.log('Remove Key Auth URL'); var ch = data.challenge; var signed = aws4.sign({ host: awsHost, service: 's3', region: awsRegion, path: '/' + awsBucket + '/' + ch.identifier.value + '/' + ch.token, method: 'DELETE', signQuery: true }, AWSCredentials ); console.log(signed); return request({ // debug: true, method: 'DELETE', url: 'http://' + signed.host + signed.path }).then(function(resp) { // console.log(resp.statusCode); if (204 !== resp.statusCode) { console.error(resp.statusCode); console.error(resp.body); throw new Error('Could not DELETE.'); } return true; }) .catch(function(err) { throw err; // return null; }); } }; };