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

85 lines
2.1 KiB
JavaScript
Raw Normal View History

2018-07-28 00:56:56 +02:00
const logger = require('winston');
const lbryUri = require('../../utils/lbryUri');
const getOEmbedDataForChannel = require('./getOEmbedDataForChannel');
const getOEmbedDataForAsset = require('./getOEmbedDataForAsset');
2018-07-28 03:40:57 +02:00
const parseSpeechUrl = (url) => {
2018-07-28 03:40:57 +02:00
// parse the request url
const componentsRegex = new RegExp(
'([^:/?#]+:\/\/)'+
'([^/?#]*)' +
'(\/)' +
2018-07-30 19:02:08 +02:00
'([^/?#]*)' +
2018-07-28 03:40:57 +02:00
'(\/)' +
2018-07-30 19:02:08 +02:00
'([^/?#]*)'
2018-07-28 03:40:57 +02:00
);
const [proto, protocol, domain, slashOne, paramOne, slashTwo, paramTwo] = componentsRegex
.exec(url)
.map(match => match || null);
2018-07-28 03:40:57 +02:00
logger.debug(`${protocol}, ${domain}, ${slashOne}, ${paramOne}, ${slashTwo}, ${paramTwo}`);
return {
paramOne,
paramTwo,
}
};
2018-07-28 03:40:57 +02:00
const getOEmbedData = (req, res) => {
2018-07-28 03:40:57 +02:00
const { query: { url, format } } = req;
logger.debug('req url', url);
logger.debug('req format', format);
2018-07-28 03:40:57 +02:00
const { paramOne, paramTwo } = parseSpeechUrl(url);
let claimName, isChannel, channelName, channelClaimId, claimId;
if (paramTwo) {
({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(paramOne));
({ claimName } = lbryUri.parseClaim(paramTwo));
} else {
({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(paramOne));
if (!isChannel ) {
({ claimName } = lbryUri.parseClaim(paramOne));
}
}
if (isChannel && !paramTwo) {
getOEmbedDataForChannel(channelName, channelClaimId)
.then(data => {
return res.status(200).json({
success: true,
message: 'hello',
data,
});
})
.catch((error) => {
return res.status(404).json({
success: false,
message: error,
});
})
} else {
getOEmbedDataForAsset(channelName, channelClaimId, claimName, claimId)
.then(data => {
return res.status(200).json({
success: true,
message: 'hello',
data,
});
})
.catch((error) => {
return res.status(404).json({
success: false,
message: error,
});
})
}
2018-07-28 00:56:56 +02:00
};
module.exports = getOEmbedData;