Skip to content

Instantly share code, notes, and snippets.

@kphrx
Last active August 21, 2018 09:00
Show Gist options
  • Save kphrx/e9eaa7842b605b6b6b0e39c3dde9627c to your computer and use it in GitHub Desktop.
Save kphrx/e9eaa7842b605b6b6b0e39c3dde9627c to your computer and use it in GitHub Desktop.
TOTP_SECRETS="token1:<Base32EncodedToken1> token2:<Base32EncodedToken2>"
const OTPAuth = require('otpauth');
require('dotenv').config();
module.exports = function(issuer) {
let secrets = process.env.TOTP_SECRETS.split(' ')
, secretsDict = secrets.reduce((previous, current) => {
let secret = current.split(':');
previous[secret[0]] = secret[1];
return previous;
}, {})
, secret = secretsDict[issuer];
if (!secret) return;
let totp = new OTPAuth.TOTP({
secret: OTPAuth.Secret.fromB32(secret),
hmacAlgorithm: 'sha1'
});
return totp.generate();
}
#!/usr/bin/env node
'use strict';
const program = require("commander")
, otpCode = require("./lib/GetTotpToken.js")
, { version } = require('./package.json');
program
.version(version, '-v, --version')
.option('-n, --secret-name <n>','Want code\'s name')
.parse(process.argv);
if (program.secretName) {
console.log(otpCode(program.secretName));
return 0;
}
// $ ./index.js -n token1
// or
otpCode('token1'); // <Base32EncodedToken1> totp token
// $ ./index.js -n token2
// or
otpCode('token2'); // <Base32EncodedToken2> totp token
{
"name": "GetTotpToken.js",
"description": "",
"keywords": [],
"author": "kPherox <[email protected]> (https://www.kr-kp.com/)",
"license": "MIT",
"version": "1.0.0",
"main": "./index.js",
"private": true,
"dependencies": {
"base-64": "^0.1.0",
"commander": "^2.15.1",
"dotenv": "^5.0.1",
"otpauth": "^3.1.3"
}
}
@kphrx
Copy link
Author

kphrx commented Aug 21, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment