Files
notesnook/packages/core/api/mfa-manager.js

85 lines
1.8 KiB
JavaScript
Raw Normal View History

2022-03-11 22:49:24 +05:00
import http from "../utils/http";
import constants from "../utils/constants";
import TokenManager from "./token-manager";
const ENDPOINTS = {
setup: "/mfa/setup",
enable: "/mfa/enable",
disable: "/mfa/disable",
recoveryCodes: "/mfa/codes",
2022-03-11 22:49:24 +05:00
};
class MFAManager {
/**
*
* @param {import("../database/storage").default} storage
* @param {import("../api/index").default} db
*/
constructor(storage, db) {
this._storage = storage;
this._db = db;
this.tokenManager = new TokenManager(storage);
}
/**
*
* @param {"app" | "sms" | "email"} type
* @param {string} phoneNumber
* @returns
*/
async setup(type, phoneNumber = undefined) {
const token = await this.tokenManager.getAccessToken();
if (!token) return;
return await http.post(
`${constants.AUTH_HOST}${ENDPOINTS.setup}`,
{
type,
phoneNumber,
},
token
);
}
/**
*
* @param {"app" | "sms" | "email"} type
* @param {string} code
* @returns
*/
async enable(type, code) {
const token = await this.tokenManager.getAccessToken();
if (!token) return;
return await http.post(
`${constants.AUTH_HOST}${ENDPOINTS.enable}`,
{ type, code },
token
);
}
async disable() {
const token = await this.tokenManager.getAccessToken();
if (!token) return;
return await http.post(
`${constants.AUTH_HOST}${ENDPOINTS.disable}`,
null,
token
);
}
/**
* Generate new 2FA recovery codes or get count of valid recovery codes.
* @param {boolean} generate
* @returns
*/
2022-03-17 22:56:33 +05:00
async codes() {
const token = await this.tokenManager.getAccessToken();
if (!token) return;
return await http.get(
2022-03-17 22:56:33 +05:00
`${constants.AUTH_HOST}${ENDPOINTS.recoveryCodes}`,
token
);
}
2022-03-11 22:49:24 +05:00
}
export default MFAManager;