From 9dee93c0773793b8222464b3055530989285aa0c Mon Sep 17 00:00:00 2001 From: Jakub Date: Thu, 23 Jan 2020 13:20:38 +0100 Subject: [PATCH] use our IPFS cluster at ipfs.status.im for uploads (#72) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub SokoĊ‚owski --- back-end/config/index.js | 4 ++-- .../controllers/dapps-metadata-controller.js | 3 ++- back-end/models/dapps-images-model.js | 24 +++++++++---------- back-end/models/dapps-metadata-model.js | 6 ++--- back-end/services/ipfs-service.js | 21 +++++++++------- 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/back-end/config/index.js b/back-end/config/index.js index ba282dd..4231e6c 100644 --- a/back-end/config/index.js +++ b/back-end/config/index.js @@ -17,8 +17,8 @@ const config = { ADMIN_USER : env.ADMIN_USER || "admin", ADMIN_PASSWORD : env.ADMIN_PASSWORD || "discoverbancor", /* IPFS */ - IPFS_HOST : env.IPFS_HOST || "ipfs.infura.io", - IPFS_PORT : env.IPFS_PORT || "5001", + IPFS_HOST : env.IPFS_HOST || "ipfs.status.im", + IPFS_PORT : env.IPFS_PORT || "443", IPFS_PROTOCOL : env.IPFS_PROTOCOL || "https", /* Blockchain */ DISCOVER_CONTRACT : env.DISCOVER_CONTRACT || "0x02d990A1C66e4Cf00bCdD98a0196149F7DdA2065", diff --git a/back-end/controllers/dapps-metadata-controller.js b/back-end/controllers/dapps-metadata-controller.js index fb1a105..dc74fe1 100644 --- a/back-end/controllers/dapps-metadata-controller.js +++ b/back-end/controllers/dapps-metadata-controller.js @@ -141,7 +141,8 @@ class DAppsMetadataController { if (dappMetadata) { dappMetadata.status = DAPP_METADATA_STATUSES.APPROVED - dappMetadata.ipfsHash = await IPFSService.addContent(dappMetadata.details) + var json = JSON.stringify(dappMetadata.details); + dappMetadata.ipfsHash = await IPFSService.addContent(json) await dappMetadata.save() diff --git a/back-end/models/dapps-images-model.js b/back-end/models/dapps-images-model.js index f073962..c164af3 100644 --- a/back-end/models/dapps-images-model.js +++ b/back-end/models/dapps-images-model.js @@ -1,7 +1,7 @@ -let mongoose = require('mongoose'); -let Schema = mongoose.Schema; - +const logger = require('../logger/logger').getLoggerFor('DAPPS-Images-Model'); const IPFSService = require('./../services/ipfs-service'); +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; let DAppsImageSchema = new Schema({ id: Schema.Types.ObjectId, @@ -13,21 +13,21 @@ let DAppsImageSchema = new Schema({ }); DAppsImageSchema.pre('save', async function () { - const formatedContent = JSON.stringify(this.content).split('base64,')[1]; - - if (!formatedContent) { + const content = this.content.split('base64,')[1]; + if (!content) { throw new Error('Invalid base64 image'); } - - const hash = await IPFSService.generateContentHash(formatedContent); - this.set({ content: formatedContent, hash: hash }); + const data = Buffer.from(content, 'base64'); + const hash = await IPFSService.addContent(data); + this.set({ content, hash }); }); DAppsImageSchema.statics.findByContent = async function (content) { - const formatedContent = JSON.stringify(content).split('base64,')[1]; - const hash = await IPFSService.generateContentHash(formatedContent); + const content = content.split('base64,')[1]; + const data = Buffer.from(content, 'base64'); + const hash = await IPFSService.generateContentHash(data); - return this.findOne({ hash: hash }); + return this.findOne({ hash }); }; module.exports = mongoose.model('DAppsImage', DAppsImageSchema); diff --git a/back-end/models/dapps-metadata-model.js b/back-end/models/dapps-metadata-model.js index 6ead1f2..a03b1e7 100644 --- a/back-end/models/dapps-metadata-model.js +++ b/back-end/models/dapps-metadata-model.js @@ -66,13 +66,13 @@ let DAppsMetadataSchema = new Schema({ }); DAppsMetadataSchema.pre('save', async function () { - const hash = await IPFSService.generateContentHash(this.details); - this.set({ hash: hash }); + const hash = await IPFSService.addContent(this.details); + this.set({ hash }); }); DAppsMetadataSchema.statics.findByPlainMetadata = async function (metadata) { const hash = await IPFSService.generateContentHash(metadata); - return this.findOne({ hash: hash }); + return this.findOne({ hash }); } DAppsMetadataSchema.statics.findByBytes32Hash = async function (bytes32Hash) { diff --git a/back-end/services/ipfs-service.js b/back-end/services/ipfs-service.js index cdb8801..afe1756 100644 --- a/back-end/services/ipfs-service.js +++ b/back-end/services/ipfs-service.js @@ -17,17 +17,22 @@ class IPFSService { return IPFSService.instance; } - async addContent(content) { - // Todo: pin the hash. Infura does not support it. - const contentHash = await this.storage.add(Buffer.from(JSON.stringify(content))); - - logger.info(`Content ${content} was successfully uploaded in IPFS`); - return contentHash[0].hash; + async addContent(content, filename='data.json') { + let data + if (Buffer.isBuffer(content)) { + data = content + } else if (typeof content == "object") { + data = Buffer.from(JSON.stringify(content)); + } else { + data = Buffer.from(content); + } + const resp = await this.storage.add(data, {pin: true}); + logger.info(`Content uploaded to IPFS: ${resp[0].hash}`); + return resp[0].hash; } async generateContentHash(content) { - const contentHash = await this.storage.add(Buffer.from(JSON.stringify(content)), { onlyHash: true }); - return contentHash[0].hash; + return this.addContent(content); } }