Compare commits

..

No commits in common. "8c92239aa404487e37e6faa053b35b0d60755807" and "21c7646c715318972878e6d0178e400c4944c465" have entirely different histories.

8 changed files with 47 additions and 74 deletions

View File

@ -6,7 +6,7 @@
"appType": "app", "appType": "app",
"version": { "version": {
"code": 1, "code": 1,
"name": "1.2.2" "name": "1.1.3"
}, },
"icon": "icon.png", "icon": "icon.png",
"vender": "zepp", "vender": "zepp",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

View File

@ -1,6 +1,6 @@
{ {
"name": "totpfit", "name": "totpfit",
"version": "1.2.2", "version": "1.1.3",
"description": "Another 2FAuthenticator based on TOTP for Zepp Amazfit GTS 4", "description": "Another 2FAuthenticator based on TOTP for Zepp Amazfit GTS 4",
"main": "app.js", "main": "app.js",
"author": "Lisoveliy", "author": "Lisoveliy",

View File

@ -23,15 +23,10 @@ Page(
}) })
.catch((x) => { .catch((x) => {
console.log(`Init failed: ${x}`); console.log(`Init failed: ${x}`);
try{
let localStorage = new LocalStorage(); let localStorage = new LocalStorage();
app._options.globalData.TOTPS = JSON.parse( app._options.globalData.TOTPS = JSON.parse(
localStorage.getItem("TOTPs", []) localStorage.getItem("TOTPs", null) ?? []
); );
}
catch{
app._options.globalData.TOTPS = [];
}
this.initPage(); this.initPage();
}); });
}, },

View File

@ -6,9 +6,9 @@ const otpauthScheme = "otpauth:/";
const googleMigrationScheme = "otpauth-migration:/"; const googleMigrationScheme = "otpauth-migration:/";
export function getTOTPByLink(link) { export function getTOTPByLink(link) {
if (link.includes(otpauthScheme)) if(link.includes(otpauthScheme))
return getByOtpauthScheme(link) return getByOtpauthScheme(link)
if (link.includes(googleMigrationScheme)) if(link.includes(googleMigrationScheme))
return getByGoogleMigrationScheme(link) return getByGoogleMigrationScheme(link)
return null; return null;
@ -21,7 +21,7 @@ function getHashType(algorithm) {
else return "SHA-1"; else return "SHA-1";
} }
function getByOtpauthScheme(link) { function getByOtpauthScheme(link){
try { try {
let args = link.split("/", otpauthScheme.length); let args = link.split("/", otpauthScheme.length);
let type = args[2]; //Returns 'hotp' or 'totp' let type = args[2]; //Returns 'hotp' or 'totp'
@ -33,14 +33,13 @@ function getByOtpauthScheme(link) {
let period = args[3].split("period=")[1]?.split("&")[0]; //Returns period let period = args[3].split("period=")[1]?.split("&")[0]; //Returns period
let digits = args[3].split("digits=")[1]?.split("&")[0]; //Returns digits let digits = args[3].split("digits=")[1]?.split("&")[0]; //Returns digits
let algorithm = args[3].split("algorithm=")[1]?.split("&")[0]; //Returns algorithm let algorithm = args[3].split("algorithm=")[1]?.split("&")[0]; //Returns algorithm
let offset = args[3].split("offset=")[1]?.split("&")[0] ?? 0; //Returns offset
if (type.toLowerCase() != "totp") if (type.toLowerCase() != "totp")
throw new Error("Type is not valid, requires 'TOTP'"); throw new Error("Type is not valid, requires 'TOTP'");
if (secret === undefined) throw new Error("Secret not defined"); if (secret === undefined) throw new Error("Secret not defined");
if (issuer == client) { if(issuer == client){
issuer = args[3].split("issuer=")[1]?.split("&")[0]; issuer = args[3].split("issuer=")[1]?.split("&")[0];
} }
@ -53,7 +52,7 @@ function getByOtpauthScheme(link) {
client, client,
digits, digits,
period, period,
Number(offset), 0,
getHashType(algorithm) getHashType(algorithm)
); );
} catch (err) { } catch (err) {
@ -62,46 +61,25 @@ function getByOtpauthScheme(link) {
} }
} }
function getByGoogleMigrationScheme(link) { function getByGoogleMigrationScheme(link){
let data = link.split("data=")[1]; //Returns base64 encoded data let data = link.split("data=")[1]; //Returns base64 encoded data
data = decodeURIComponent(data); data = decodeURIComponent(data);
let decode = base64decode(data); let decode = base64decode(data);
let proto = decodeProto(decode); let proto = decodeProto(decode);
let totps = [];
totps.push(new TOTP(
"",
data,
decode,
6,
30,
0,
"SHA-1"
));
totps.push(new TOTP(
"",
proto.leftOver,
proto.parts.length,
6,
30,
0,
"SHA-1"
));
let protoTotps = []; let protoTotps = [];
proto.parts.forEach(part => { proto.parts.forEach(part => {
if (part.type == TYPES.LENDELIM) { if(part.type == TYPES.LENDELIM){
protoTotps.push(decodeProto(part.value)); protoTotps.push(decodeProto(part.value));
} }
}); });
let totps = [];
protoTotps.forEach(x => { protoTotps.forEach(x => {
let type = x.parts.filter(x => x.index == 6)[0]; //find type of OTP let type = x.parts.filter(x => x.index == 6)[0]; //find type of OTP
if (type.value !== '2') { if(type.value !== '2'){
console.log("ERR: it's a not TOTP record") console.log("ERR: it's a not TOTP record")
return; return;
} }