spee.ch/server/controllers/api/oEmbed/getOEmbedDataForAsset.js

69 lines
1.9 KiB
JavaScript
Raw Normal View History

const logger = require('winston');
const db = require('../../../models');
const getClaimId = require('../../utils/getClaimId');
2018-07-31 18:20:56 +02:00
const {
2019-01-28 03:45:44 +01:00
details: { host, title: siteTitle },
2018-07-31 18:20:56 +02:00
} = require('@config/siteConfig');
const getOEmbedDataForAsset = (channelName, channelClaimId, claimName, claimId) => {
let fileData, claimData;
let data = {
2019-01-28 03:45:44 +01:00
version: '1.0',
2018-07-31 18:20:56 +02:00
provider_name: siteTitle,
2019-01-28 03:45:44 +01:00
provider_url: host,
cache_age: 86400, // one day in seconds
};
return getClaimId(channelName, channelClaimId, claimName, claimId)
.then(fullClaimId => {
claimId = fullClaimId;
return db.Claim.findOne({
where: {
2019-01-28 03:45:44 +01:00
name: claimName,
claimId: fullClaimId,
},
});
})
.then(claimRecord => {
claimData = claimRecord.dataValues;
return db.Blocked.isNotBlocked(claimData.outpoint);
})
.then(() => {
return db.File.findOne({
where: {
name: claimName,
claimId,
},
});
})
.then(fileRecord => {
fileData = fileRecord.dataValues;
logger.debug('file data:', fileData);
2019-01-28 03:45:44 +01:00
const serveUrl = `${host}/${fileData.claimId}/${fileData.name}.${fileData.fileType.substring(
fileData.fileType.indexOf('/') + 1
)}`;
// set the resource type
if (fileData.fileType === 'video/mp4') {
data['type'] = 'video';
2019-01-28 03:45:44 +01:00
data['html'] = `<video width="100%" controls poster="${
claimData.thumbnail
}" src="${serveUrl}"/></video>`;
} else {
data['type'] = 'picture';
2018-07-31 00:23:26 +02:00
data['url'] = serveUrl;
}
// get the data
data['title'] = claimData.title;
2019-01-28 03:45:44 +01:00
data['width'] = fileData.fileWidth || 600;
data['height'] = fileData.fileHeight || 400;
2018-07-31 18:20:56 +02:00
data['author_name'] = siteTitle;
data['author_url'] = host;
})
.then(() => {
return data;
});
};
module.exports = getOEmbedDataForAsset;