Ты мой спаситель!!Модуль есть под nodejs для генерации 2fa
https://github.com/DoctorMcKay/node-steam-totp
¯\_(ツ)_/¯ На гитхабе есть почти всё.Ты мой спаситель!!
Сам искал недавно, а тут такой подгон))))
Ну и на этом --Ссылка удалена--Модуль есть под nodejs для генерации 2fa
https://github.com/DoctorMcKay/node-steam-totp
¯\_(ツ)_/¯ На гитхабе есть почти всё.
А http сервер для каких целей?ба, думал, что это просто модуль к BASу, а тут такое ...
---------Двойное сообщение соединено: ---------
Ну и на этом --Ссылка удалена--
---------Двойное сообщение соединено: ---------
Посмотреть вложение 118763
В чем я косячу? :с
Встроенные языки -> Node.js -> Выполнить код:А он не нужен?![]()
var SteamTotp = require('steam-totp');
[[CODE]] = SteamTotp.generateAuthCode('shared_secret');
Встроенные языки -> Node.js -> Выполнить код:
Код запишется в переменную CODEКод:var SteamTotp = require('steam-totp'); [[CODE]] = SteamTotp.generateAuthCode('shared_secret');
можешь по идее просто закинуть нужные функции без этого модуля, если через него не пашет, и вызывать их
function bufferizeSecret(secret) {
if (typeof secret === 'string') {
if (secret.match(/[0-9a-f]{40}/i)) {
return Buffer.from(secret, 'hex');
} else if (secret.length === 28) {
return Buffer.from(secret, 'base64');
} throw new Error('Wrong Secret Given');
} throw new Error('Wrong Secret Given');
}
function bufferToOTP(fullcode) {
const chars = '23456789BCDFGHJKMNPQRTVWXY';
let otp = '';
for (let i = 0; i < 5; i++) {
otp += chars.charAt(fullcode % chars.length);
fullcode /= chars.length;
}
return otp;
}
let getAuthCode = secret => {
secret = bufferizeSecret(secret);
const Crypto = require('crypto');
let time = Math.floor((Date.now() / 1000));
let buffer = Buffer.allocUnsafe(8);
let hmac = Crypto.createHmac('sha1', secret);
buffer.writeUInt32BE(0, 0);
buffer.writeUInt32BE(Math.floor(time / 30), 4);
hmac = hmac.update(buffer).digest();
let start = hmac[19] & 0x0F;
hmac = hmac.slice(start, start + 4);
return bufferToOTP(hmac.readUInt32BE(0) & 0x7FFFFFFF);
};
let code = getAuthCode('shared_secret')
Ну короче так