-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.js
More file actions
166 lines (141 loc) · 4.87 KB
/
Copy pathcontent.js
File metadata and controls
166 lines (141 loc) · 4.87 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
const LOAD_DELAY = 10000;
const SOCKET_ADDRESS = "ws://localhost:8700/";
let socket = new WebSocket(SOCKET_ADDRESS);
let observer = new MutationObserver(mutations => {
myMain()
});
chrome.extension.onMessage.addListener(function(request, sender, response) {
/* Remove old warning message */
if (request.message === 'pageLoaded') {
let old_alert_message = document.getElementById("FaceCheck_alert");
if (old_alert_message) {
old_alert_message.parentElement.removeChild(old_alert_message);
}
setTimeout(() => { myMain(); }, LOAD_DELAY);
}
})
function myMain() {
let profileName = getProfileName();
if (!profileName) {
profileName = null;
console.log("Profile name could not be found");
}
let profilePicElement = getProfilePictureElement();
// Couldn't find profile image therefore tell user no info could be found
if (!profilePicElement) {
console.log("nooo");
displayNoInfoAlert();
return;
}
profilePicURL = getImageURL(profilePicElement);
// Couldn't extract profile image url therefore tell user no info could be found
if (profilePicURL == null) {
console.log("nooo");
profilePicElement.style.border = '7px solid yellow';
displayNoInfoAlert()
return;
}
message = {
"name": profileName,
"image_url" : profilePicURL
};
console.log(JSON.stringify(message));
try {
socket.send(JSON.stringify(message));
}
catch(err) {
console.log("Could not connect to server" + err);
return;
}
socket.onmessage = function(event) {
console.log(event.data);
if (event.data.includes("occurrences")) {
profilePicElement.style.border = '7px solid green';
}
else if (event.data.includes("WARNING")) {
profilePicElement.style.border = '7px solid red';
}
else if (event.data.includes("couldn't")) {
profilePicElement.style.border = '7px solid yellow';
}
document.body.insertAdjacentHTML('beforeend', event.data);
}
};
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
} else {
console.log('[close] Connection died');
}
};
socket.onerror = function(error) {
console.log(`[error] ${error.message}`);
};
function displayNoInfoAlert() {
fetch(chrome.runtime.getURL('index.html')).then(r => r.text()).then(html => {
document.body.insertAdjacentHTML('beforeend', html);
});
}
function getProfileName() {
var nameElementsOnPage = document.querySelectorAll('[class*="name" i]', '[class$="name" i]', '[class^="name" i]');
let largestFontSize = 0;
let profileName;
nameElementsOnPage.forEach(element => {
elementFontSize = getFontSize(element);
if (element.innerHTML.length != 0 && elementFontSize > largestFontSize) {
profileName = element.innerHTML;
largestFontSize = elementFontSize;
}
});
if (profileName) {
return profileName
}
return null;
}
function getProfileNameElement() {
var nameElementsOnPage = document.querySelectorAll('[class*="name" i]', '[class$="name" i]', '[class^="name" i]');
let largestFontSize = 0;
let profileNameElement;
nameElementsOnPage.forEach(element => {
elementFontSize = getFontSize(element);
if (element.innerHTML.length != 0 && elementFontSize > largestFontSize) {
profileNameElement = element;
profileName = element.innerHTML;
largestFontSize = elementFontSize;
}
});
return profileNameElement;
}
function getFontSize(element) {
return parseInt(window.getComputedStyle(element).fontSize, 10);
}
/* Get largest image on page */
function getProfilePictureElement() {
// Gather all elements which could be images
var imagesOnPage = document.querySelectorAll(
'[class*="photo" i], [class$="photo" i], [class^="photo" i], [class*="image" i], [class$="image" i], [class^="image" i], [style*=url], img, img.src, [class*=picture]'); /* make so start end and middle for each */
let maxSize = 0;
let profilePic;
imagesOnPage.forEach(element => {
let pictureArea = getElementArea(element);
if ((pictureArea > maxSize) && element.childNodes.length == 0 && element.getAttribute("id") != "bgImgBox" && element.getAttribute("class") != "microProfil") {
maxSize = pictureArea;
profilePic = element;
}
});
return profilePic;
};
function getImageURL(element) {
let url = element.getAttribute("src");
if (url == null) {
url = element.getAttribute("style");
if (url != null) {
url = url.match(/url\(["']?([^"']*)["']?\)/)[1];
}
}
return url;
}
function getElementArea(element) {
return element.offsetHeight * element.offsetWidth;
};
// taken from https://gist.github.com/colxi/c9ab898aa063e0943d4fae1840b982d8