diff --git a/README.md b/README.md index a0205422..0b0226d1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

A Dropbox-like file manager that let you manage your data anywhere it is located:
- FTP • SFTP • WebDAV • Git • S3
+ FTP • SFTP • WebDAV • Git • S3 • Minio
Dropbox • Google Drive

diff --git a/client/pages/connectpage/form.js b/client/pages/connectpage/form.js index 9f4f741e..658290d7 100644 --- a/client/pages/connectpage/form.js +++ b/client/pages/connectpage/form.js @@ -67,7 +67,7 @@ export class Form extends React.Component { if(credentials['webdav'] && credentials['webdav']['path']){ this.setState({advanced_webdav: true}); } - if(credentials['s3'] && credentials['s3']['path']){ + if(credentials['s3'] && (credentials['s3']['path'] || credentials['s3']['endpoint'])){ this.setState({advanced_s3: true}); } if(credentials['git'] && ( @@ -304,6 +304,9 @@ export class Form extends React.Component { {this.state.refs.s3_path = input; }} autoComplete="new-password" /> + + {this.state.refs.s3_endpoint = input; }} autoComplete="new-password" /> + diff --git a/config_client.js b/config_client.js index dd18729b..1961a11c 100644 --- a/config_client.js +++ b/config_client.js @@ -56,6 +56,7 @@ module.exports = { // access_key_id: 'my_access_key', // secret_access_key: 'my_secret_key', // advanced: false, + // endpoint: 'http://127.0.0.1:9000', // eg: your minio instance // path: '/bucketname/' }, dropbox: {label: 'Dropbox'}, diff --git a/server/model/backend/s3.js b/server/model/backend/s3.js index c2231079..b6d351d4 100644 --- a/server/model/backend/s3.js +++ b/server/model/backend/s3.js @@ -11,12 +11,18 @@ function decode(path){ } function connect(params){ - var s3 = new AWS.S3({ + let config = { apiVersion: '2006-03-01', accessKeyId: params.access_key_id, secretAccessKey: params.secret_access_key, - sslEnabled: true - }); + signatureVersion: 'v4', + s3ForcePathStyle: true, + //sslEnabled: true + }; + if(params.endpoint){ + config.endpoint = new AWS.Endpoint(params.endpoint); + } + var s3 = new AWS.S3(config); return Promise.resolve(s3); }