@tapni/auth 0.0.169 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/assets/Account-CElX1bG1.js +1 -0
  2. package/dist/assets/Apps-B-GkviQb.css +1 -0
  3. package/dist/assets/Apps-DH6XpQ6k.js +1 -0
  4. package/dist/assets/CustomApp-D-PMGrCn.js +1 -0
  5. package/dist/assets/CustomApp-x1ZBgKin.css +1 -0
  6. package/dist/assets/General-BD2qnORR.js +1 -0
  7. package/dist/assets/General-OSR9oXHj.css +1 -0
  8. package/dist/assets/Inter-ZO3WBJgw.ttf +0 -0
  9. package/dist/assets/QR-CpmQl6vr.js +1 -0
  10. package/dist/assets/fontawesome-webfont-CQDK8MU3.ttf +0 -0
  11. package/dist/assets/fontawesome-webfont-DXgy9qkh.svg +2671 -0
  12. package/dist/assets/fontawesome-webfont-G5YE5S7X.eot +0 -0
  13. package/dist/assets/index-CNOQuLc_.css +1 -0
  14. package/dist/assets/index-DXEfDC45.js +176 -0
  15. package/dist/assets/web-1uupGAU9.js +5 -0
  16. package/dist/assets/web-BMHaq5cV.js +1 -0
  17. package/dist/assets/web-CvQGphDR.js +1 -0
  18. package/dist/assets/web-DMittTOZ.js +1 -0
  19. package/dist/assets/web-DhQdITWf.js +1 -0
  20. package/dist/assets/web-EiIhTtxC.js +1 -0
  21. package/dist/assets/web-OwpPF4YF.js +1 -0
  22. package/dist/index.css +193 -0
  23. package/dist/index.html +36 -0
  24. package/package.json +3 -3
  25. package/src/App.vue +6 -20
  26. package/src/components/{Language.vue → DELETE_Language.vue} +1 -1
  27. package/src/components/{ModalOverlay.vue → DELETE_ModalOverlay.vue} +2 -2
  28. package/src/components/{OTP.vue → DELETE_OTP.vue} +3 -3
  29. package/src/main.js +1 -0
  30. package/src/mixins/DELETE_mfa-auth.mixin.js +53 -0
  31. package/src/mixins/auth.mixin.js +8 -1
  32. package/src/mixins/global.mixin.js +7 -0
  33. package/src/routes.js +27 -15
  34. package/src/store/auth.js +7 -1
  35. package/src/store/constants.js +2 -6
  36. package/src/store/locales/en.js +28 -3
  37. package/src/views/Account.vue +72 -110
  38. package/src/views/Apps.vue +106 -0
  39. package/src/views/CustomApp.vue +106 -0
  40. package/src/views/General.vue +192 -0
  41. package/src/views/Login.vue +27 -10
  42. package/src/views/QR.vue +1 -1
  43. package/src/views/Security.vue +322 -0
  44. package/src/views/Welcome.vue +10 -4
  45. package/dist/.vite/manifest.json +0 -58
  46. package/dist/Account-ja1hZJy5.js +0 -113
  47. package/dist/QR-ybXT1KGe.js +0 -41
  48. package/dist/TapniAuth.es.js +0 -4
  49. package/dist/TapniAuth.umd.js +0 -141
  50. package/dist/install-4aK3Wz63.js +0 -18458
  51. package/dist/style.css +0 -1
  52. package/dist/web-5VtGcKeU.js +0 -86
  53. package/dist/web-AImUTDQQ.js +0 -54
  54. package/dist/web-L3jORB19.js +0 -92
  55. package/dist/web-NrPZl3qD.js +0 -124
  56. package/src/mixins/mfa-auth.mixin.js +0 -76
  57. package/src/views/MFA.vue +0 -117
  58. /package/src/components/{LinkIcon.vue → DELETE_LinkIcon.vue} +0 -0
package/dist/style.css DELETED
@@ -1 +0,0 @@
1
- .app-store-icon[data-v-615ed484]{box-shadow:0 4px 10px #00000017;border-radius:12px}#codeInput[data-v-89d98ef3],#emailInput[data-v-89d98ef3],#emailInput[data-v-69a9cfa3]{text-align:center;padding-right:15%;font-size:17px}.fade-enter-to[data-v-17c95816]{opacity:1}.sso-img[data-v-11f19a09]{margin:2px auto 0;width:35px}input[data-v-11f19a09]{margin:0 auto;height:25px}.sso-img[data-v-4f821f65]{margin:2px auto 0;width:35px}input[data-v-4f821f65]{margin:0 auto;height:25px}.link-grid,.user-link-img{width:100%;display:inline-table;position:relative}.link-grid{width:30%;margin:1.6%;padding:1.6%}.link-grid .user-link-img img{border-radius:25%!important}.link-grid .edit-icon{border-radius:20px;right:-3%;top:-3%;position:absolute;z-index:3;max-width:23%;overflow:hidden;min-width:30px}.link-grid .direct-icon{border-radius:20px;left:-3%;top:-3%;position:absolute;z-index:555;max-width:23%;overflow:hidden;min-width:30px}.link-grid .link-text{min-height:20px;margin-top:3px!important;display:block;text-align:center;line-height:normal;overflow-wrap:anywhere}.link-list{width:93%;max-height:67px!important;margin:0 auto;display:flex;border-radius:15px!important;background-color:#fff;border:solid 1px #e8e8e8;position:relative;align-items:center}.link-list .user-link-img{display:inline-block;width:65px;border-radius:25%!important}.link-list .link-text{display:inline-block;padding:18px 0% 17px 10%;font-size:15px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1;text-align:left;border-radius:15px!important}.link-list .edit-icon{border-radius:20px;right:7%;top:30%;position:absolute;z-index:3;width:26px;overflow:hidden}.link-list .switching{width:45px}.link-list .direct-icon{border-radius:20px;left:-2%;top:-13%;position:absolute;z-index:555;width:26px;overflow:hidden}.small{width:22%!important;margin:2% 4% 0%;padding:0%}.small .link-text{margin-top:0!important;font-size:13px}.linkExternal{margin-right:20px;width:20px;display:inline-block!important;height:20px;background:#000;-webkit-mask:url(https://cdn.tapni.co/icons/link-external.svg) no-repeat center;mask:url(https://cdn.tapni.co/icons/link-external.svg) no-repeat center;transform:scale(1.5)}.user-img[data-v-7477a961]{margin:2px auto 0;width:65px}input[data-v-7477a961]{margin:0 auto;height:25px}html *{font-family:Inter,sans-serif}#bodyId{padding-top:3%;max-width:667px!important;margin:1.5% auto auto;height:95%!important;border-radius:20px}.action-block-top .default-text,.action-block-top .default-text:after{border-radius:50%;width:10em!important;height:10em!important}.action-block-top .default-text{margin:10px auto;font-size:3px;position:relative;text-indent:-9999em;border-left:.5em solid #000000;border-top:.5em solid rgba(0,0,0,.2);border-right:.5em solid rgba(0,0,0,.2);border-bottom:.5em solid rgba(0,0,0,.2);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.smartbanner-ios{background:linear-gradient(to bottom,#f4f4f4,#f4f4f4);box-shadow:0 0 #fff;border-bottom:1px solid #dddddd}.smartbanner-icon{border-radius:16px}.smartbanner-ios .smartbanner-button{font-size:13px;padding:9px 0;height:40px;border-radius:13px;background:#f4f4f4;color:#0a99d2;border:none;box-shadow:none;text-transform:uppercase}.snack-body{display:none;border-radius:40px;font-size:15px!important}#errorSnack{background-color:#fee3e3!important;border:2px solid #edd9d9!important;color:#000}#successSnack{background-color:#eff5eb!important;border:2px solid #e3ecd7!important;color:#000}.grecaptcha-badge{visibility:hidden}.header-logo{position:absolute;left:50%;transform:translate(-50%,-50%);margin-top:0;z-index:2}.header-logo-img{height:40px;margin-top:10px}.container[data-v-992c1e64]{padding:20px 20px 100px!important;display:flex;flex-direction:column;gap:20px}.settingsCard[data-v-992c1e64]{background-color:#fff;padding:20px;border-radius:26px;align-items:center}.device[data-v-992c1e64]{display:flex;align-items:center}h4[data-v-992c1e64]{margin-left:20px;font-weight:700}.middle[data-v-992c1e64]{flex:1}.left img[data-v-992c1e64]{background-color:#f7f8f9;border-radius:20px;padding:10px}.divider[data-v-992c1e64]{height:1px;background-color:#f0f0f0;margin:20px 0}.moreFooter[data-v-992c1e64]{display:flex;align-items:center;justify-content:space-between;padding:0 10px}
@@ -1,86 +0,0 @@
1
- import { WebPlugin as c } from "@capacitor/core";
2
- class g extends c {
3
- constructor() {
4
- super();
5
- }
6
- loadScript() {
7
- if (typeof document > "u")
8
- return;
9
- const e = "gapi";
10
- if (document == null ? void 0 : document.getElementById(e))
11
- return;
12
- const n = document.getElementsByTagName("head")[0], t = document.createElement("script");
13
- t.type = "text/javascript", t.defer = !0, t.async = !0, t.id = e, t.onload = this.platformJsLoaded.bind(this), t.src = "https://apis.google.com/js/platform.js", n.appendChild(t);
14
- }
15
- initialize(e = {
16
- clientId: "",
17
- scopes: [],
18
- grantOfflineAccess: !1
19
- }) {
20
- var s, n;
21
- if (typeof window > "u")
22
- return;
23
- const t = (s = document.getElementsByName("google-signin-client_id")[0]) === null || s === void 0 ? void 0 : s.content, i = e.clientId || t || "";
24
- i || console.warn("GoogleAuthPlugin - clientId is empty"), this.options = {
25
- clientId: i,
26
- grantOfflineAccess: (n = e.grantOfflineAccess) !== null && n !== void 0 ? n : !1,
27
- scopes: e.scopes || []
28
- }, this.gapiLoaded = new Promise((o) => {
29
- window.gapiResolve = o, this.loadScript();
30
- }), this.addUserChangeListener();
31
- }
32
- platformJsLoaded() {
33
- gapi.load("auth2", () => {
34
- const e = {
35
- client_id: this.options.clientId,
36
- plugin_name: "CodetrixStudioCapacitorGoogleAuth"
37
- };
38
- this.options.scopes.length && (e.scope = this.options.scopes.join(" ")), gapi.auth2.init(e), window.gapiResolve();
39
- });
40
- }
41
- async signIn() {
42
- return new Promise(async (e, s) => {
43
- var n;
44
- try {
45
- let t;
46
- const i = (n = this.options.grantOfflineAccess) !== null && n !== void 0 ? n : !1;
47
- i ? t = (await gapi.auth2.getAuthInstance().grantOfflineAccess()).code : await gapi.auth2.getAuthInstance().signIn();
48
- const o = gapi.auth2.getAuthInstance().currentUser.get();
49
- i && await o.reloadAuthResponse();
50
- const a = this.getUserFrom(o);
51
- a.serverAuthCode = t, e(a);
52
- } catch (t) {
53
- s(t);
54
- }
55
- });
56
- }
57
- async refresh() {
58
- const e = await gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse();
59
- return {
60
- accessToken: e.access_token,
61
- idToken: e.id_token,
62
- refreshToken: ""
63
- };
64
- }
65
- async signOut() {
66
- return gapi.auth2.getAuthInstance().signOut();
67
- }
68
- async addUserChangeListener() {
69
- await this.gapiLoaded, gapi.auth2.getAuthInstance().currentUser.listen((e) => {
70
- this.notifyListeners("userChange", e.isSignedIn() ? this.getUserFrom(e) : null);
71
- });
72
- }
73
- getUserFrom(e) {
74
- const s = {}, n = e.getBasicProfile();
75
- s.email = n.getEmail(), s.familyName = n.getFamilyName(), s.givenName = n.getGivenName(), s.id = n.getId(), s.imageUrl = n.getImageUrl(), s.name = n.getName();
76
- const t = e.getAuthResponse(!0);
77
- return s.authentication = {
78
- accessToken: t.access_token,
79
- idToken: t.id_token,
80
- refreshToken: ""
81
- }, s;
82
- }
83
- }
84
- export {
85
- g as GoogleAuthWeb
86
- };
@@ -1,54 +0,0 @@
1
- import { WebPlugin as p } from "@capacitor/core";
2
- class f extends p {
3
- constructor() {
4
- super(...arguments), this.group = "CapacitorStorage";
5
- }
6
- async configure({ group: e }) {
7
- typeof e == "string" && (this.group = e);
8
- }
9
- async get(e) {
10
- return { value: this.impl.getItem(this.applyPrefix(e.key)) };
11
- }
12
- async set(e) {
13
- this.impl.setItem(this.applyPrefix(e.key), e.value);
14
- }
15
- async remove(e) {
16
- this.impl.removeItem(this.applyPrefix(e.key));
17
- }
18
- async keys() {
19
- return { keys: this.rawKeys().map((t) => t.substring(this.prefix.length)) };
20
- }
21
- async clear() {
22
- for (const e of this.rawKeys())
23
- this.impl.removeItem(e);
24
- }
25
- async migrate() {
26
- var e;
27
- const t = [], s = [], n = "_cap_", o = Object.keys(this.impl).filter((i) => i.indexOf(n) === 0);
28
- for (const i of o) {
29
- const r = i.substring(n.length), a = (e = this.impl.getItem(i)) !== null && e !== void 0 ? e : "", { value: l } = await this.get({ key: r });
30
- typeof l == "string" ? s.push(r) : (await this.set({ key: r, value: a }), t.push(r));
31
- }
32
- return { migrated: t, existing: s };
33
- }
34
- async removeOld() {
35
- const e = "_cap_", t = Object.keys(this.impl).filter((s) => s.indexOf(e) === 0);
36
- for (const s of t)
37
- this.impl.removeItem(s);
38
- }
39
- get impl() {
40
- return window.localStorage;
41
- }
42
- get prefix() {
43
- return this.group === "NativeStorage" ? "" : `${this.group}.`;
44
- }
45
- rawKeys() {
46
- return Object.keys(this.impl).filter((e) => e.indexOf(this.prefix) === 0);
47
- }
48
- applyPrefix(e) {
49
- return this.prefix + e;
50
- }
51
- }
52
- export {
53
- f as PreferencesWeb
54
- };
@@ -1,92 +0,0 @@
1
- import { WebPlugin as i } from "@capacitor/core";
2
- class u extends i {
3
- async initialize(e) {
4
- const n = { version: "v17.0" };
5
- return await this.loadScript(e.locale), FB.init(Object.assign(Object.assign({}, n), e));
6
- }
7
- loadScript(e) {
8
- if (typeof document > "u")
9
- return Promise.reject("document global not found");
10
- const n = "fb";
11
- if (document.getElementById(n))
12
- return Promise.resolve();
13
- const r = document.getElementsByTagName("head")[0], s = document.createElement("script");
14
- return new Promise((o) => {
15
- s.onload = () => o(), s.defer = !0, s.async = !0, s.id = n, s.src = `https://connect.facebook.net/${e ?? "en_US"}/sdk.js`, r.appendChild(s);
16
- });
17
- }
18
- async login(e) {
19
- return new Promise((n, t) => {
20
- FB.login((r) => {
21
- r.status === "connected" ? n({
22
- accessToken: {
23
- token: r.authResponse.accessToken
24
- }
25
- }) : t({
26
- accessToken: {
27
- token: null
28
- }
29
- });
30
- }, { scope: e.permissions.join(",") });
31
- });
32
- }
33
- async logout() {
34
- return new Promise((e) => FB.logout(() => e()));
35
- }
36
- async reauthorize() {
37
- return new Promise((e) => FB.reauthorize((n) => e(n)));
38
- }
39
- async getCurrentAccessToken() {
40
- return new Promise((e, n) => {
41
- FB.getLoginStatus((t) => {
42
- if (t.status === "connected") {
43
- const r = {
44
- accessToken: {
45
- applicationId: void 0,
46
- declinedPermissions: [],
47
- expires: void 0,
48
- isExpired: void 0,
49
- lastRefresh: void 0,
50
- permissions: [],
51
- token: t.authResponse.accessToken,
52
- userId: t.authResponse.userID
53
- }
54
- };
55
- e(r);
56
- } else
57
- n({
58
- accessToken: {
59
- token: null
60
- }
61
- });
62
- });
63
- });
64
- }
65
- async getProfile(e) {
66
- const n = e.fields.join(",");
67
- return new Promise((t, r) => {
68
- FB.api("/me", { fields: n }, (s) => {
69
- if (s.error) {
70
- r(s.error.message);
71
- return;
72
- }
73
- t(s);
74
- });
75
- });
76
- }
77
- async logEvent() {
78
- return Promise.resolve();
79
- }
80
- async setAutoLogAppEventsEnabled() {
81
- return Promise.resolve();
82
- }
83
- async setAdvertiserTrackingEnabled() {
84
- return Promise.resolve();
85
- }
86
- async setAdvertiserIDCollectionEnabled() {
87
- return Promise.resolve();
88
- }
89
- }
90
- export {
91
- u as FacebookLoginWeb
92
- };
@@ -1,124 +0,0 @@
1
- import { WebPlugin as j } from "@capacitor/core";
2
- var w = { exports: {} };
3
- /*!
4
- * $script.js JS loader & dependency manager
5
- * https://github.com/ded/script.js
6
- * (c) Dustin Diaz 2014 | License MIT
7
- */
8
- (function(y) {
9
- (function(i, p) {
10
- y.exports ? y.exports = p() : this[i] = p();
11
- })("$script", function() {
12
- var i = document, p = i.getElementsByTagName("head")[0], I = !1, m = "push", S = "readyState", A = "onreadystatechange", s = {}, o = {}, d = {}, f, v;
13
- function g(e, t) {
14
- for (var n = 0, u = e.length; n < u; ++n)
15
- if (!t(e[n]))
16
- return I;
17
- return 1;
18
- }
19
- function h(e, t) {
20
- g(e, function(n) {
21
- return t(n), 1;
22
- });
23
- }
24
- function l(e, t, n) {
25
- e = e[m] ? e : [e];
26
- var u = t && t.call, r = u ? t : n, N = u ? e.join("") : t, U = e.length;
27
- function b(c) {
28
- return c.call ? c() : s[c];
29
- }
30
- function _() {
31
- if (!--U) {
32
- s[N] = 1, r && r();
33
- for (var c in o)
34
- g(c.split("|"), b) && !h(o[c], b) && (o[c] = []);
35
- }
36
- }
37
- return setTimeout(function() {
38
- h(e, function c(a, W) {
39
- if (a === null)
40
- return _();
41
- if (!W && !/^https?:\/\//.test(a) && f && (a = a.indexOf(".js") === -1 ? f + a + ".js" : f + a), d[a])
42
- return d[a] == 2 ? _() : setTimeout(function() {
43
- c(a, !0);
44
- }, 0);
45
- d[a] = 1, x(a, _);
46
- });
47
- }, 0), l;
48
- }
49
- function x(e, t) {
50
- var n = i.createElement("script"), u;
51
- n.onload = n.onerror = n[A] = function() {
52
- n[S] && !/^c|loade/.test(n[S]) || u || (n.onload = n[A] = null, u = 1, d[e] = 2, t());
53
- }, n.async = 1, n.src = v ? e + (e.indexOf("?") === -1 ? "?" : "&") + v : e, p.insertBefore(n, p.lastChild);
54
- }
55
- return l.get = x, l.order = function(e, t, n) {
56
- (function u(r) {
57
- r = e.shift(), e.length ? l(r, u) : l(r, t, n);
58
- })();
59
- }, l.path = function(e) {
60
- f = e;
61
- }, l.urlArgs = function(e) {
62
- v = e;
63
- }, l.ready = function(e, t, n) {
64
- e = e[m] ? e : [e];
65
- var u = [];
66
- return !h(e, function(r) {
67
- s[r] || u[m](r);
68
- }) && g(e, function(r) {
69
- return s[r];
70
- }) ? t() : function(r) {
71
- o[r] = o[r] || [], o[r][m](t), n && n(u);
72
- }(e.join("|")), l;
73
- }, l.done = function(e) {
74
- l([null], e);
75
- }, l;
76
- });
77
- })(w);
78
- var z = w.exports;
79
- class P extends j {
80
- constructor() {
81
- super({
82
- name: "SignInWithApple",
83
- platforms: ["web"]
84
- }), this.appleScriptUrl = "https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js", this.isAppleScriptLoaded = !1;
85
- }
86
- async authorize(i) {
87
- return new Promise((p, I) => {
88
- i ? this.loadSignInWithAppleJS().then((m) => {
89
- var S, A, s;
90
- this.isAppleScriptLoaded = m, this.isAppleScriptLoaded ? (AppleID.auth.init({
91
- clientId: i.clientId,
92
- redirectURI: i.redirectURI,
93
- scope: (S = i.scopes) !== null && S !== void 0 ? S : void 0,
94
- state: (A = i.state) !== null && A !== void 0 ? A : void 0,
95
- nonce: (s = i.nonce) !== null && s !== void 0 ? s : void 0,
96
- usePopup: !0
97
- }), AppleID.auth.signIn().then((o) => {
98
- var d, f, v, g, h;
99
- const l = {
100
- response: {
101
- user: null,
102
- email: (d = o.user) === null || d === void 0 ? void 0 : d.email,
103
- givenName: (v = (f = o.user) === null || f === void 0 ? void 0 : f.name) === null || v === void 0 ? void 0 : v.firstName,
104
- familyName: (h = (g = o.user) === null || g === void 0 ? void 0 : g.name) === null || h === void 0 ? void 0 : h.lastName,
105
- identityToken: o.authorization.id_token,
106
- authorizationCode: o.authorization.code
107
- }
108
- };
109
- p(l);
110
- }).catch((o) => {
111
- I(o);
112
- })) : I("Unable to load Sign in with Apple JS framework.");
113
- }) : I("No options were provided.");
114
- });
115
- }
116
- loadSignInWithAppleJS() {
117
- return new Promise((i) => {
118
- this.isAppleScriptLoaded ? i(!0) : typeof window !== void 0 ? z.get(this.appleScriptUrl, () => i(!0)) : i(!1);
119
- });
120
- }
121
- }
122
- export {
123
- P as SignInWithAppleWeb
124
- };
@@ -1,76 +0,0 @@
1
- import QRCodeStyling from "qr-code-styling";
2
- import { authenticator } from "@otplib/preset-browser";
3
- import {EventBus} from "@/store/event-bus.js";
4
-
5
- export default {
6
- data () {
7
- return {
8
- otpToken: null,
9
- otpSecret: null,
10
- mfaEnable: false,
11
- qrCodeHash: null,
12
- qrCodeRefreshInterval: null,
13
- poolingInterval: null,
14
- loading: false,
15
- }
16
- },
17
- props: {
18
- isModal: {
19
- type: Boolean,
20
- required: false,
21
- default: false,
22
- },
23
- },
24
- computed: {
25
- promptMFA () {
26
- return false;
27
- }
28
- },
29
- async mounted () {
30
- if (this.renderView === 'AuthMFA') {
31
- await this.getAccountSettings();
32
- this.generateOTPQrCode();
33
- }
34
-
35
- EventBus.$on('otpSubmitted', this.otpSubmitted)
36
- },
37
- methods: {
38
- otpSubmitted(code) {
39
- this.otpToken = code;
40
-
41
- // Assuming that the parent component had a method called submit
42
- this.submit();
43
- },
44
- generateOTPQrCode() {
45
- const user = this.account.email;
46
-
47
- if (this.account.mfaEnabled) {
48
- this.mfaEnable = true;
49
- } else {
50
- const service = "Tapni";
51
-
52
- const secret = authenticator.generateSecret();
53
- this.otpSecret = secret;
54
-
55
- const otpQR = authenticator.keyuri(user, service, secret);
56
-
57
- const otpQrCode = new QRCodeStyling({
58
- width: 200,
59
- height: 200,
60
- data: otpQR,
61
- });
62
- otpQrCode.append(document.getElementById("qrCodeContainer"));
63
- }
64
- },
65
- async cancelMFA() {
66
- if (import.meta.env.VITE_APP_MODE === 'npm') {
67
- EventBus.$emit('ssoEvent', {name: 'mfaCancel', data: true})
68
- } else {
69
- this.$router.push('/account');
70
- }
71
- },
72
- async validateMFA() {
73
- EventBus.$emit('toggleOTPModal', true);
74
- },
75
- }
76
- }
package/src/views/MFA.vue DELETED
@@ -1,117 +0,0 @@
1
- <template>
2
- <div class="page-login content-boxed content-boxed-padding">
3
- <a v-if="isModal" @click="close" class="color-black pull-right pointer" style="margin-top: 0px; position: absolute; right: -20px; text-align: right;">
4
- <i class="font-17 color-black">
5
- <img src="https://cdn.tapni.co/icons/down-arrow.png" class="responsive-image" style="width: 35%;"/>
6
- </i>
7
- </a>
8
- <h4 style="text-align: center; width: 80%; margin: 0 auto; margin-top: 50px;">
9
- 2-Step Verification
10
- </h4>
11
- <br>
12
-
13
- <div class="qrCodeLoginContainer center-text">
14
-
15
- <div>
16
- Enable Multi-Factor Authentication
17
- <div class="ios-switch" style="display: inline-block;float: right">
18
- <input
19
- v-model="mfaEnable"
20
- type="checkbox"
21
- name="ios-switch"
22
- class="ios-switch-checkbox"
23
- :id="'mfa-open-switch'"
24
- />
25
- <label class="ios-switch-label" :for="'mfa-open-switch'"></label>
26
- </div>
27
- </div>
28
- <br>
29
- <div v-show="mfaEnable && !account.mfaEnabled" style="text-align: center;">
30
- <div id="qrCodeContainer"
31
- class="qrCodeRounded"
32
- style="max-width: 100%;"/>
33
- <br>
34
- <p class="bold pointer font-16 underline" @click="copy(otpSecret)"> {{ otpSecret }}</p>
35
- <br>
36
- <br>
37
- <div style="margin: 0 auto; width: 85%; text-align: center;">
38
- <h5 class="">Scan the QR code above or enter the secret key into your authenticator app.</h5>
39
- <br>
40
- </div>
41
- </div>
42
- <form @submit.prevent="validateMFA" v-if="account.mfaEnabled !== mfaEnable">
43
- <button
44
- type="submit"
45
- class="button black-button google-button bg-tapni-grey button-90 button-center uppercase bold full-top pointer"
46
- >
47
- <span v-if="!loading">{{ ssoLang[appLanguage].continue }}</span>
48
- <span v-else class="button--loading button__loader"></span>
49
- </button>
50
- <a href="javascript:;" @click="cancelMFA">Cancel</a>
51
- </form>
52
- <div v-else style="margin: 0 auto; width: 100%; text-align: center;">
53
- <div>
54
- <h5 v-if="mfaEnable" class="">
55
- Your account is protected via <br> multi-factor authentication (MFA) ✅
56
- </h5>
57
- <h5 v-else class="">Protect your account from unauthorized access by enabling multi-factor authentication (MFA)</h5>
58
-
59
- <a class="half-top" href="javascript:;" @click="cancelMFA">Go Back to Account Settings</a>
60
- </div>
61
- </div>
62
- </div>
63
- </div>
64
- </template>
65
-
66
-
67
- <script>
68
- import MFAAuthMixin from "../mixins/mfa-auth.mixin";
69
- import AuthMixin from "../mixins/auth.mixin";
70
- import AuthService from '../services/AuthService'
71
- import to from "await-to-js";
72
- import {EventBus} from "@/store/event-bus.js";
73
-
74
- export default {
75
- name: "AuthMFA",
76
- mixins: [AuthMixin, MFAAuthMixin],
77
- props: {
78
- payload: {
79
- type: Object,
80
- default: {}
81
- },
82
- },
83
- mounted() {
84
- if (!this.isLoggedIn) this.$router.push('/login');
85
- },
86
- methods: {
87
- close () {
88
- EventBus.$emit('ssoEvent', {name: 'toggleAuthModal', data: true})
89
- },
90
- async submit() {
91
- let data = {
92
- otpToken: this.otpToken,
93
- otpSecret: this.otpSecret,
94
- enable: this.mfaEnable,
95
- };
96
-
97
- if (!this.mfaEnable) {
98
- delete data.otpSecret;
99
- }
100
-
101
- this.loading = true;
102
- const [err, response] = await to(AuthService.setMfa(data, this.$storex))
103
- this.loading = false;
104
- if (err) {
105
- EventBus.$emit('ssoEvent', {name: 'setLoading', data: false})
106
- return this.errorHandler(err)
107
- }
108
- if (response.data.success) {
109
- this.getAccountSettings();
110
- this.successSnack(response.data.message);
111
- }
112
- },
113
- }
114
- };
115
- </script>
116
-
117
- <style scoped></style>