From be568840db0382d1550cde0983ed72d50b3ddcd8 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Fri, 17 Feb 2017 18:20:46 +0800 Subject: [PATCH] Add IPFS service Add the `ipfs-api` JS library and a service using the browserified version of it. The service has functions for storing and reading file contests. --- app/services/ipfs.js | 32 ++++++++++++++++++++++++++++++++ app/services/kredits.js | 2 ++ config/environment.js | 7 ++++++- package.json | 5 +++-- tests/unit/services/ipfs-test.js | 12 ++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 app/services/ipfs.js create mode 100644 tests/unit/services/ipfs-test.js diff --git a/app/services/ipfs.js b/app/services/ipfs.js new file mode 100644 index 0000000..483f1b8 --- /dev/null +++ b/app/services/ipfs.js @@ -0,0 +1,32 @@ +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); + window.ipfs = 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 }, (err, 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..a9dfba2 100644 --- a/config/environment.js +++ b/config/environment.js @@ -22,7 +22,12 @@ module.exports = function(environment) { }, 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..4d4596d 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,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); +});