-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathunfurler.js
More file actions
108 lines (82 loc) · 3.62 KB
/
unfurler.js
File metadata and controls
108 lines (82 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
const logger = require('./util/logger');
//const { unfurl } = require('unfurl.js');
import {unfurl} from 'unfurl.js';
class Unfurler {
/**
* Initialize the Kafka consumer to listen for request and push to server
* @param theSocketServer
*/
normalize(result) {
//logger.info(result);
let unfurled = {};
if (result['title'] !== undefined)
unfurled['title'] = result['title'];
if (result['description'] !== undefined)
unfurled['description'] = result['description'];
if (result['favicon'] !== undefined)
unfurled['favicon'] = result['favicon'];
// ... We are selecting these by priority
if (result['twitter_card'] !== undefined)
{
if (result['twitter_card']['title'] !== undefined)
unfurled['title'] = result['twitter_card']['title'];
if (result['twitter_card']['description'] !== undefined)
unfurled['description'] = result['twitter_card']['description'];
}
else if (result['oEmbed'] !== undefined)
{
if (result['oEmbed']['title'] !== undefined)
unfurled['title'] = result['oEmbed']['title'];
}
else if (result['open_graph'] !== undefined)
{
if (result['open_graph']['title'] !== undefined)
unfurled['title'] = result['open_graph']['title'];
if (result['open_graph']['description'] !== undefined)
unfurled['description'] = result['open_graph']['description'];
}
if (result['twitter_card'] != undefined && result['twitter_card']['images'] !== undefined) {
unfurled['images'] = [result['twitter_card']['images']];
}
if (result['oEmbed'] != undefined && result['oEmbed']['images'] !== undefined) {
unfurled['images'] = [result['oEmbed']['images']];
}
if (result['open_graph'] != undefined && result['open_graph']['images'] !== undefined) {
unfurled['images'] = [result['open_graph']['images']];
}
return unfurled;
}
unfurledImageLink(url) {
logger.info("Direct unfurl of : " + url);
let result = {};
let urlObj = new URL(url);
// Create a dummy twitter card
result['favicon'] = urlObj.protocol + "//" + urlObj.hostname + "/favicon.ico";
result['twitter_card'] = ['images'];
result['twitter_card']['images'] = [{'url':url}];
return result;
}
async processUnfurlCommand(dataObj) {
try {
logger.info("Unfurling: " + dataObj.payload.url);
let result = [];
// If the url is just a link, we can jst construct a response and send
if (dataObj.payload.url.endsWith('.jpg') ||
dataObj.payload.url.endsWith('.png') ||
dataObj.payload.url.endsWith('.gif')) {
result = this.unfurledImageLink(dataObj.payload.url);
}
else {
// Perform actual unfurling
result = await unfurl(dataObj.payload.url, {follow: 1, timeout: 10000});
}
return this.normalize(result);
}
catch(err) {
// Nothing to do. Just ignore.
logger.error(err);
return;
}
}
}
module.exports = Unfurler;