otp-code-generator-and-validator
Version:
Generate and validate time-based OTP (one time password) for multifactor authentication.
129 lines (92 loc) • 3.35 kB
Markdown
# otp-code-generator-and-validator
Generate and validate time-based OTP (one time password) for multifactor authentication.
## Install
```
$ npm install otp-code-generator-and-validator
```
## Usage
## Generate Secret
```javascript
import {generateSecret} from "otp-code-generator-and-validator";
let secret = generateSecret();
console.log(secret); // IGJZFST44NAHVVXT
```
### generateSecret()
- Returns: \<string> 16 character setup key.
## Generate Token
```javascript
import {generateTOTP} from "otp-code-generator-and-validator";
let tokens = {
previous: generateTOTP({
secret: secret,
now: Date.now() - 30000
}),
current: generateTOTP({
secret: secret
}),
next: generateTOTP({
secret: secret,
now: Date.now() + 30000
})
}
console.log(tokens); // {previous: "608121", current: "394406", next: "714744"}
```
### generateTOTP({secret, now?, timeStep?})
- `secret` \<string> 16 character setup key.
- `now` [optional] \<number> Token creation time in Unix format. **Default:** `Date.now()`.
- `timeStep` [optional] \<number> Token change time in seconds. **Default:** `30`.
- Returns: \<number> 6 digit token.
## Verify Token
```javascript
import {verifyTOTP} from "otp-code-generator-and-validator";
let verify = verifyTOTP({
secret: secret,
token: tokens.current
});
console.log(verify); // true | false
```
### verifyTOTP({secret, token, now?, timeStep?})
- `secret` \<string> 16 character setup key.
- `token` \<number> 6 digit token.
- `now` [optional] \<number> Token creation time in Unix format. **Default:** `Date.now()`.
- `timeStep` [optional] \<number> Token change time in seconds. **Default:** `30`.
- Returns: \<boolean> true | false.
## Generate URL
```javascript
import {generateKeyUri} from "otp-code-generator-and-validator";
let url = generateKeyUri({
secret: secret,
account: "Account Name"
});
console.log(url); // otpauth://totp/Account%20Name?secret=IGJZFST44NAHVVXT&algorithm=SHA1&digits=6&period=30
```
### generateKeyUri({secret, account, app?, timeStep?})
- `secret` \<string> 16 character setup key.
- `account` \<string> User account name.
- `app` [optional] \<string> The name of the application that adds verification. **Default:** `null`.
- `timeStep` [optional] \<number> Token change time in seconds. **Default:** `30`.
- Returns: \<string> A link that can be opened by authentication apps.
## Generate QR Code
```javascript
import {generateQRCode} from "otp-code-generator-and-validator";
let code = await generateQRCode({
text: url
});
console.log(code); // data:image/png;base64,iVBORw0KGg...0lAlwyn0==
```
### async generateQRCode({text, options?})
- `text` \<string> Text that will be encoded in QR code.
- `options` [optional] [\<QRCodeToDataURLOptions>](https://www.npmjs.com/package/qrcode#qr-code-options)
See [QR Code options](https://www.npmjs.com/package/qrcode#qr-code-options). **Default:**
```json
{
"errorCorrectionLevel": "medium",
"type": "image/png",
"width": 500,
"color": {
"dark": "#000000",
"light": "#ffffff"
}
}
```
- Returns: Promise\<string> Data URI containing a representation of the QR Code image.