-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.js
56 lines (45 loc) · 1.42 KB
/
service.js
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
const crypto = require('crypto');
class ContactsProvider {
constructor() {
this.contactsWeakHashMap = {}
}
addContact(contact) {
var weakHash = this.getWeakHash(contact);
var strongHash = this.getStrongHash(contact);
if (weakHash in this.contactsWeakHashMap){
if(this.contactsWeakHashMap[weakHash].indexOf(strongHash)==-1){
this.contactsWeakHashMap[weakHash].push(strongHash);
}
}else{
this.contactsWeakHashMap[weakHash] = [strongHash];
}
}
removeContact(contact) {
var weakHash = this.getWeakHash(contact);
var strongHash = this.getStrongHash(contact);
if (weakHash in this.contactsWeakHashMap && this.contactsWeakHashMap[weakHash].indexOf(strongHash)>=0){
this.contactsWeakHashMap[weakHash].splice(this.contactsWeakHashMap[weakHash].indexOf(strongHash), 1);
if (!this.contactsWeakHashMap[weakHash].length)
delete this.contactsWeakHashMap[weakHash]
}
}
getWeakHash(contact){
return crypto.createHash('sha1').update(contact).digest('hex').substr(3,6);
}
getStrongHash(contact){
return crypto.createHash('sha1').update(contact).digest('hex');
}
queryContacts(contactWeakHashList){
var result = [];
for (var i in contactWeakHashList){
let weakHash = contactWeakHashList[i];
if (weakHash in this.contactsWeakHashMap){
result = result.concat(this.contactsWeakHashMap[weakHash]);
}
}
return result
}
}
module.exports = {
'provider': ContactsProvider
}