Newer
Older
import { getCrypto } from 'pkijs';
export const createDeviceHash = async (publicKey) => {
try {
const stringToEncode = publicKey + navigator.userAgent;
const crypto = getCrypto();
const buffer = new window.TextEncoder().encode(stringToEncode);
const hash = await crypto.digest({ name: "SHA-1" }, buffer);
return window.btoa(String.fromCharCode(...new Uint8Array(hash)));
} catch (error) {
console.warn(error); // eslint-disable-line no-console
}
};
export const encodeResponse = (code, data, status) => {
return {
code,
data,
status
};
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
};
export function makeid(len) {
if (typeof len === 'undefined') {
len = 10
}
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < len; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
//*********************************************************************************
function getBlockFinishTimeInLocalStorage() {
return localStorage.getItem("blockFinishTime") || getCurrentTime();
}
function getCurrentTime() {
return Math.floor(new Date().getTime() / 1000);
}
export function getTimeLeftInLocalStorage() {
const blockFinishTime = getBlockFinishTimeInLocalStorage();
const timeNow = getCurrentTime();
const seconds = (blockFinishTime - timeNow) % 60;
let minutes = Math.floor((blockFinishTime - timeNow) / 60);
minutes %= 60;
const left = "Your identity has been locked. Try again in " + minutes + " minutes and " + seconds + " seconds.";
return left;
}
export function listIdentitiesFromLocalStorage() {
var serializedIdentitiesList = localStorage.getItem("identities");
var identities = JSON.parse(serializedIdentitiesList);
var identitiesResult = {};
for(var key in identities) {
var profile = JSON.parse(JSON.stringify(localStorage.getItem("profiles/" + key)));
if(profile != null && profile !== "") {
identitiesResult[key] = JSON.parse(profile)
} else {
identitiesResult[key] = {}
}
}
return identitiesResult
}
export function destroyIdentityFromLocalStorage(key) {
localStorage.removeItem(key);
localStorage.removeItem("profiles/" + key);
localStorage.removeItem("colors/" + key);
var serializedIdentitiesList = localStorage.getItem("identities");
var identities = JSON.parse(serializedIdentitiesList);
identities[key] = null;
delete identities[key];
localStorage.setItem("identities", JSON.stringify(identities))
}
export function failPincodeAttempt(password) {
let message = "Wrong pincode";
if (password !== '00000000') {
let attempt = localStorage.getItem("attempt") || 1;
attempt = parseInt(attempt);
if (attempt === 9) {
const identitiesTemp = listIdentitiesFromLocalStorage();
for (let i in identitiesTemp) {
destroyIdentityFromLocalStorage(i);
}
message = "9 failed attempts. Identity is revoked!";
localStorage.removeItem("attempt");
} else if (attempt % 3 === 0) {
const timeNow = getCurrentTime();
const blockFinishTime = timeNow + 300;
localStorage.setItem("blockFinishTime", blockFinishTime);
localStorage.setItem("attempt", attempt + 1);
message = "3 failed attempts. Identity is locked!";
} else {
localStorage.setItem("attempt", attempt + 1);
}
}
return message;
}
export function canTryPincode() {
const timeNow = getCurrentTime();
const blockFinishTime = getBlockFinishTimeInLocalStorage();
if (blockFinishTime <= timeNow) {
localStorage.removeItem("blockFinishTime");
return true;
} else {
return false;
}
}