diff --git a/app/services/ipfs.js b/app/services/ipfs.js new file mode 100644 index 0000000..e3f9f41 --- /dev/null +++ b/app/services/ipfs.js @@ -0,0 +1,31 @@ +import Ember from 'ember'; +import ipfsAPI from 'npm:ipfs-api'; +import config from 'kredits-web/config/environment'; + +export default Ember.Service.extend({ + + ipfsInstance: null, + + ipfs: function() { + if (this.get('ipfsInstance')) { + return this.get('ipfsInstance'); + } + let ipfs = ipfsAPI(config.ipfs); + this.set('ipfsInstance', ipfs); + return ipfs; + }.property('ipfsInstance'), + + storeFile(content) { + let ipfs = this.get('ipfs'); + return ipfs.add(new ipfs.Buffer(content)).then(res => { + return res[0].hash; + }); + }, + + getFile(hash) { + return this.get('ipfs').cat(hash, { buffer: true }).then(res => { + return res.toString(); + }); + } + +}); diff --git a/app/services/kredits.js b/app/services/kredits.js index 6e6c586..2f3d7d1 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -7,6 +7,8 @@ import kreditsContracts from 'npm:kredits-contracts'; export default Ember.Service.extend({ + ipfs: Ember.inject.service(), + web3Instance: null, web3Provided: false, // Web3 provided (using Mist Browser, Metamask et al.) diff --git a/config/environment.js b/config/environment.js index 77dd642..2a65fce 100644 --- a/config/environment.js +++ b/config/environment.js @@ -21,8 +21,22 @@ module.exports = function(environment) { // when it is created }, + browserify: { + transform: [ + ["babelify", { + presets: ["es2015"], + global: true + }] + ] + }, + web3ProviderUrl: "https://parity.kosmos.org:8545", - ethereumChain: "testnet" + ethereumChain: "testnet", + ipfs: { + host: 'localhost', + port: '5001', + protocol: 'http' + } }; if (environment === 'development') { diff --git a/package.json b/package.json index 170bd77..4dbc620 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "deploy": "npm run build-prod && npm run update-version-file && bash scripts/deploy.sh" }, "devDependencies": { + "babel-preset-es2015": "^6.22.0", + "babelify": "^7.3.0", "broccoli-asset-rev": "^2.4.5", "ember-ajax": "^2.4.1", "ember-browserify": "^1.1.13", @@ -39,9 +41,10 @@ "ember-export-application-global": "^1.0.5", "ember-load-initializers": "^0.5.1", "ember-resolver": "^2.0.3", + "ipfs-api": "^12.1.7", + "kredits-contracts": "67P/kredits-contracts", "loader.js": "^4.0.10", - "web3": "^0.18.2", - "kredits-contracts": "67P/kredits-contracts" + "web3": "^0.18.2" }, "engines": { "node": ">= 0.12.0" diff --git a/tests/unit/services/ipfs-test.js b/tests/unit/services/ipfs-test.js new file mode 100644 index 0000000..3a10cca --- /dev/null +++ b/tests/unit/services/ipfs-test.js @@ -0,0 +1,12 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('service:ipfs', 'Unit | Service | ipfs', { + // Specify the other units that are required for this test. + // needs: ['service:foo'] +}); + +// Replace this with your real tests. +test('it exists', function(assert) { + let service = this.subject(); + assert.ok(service); +});