@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.
- package/dist/assets/Account-CElX1bG1.js +1 -0
- package/dist/assets/Apps-B-GkviQb.css +1 -0
- package/dist/assets/Apps-DH6XpQ6k.js +1 -0
- package/dist/assets/CustomApp-D-PMGrCn.js +1 -0
- package/dist/assets/CustomApp-x1ZBgKin.css +1 -0
- package/dist/assets/General-BD2qnORR.js +1 -0
- package/dist/assets/General-OSR9oXHj.css +1 -0
- package/dist/assets/Inter-ZO3WBJgw.ttf +0 -0
- package/dist/assets/QR-CpmQl6vr.js +1 -0
- package/dist/assets/fontawesome-webfont-CQDK8MU3.ttf +0 -0
- package/dist/assets/fontawesome-webfont-DXgy9qkh.svg +2671 -0
- package/dist/assets/fontawesome-webfont-G5YE5S7X.eot +0 -0
- package/dist/assets/index-CNOQuLc_.css +1 -0
- package/dist/assets/index-DXEfDC45.js +176 -0
- package/dist/assets/web-1uupGAU9.js +5 -0
- package/dist/assets/web-BMHaq5cV.js +1 -0
- package/dist/assets/web-CvQGphDR.js +1 -0
- package/dist/assets/web-DMittTOZ.js +1 -0
- package/dist/assets/web-DhQdITWf.js +1 -0
- package/dist/assets/web-EiIhTtxC.js +1 -0
- package/dist/assets/web-OwpPF4YF.js +1 -0
- package/dist/index.css +193 -0
- package/dist/index.html +36 -0
- package/package.json +3 -3
- package/src/App.vue +6 -20
- package/src/components/{Language.vue → DELETE_Language.vue} +1 -1
- package/src/components/{ModalOverlay.vue → DELETE_ModalOverlay.vue} +2 -2
- package/src/components/{OTP.vue → DELETE_OTP.vue} +3 -3
- package/src/main.js +1 -0
- package/src/mixins/DELETE_mfa-auth.mixin.js +53 -0
- package/src/mixins/auth.mixin.js +8 -1
- package/src/mixins/global.mixin.js +7 -0
- package/src/routes.js +27 -15
- package/src/store/auth.js +7 -1
- package/src/store/constants.js +2 -6
- package/src/store/locales/en.js +28 -3
- package/src/views/Account.vue +72 -110
- package/src/views/Apps.vue +106 -0
- package/src/views/CustomApp.vue +106 -0
- package/src/views/General.vue +192 -0
- package/src/views/Login.vue +27 -10
- package/src/views/QR.vue +1 -1
- package/src/views/Security.vue +322 -0
- package/src/views/Welcome.vue +10 -4
- package/dist/.vite/manifest.json +0 -58
- package/dist/Account-ja1hZJy5.js +0 -113
- package/dist/QR-ybXT1KGe.js +0 -41
- package/dist/TapniAuth.es.js +0 -4
- package/dist/TapniAuth.umd.js +0 -141
- package/dist/install-4aK3Wz63.js +0 -18458
- package/dist/style.css +0 -1
- package/dist/web-5VtGcKeU.js +0 -86
- package/dist/web-AImUTDQQ.js +0 -54
- package/dist/web-L3jORB19.js +0 -92
- package/dist/web-NrPZl3qD.js +0 -124
- package/src/mixins/mfa-auth.mixin.js +0 -76
- package/src/views/MFA.vue +0 -117
- /package/src/components/{LinkIcon.vue → DELETE_LinkIcon.vue} +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{W as j}from"./index-DXEfDC45.js";var w={exports:{}};/*!
|
|
2
|
+
* $script.js JS loader & dependency manager
|
|
3
|
+
* https://github.com/ded/script.js
|
|
4
|
+
* (c) Dustin Diaz 2014 | License MIT
|
|
5
|
+
*/(function(y){(function(i,p){y.exports?y.exports=p():this[i]=p()})("$script",function(){var i=document,p=i.getElementsByTagName("head")[0],I=!1,m="push",S="readyState",A="onreadystatechange",s={},o={},d={},f,v;function g(e,t){for(var n=0,u=e.length;n<u;++n)if(!t(e[n]))return I;return 1}function h(e,t){g(e,function(n){return t(n),1})}function l(e,t,n){e=e[m]?e:[e];var u=t&&t.call,r=u?t:n,W=u?e.join(""):t,N=e.length;function b(c){return c.call?c():s[c]}function _(){if(!--N){s[W]=1,r&&r();for(var c in o)g(c.split("|"),b)&&!h(o[c],b)&&(o[c]=[])}}return setTimeout(function(){h(e,function c(a,U){if(a===null)return _();if(!U&&!/^https?:\/\//.test(a)&&f&&(a=a.indexOf(".js")===-1?f+a+".js":f+a),d[a])return d[a]==2?_():setTimeout(function(){c(a,!0)},0);d[a]=1,x(a,_)})},0),l}function x(e,t){var n=i.createElement("script"),u;n.onload=n.onerror=n[A]=function(){n[S]&&!/^c|loade/.test(n[S])||u||(n.onload=n[A]=null,u=1,d[e]=2,t())},n.async=1,n.src=v?e+(e.indexOf("?")===-1?"?":"&")+v:e,p.insertBefore(n,p.lastChild)}return l.get=x,l.order=function(e,t,n){(function u(r){r=e.shift(),e.length?l(r,u):l(r,t,n)})()},l.path=function(e){f=e},l.urlArgs=function(e){v=e},l.ready=function(e,t,n){e=e[m]?e:[e];var u=[];return!h(e,function(r){s[r]||u[m](r)})&&g(e,function(r){return s[r]})?t():function(r){o[r]=o[r]||[],o[r][m](t),n&&n(u)}(e.join("|")),l},l.done=function(e){l([null],e)},l})})(w);var z=w.exports;class P extends j{constructor(){super({name:"SignInWithApple",platforms:["web"]}),this.appleScriptUrl="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js",this.isAppleScriptLoaded=!1}async authorize(i){return new Promise((p,I)=>{i?this.loadSignInWithAppleJS().then(m=>{var S,A,s;this.isAppleScriptLoaded=m,this.isAppleScriptLoaded?(AppleID.auth.init({clientId:i.clientId,redirectURI:i.redirectURI,scope:(S=i.scopes)!==null&&S!==void 0?S:void 0,state:(A=i.state)!==null&&A!==void 0?A:void 0,nonce:(s=i.nonce)!==null&&s!==void 0?s:void 0,usePopup:!0}),AppleID.auth.signIn().then(o=>{var d,f,v,g,h;const l={response:{user:null,email:(d=o.user)===null||d===void 0?void 0:d.email,givenName:(v=(f=o.user)===null||f===void 0?void 0:f.name)===null||v===void 0?void 0:v.firstName,familyName:(h=(g=o.user)===null||g===void 0?void 0:g.name)===null||h===void 0?void 0:h.lastName,identityToken:o.authorization.id_token,authorizationCode:o.authorization.code}};p(l)}).catch(o=>{I(o)})):I("Unable to load Sign in with Apple JS framework.")}):I("No options were provided.")})}loadSignInWithAppleJS(){return new Promise(i=>{this.isAppleScriptLoaded?i(!0):typeof window!==void 0?z.get(this.appleScriptUrl,()=>i(!0)):i(!1)})}}export{P as SignInWithAppleWeb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as w}from"./index-DXEfDC45.js";class y extends w{async getId(){return{identifier:this.getUid()}}async getInfo(){if(typeof navigator>"u"||!navigator.userAgent)throw this.unavailable("Device API not available in this browser");const e=navigator.userAgent,i=this.parseUa(e);return{model:i.model,platform:"web",operatingSystem:i.operatingSystem,osVersion:i.osVersion,manufacturer:navigator.vendor,isVirtual:!1,webViewVersion:i.browserVersion}}async getBatteryInfo(){if(typeof navigator>"u"||!navigator.getBattery)throw this.unavailable("Device API not available in this browser");let e={};try{e=await navigator.getBattery()}catch{}return{batteryLevel:e.level,isCharging:e.charging}}async getLanguageCode(){return{value:navigator.language.split("-")[0].toLowerCase()}}async getLanguageTag(){return{value:navigator.language}}parseUa(e){const i={},r=e.indexOf("(")+1;let a=e.indexOf(") AppleWebKit");e.indexOf(") Gecko")!==-1&&(a=e.indexOf(") Gecko"));const s=e.substring(r,a);if(e.indexOf("Android")!==-1){const t=s.replace("; wv","").split("; ").pop();t&&(i.model=t.split(" Build")[0]),i.osVersion=s.split("; ")[1]}else if(i.model=s.split("; ")[0],typeof navigator<"u"&&navigator.oscpu)i.osVersion=navigator.oscpu;else if(e.indexOf("Windows")!==-1)i.osVersion=s;else{const t=s.split("; ").pop();if(t){const n=t.replace(" like Mac OS X","").split(" ");i.osVersion=n[n.length-1].replace(/_/g,".")}}/android/i.test(e)?i.operatingSystem="android":/iPad|iPhone|iPod/.test(e)&&!window.MSStream?i.operatingSystem="ios":/Win/.test(e)?i.operatingSystem="windows":/Mac/i.test(e)?i.operatingSystem="mac":i.operatingSystem="unknown";const l=!!window.ApplePaySession,x=!!window.chrome,p=/Firefox/.test(e),d=/Edg/.test(e),g=/FxiOS/.test(e),c=/CriOS/.test(e),f=/EdgiOS/.test(e);if(l||x&&!d||g||c||f){let t;g?t="FxiOS":c?t="CriOS":f?t="EdgiOS":l?t="Version":t="Chrome";const n=e.split(" ");for(const o of n)if(o.includes(t)){const v=o.split("/")[1];i.browserVersion=v}}else if(p||d){const o=e.split("").reverse().join("").split("/")[0].split("").reverse().join("");i.browserVersion=o}return i}getUid(){if(typeof window<"u"&&window.localStorage){let e=window.localStorage.getItem("_capuid");return e||(e=this.uuid4(),window.localStorage.setItem("_capuid",e),e)}return this.uuid4()}uuid4(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){const i=Math.random()*16|0;return(e==="x"?i:i&3|8).toString(16)})}}export{y as DeviceWeb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as t}from"./index-DXEfDC45.js";class s extends t{constructor(){super(),this.handleVisibilityChange=()=>{const e={isActive:document.hidden!==!0};this.notifyListeners("appStateChange",e),document.hidden?this.notifyListeners("pause",null):this.notifyListeners("resume",null)},document.addEventListener("visibilitychange",this.handleVisibilityChange,!1)}exitApp(){throw this.unimplemented("Not implemented on web.")}async getInfo(){throw this.unimplemented("Not implemented on web.")}async getLaunchUrl(){return{url:""}}async getState(){return{isActive:document.hidden!==!0}}async minimizeApp(){throw this.unimplemented("Not implemented on web.")}}export{s as AppWeb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as i}from"./index-DXEfDC45.js";class u extends i{async initialize(e){const n={version:"v17.0"};return await this.loadScript(e.locale),FB.init(Object.assign(Object.assign({},n),e))}loadScript(e){if(typeof document>"u")return Promise.reject("document global not found");const n="fb";if(document.getElementById(n))return Promise.resolve();const r=document.getElementsByTagName("head")[0],s=document.createElement("script");return new Promise(o=>{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)})}async login(e){return new Promise((n,t)=>{FB.login(r=>{r.status==="connected"?n({accessToken:{token:r.authResponse.accessToken}}):t({accessToken:{token:null}})},{scope:e.permissions.join(",")})})}async logout(){return new Promise(e=>FB.logout(()=>e()))}async reauthorize(){return new Promise(e=>FB.reauthorize(n=>e(n)))}async getCurrentAccessToken(){return new Promise((e,n)=>{FB.getLoginStatus(t=>{if(t.status==="connected"){const r={accessToken:{applicationId:void 0,declinedPermissions:[],expires:void 0,isExpired:void 0,lastRefresh:void 0,permissions:[],token:t.authResponse.accessToken,userId:t.authResponse.userID}};e(r)}else n({accessToken:{token:null}})})})}async getProfile(e){const n=e.fields.join(",");return new Promise((t,r)=>{FB.api("/me",{fields:n},s=>{if(s.error){r(s.error.message);return}t(s)})})}async logEvent(){return Promise.resolve()}async setAutoLogAppEventsEnabled(){return Promise.resolve()}async setAdvertiserTrackingEnabled(){return Promise.resolve()}async setAdvertiserIDCollectionEnabled(){return Promise.resolve()}}export{u as FacebookLoginWeb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as c}from"./index-DXEfDC45.js";class g extends c{constructor(){super()}loadScript(){if(typeof document>"u")return;const e="gapi";if(document==null?void 0:document.getElementById(e))return;const n=document.getElementsByTagName("head")[0],t=document.createElement("script");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)}initialize(e={clientId:"",scopes:[],grantOfflineAccess:!1}){var s,n;if(typeof window>"u")return;const t=(s=document.getElementsByName("google-signin-client_id")[0])===null||s===void 0?void 0:s.content,i=e.clientId||t||"";i||console.warn("GoogleAuthPlugin - clientId is empty"),this.options={clientId:i,grantOfflineAccess:(n=e.grantOfflineAccess)!==null&&n!==void 0?n:!1,scopes:e.scopes||[]},this.gapiLoaded=new Promise(o=>{window.gapiResolve=o,this.loadScript()}),this.addUserChangeListener()}platformJsLoaded(){gapi.load("auth2",()=>{const e={client_id:this.options.clientId,plugin_name:"CodetrixStudioCapacitorGoogleAuth"};this.options.scopes.length&&(e.scope=this.options.scopes.join(" ")),gapi.auth2.init(e),window.gapiResolve()})}async signIn(){return new Promise(async(e,s)=>{var n;try{let t;const i=(n=this.options.grantOfflineAccess)!==null&&n!==void 0?n:!1;i?t=(await gapi.auth2.getAuthInstance().grantOfflineAccess()).code:await gapi.auth2.getAuthInstance().signIn();const o=gapi.auth2.getAuthInstance().currentUser.get();i&&await o.reloadAuthResponse();const a=this.getUserFrom(o);a.serverAuthCode=t,e(a)}catch(t){s(t)}})}async refresh(){const e=await gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse();return{accessToken:e.access_token,idToken:e.id_token,refreshToken:""}}async signOut(){return gapi.auth2.getAuthInstance().signOut()}async addUserChangeListener(){await this.gapiLoaded,gapi.auth2.getAuthInstance().currentUser.listen(e=>{this.notifyListeners("userChange",e.isSignedIn()?this.getUserFrom(e):null)})}getUserFrom(e){const s={},n=e.getBasicProfile();s.email=n.getEmail(),s.familyName=n.getFamilyName(),s.givenName=n.getGivenName(),s.id=n.getId(),s.imageUrl=n.getImageUrl(),s.name=n.getName();const t=e.getAuthResponse(!0);return s.authentication={accessToken:t.access_token,idToken:t.id_token,refreshToken:""},s}}export{g as GoogleAuthWeb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as o}from"./index-DXEfDC45.js";class e extends o{constructor(){super(),this._lastWindow=null}async open(s){this._lastWindow=window.open(s.url,s.windowName||"_blank")}async close(){return new Promise((s,n)=>{this._lastWindow!=null?(this._lastWindow.close(),this._lastWindow=null,s()):n("No active window to close!")})}}const i=new e;export{i as Browser,e as BrowserWeb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as p}from"./index-DXEfDC45.js";class f extends p{constructor(){super(...arguments),this.group="CapacitorStorage"}async configure({group:e}){typeof e=="string"&&(this.group=e)}async get(e){return{value:this.impl.getItem(this.applyPrefix(e.key))}}async set(e){this.impl.setItem(this.applyPrefix(e.key),e.value)}async remove(e){this.impl.removeItem(this.applyPrefix(e.key))}async keys(){return{keys:this.rawKeys().map(t=>t.substring(this.prefix.length))}}async clear(){for(const e of this.rawKeys())this.impl.removeItem(e)}async migrate(){var e;const t=[],s=[],n="_cap_",o=Object.keys(this.impl).filter(i=>i.indexOf(n)===0);for(const i of o){const r=i.substring(n.length),a=(e=this.impl.getItem(i))!==null&&e!==void 0?e:"",{value:l}=await this.get({key:r});typeof l=="string"?s.push(r):(await this.set({key:r,value:a}),t.push(r))}return{migrated:t,existing:s}}async removeOld(){const e="_cap_",t=Object.keys(this.impl).filter(s=>s.indexOf(e)===0);for(const s of t)this.impl.removeItem(s)}get impl(){return window.localStorage}get prefix(){return this.group==="NativeStorage"?"":`${this.group}.`}rawKeys(){return Object.keys(this.impl).filter(e=>e.indexOf(this.prefix)===0)}applyPrefix(e){return this.prefix+e}}export{f as PreferencesWeb};
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
.container {
|
|
2
|
+
padding: 10px 0!important;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: 10px;
|
|
6
|
+
padding-bottom: 100px !important;
|
|
7
|
+
}
|
|
8
|
+
.settingsCard {
|
|
9
|
+
background-color: white;
|
|
10
|
+
padding: 20px;
|
|
11
|
+
border-radius: 26px;
|
|
12
|
+
align-items: center;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.device {
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
h4 {
|
|
21
|
+
margin-left: 20px;
|
|
22
|
+
font-weight: bold;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.middle {
|
|
26
|
+
flex: 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.left img {
|
|
30
|
+
background-color: #f7f8f9;
|
|
31
|
+
border-radius: 20px;
|
|
32
|
+
padding: 10px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.divider {
|
|
36
|
+
height: 1px;
|
|
37
|
+
background-color: #f0f0f0;
|
|
38
|
+
margin: 20px 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.moreFooter {
|
|
42
|
+
display: flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: space-between;
|
|
45
|
+
padding: 0 10px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.settingRow{
|
|
49
|
+
background-color: #F4F4F4;
|
|
50
|
+
padding: 10px 9px;
|
|
51
|
+
border-radius: 15px;
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.settingRow .firstRow,
|
|
56
|
+
.settingRow .secondRow {
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
min-height: 35px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.settingRow .firstRow h4 {
|
|
63
|
+
text-align: left;
|
|
64
|
+
flex: 1;
|
|
65
|
+
margin-left: 20px;
|
|
66
|
+
font-weight: 600;
|
|
67
|
+
margin-bottom: 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.settingRow .secondRow {
|
|
71
|
+
font-size: 8px;
|
|
72
|
+
margin-top: 20px;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.settingRow .secondRow p {
|
|
76
|
+
flex: 1;
|
|
77
|
+
color: #999999;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.withBackground {
|
|
81
|
+
background-color: #ffffff;
|
|
82
|
+
border-radius: 10px;
|
|
83
|
+
padding: 10px;
|
|
84
|
+
width: 50px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
.ios-switch {
|
|
89
|
+
position: relative;
|
|
90
|
+
width: 60px;
|
|
91
|
+
padding-top: 4px;
|
|
92
|
+
padding-right: 4px;
|
|
93
|
+
margin-left: 4px;
|
|
94
|
+
-webkit-user-select: none;
|
|
95
|
+
-moz-user-select: none;
|
|
96
|
+
-ms-user-select: none;
|
|
97
|
+
}
|
|
98
|
+
.ios-switch-checkbox {
|
|
99
|
+
display: none;
|
|
100
|
+
}
|
|
101
|
+
.ios-switch-label {
|
|
102
|
+
background-color: #e3e3e3;
|
|
103
|
+
display: block;
|
|
104
|
+
overflow: initial;
|
|
105
|
+
cursor: pointer;
|
|
106
|
+
height: 30px;
|
|
107
|
+
padding: 0;
|
|
108
|
+
line-height: 20px;
|
|
109
|
+
border: 1px solid #e3e3e3;
|
|
110
|
+
border-radius: 25px;
|
|
111
|
+
transition: all 250ms ease;
|
|
112
|
+
}
|
|
113
|
+
.ios-switch-label:before {
|
|
114
|
+
content: "";
|
|
115
|
+
display: block;
|
|
116
|
+
width: 30px;
|
|
117
|
+
margin: 0px;
|
|
118
|
+
position: absolute;
|
|
119
|
+
top: 0;
|
|
120
|
+
bottom: 0;
|
|
121
|
+
right: 24px;
|
|
122
|
+
background-size: 15px;
|
|
123
|
+
background-repeat: no-repeat;
|
|
124
|
+
background-position: center;
|
|
125
|
+
border: 2px solid #e3e3e3;
|
|
126
|
+
border-radius: 25px;
|
|
127
|
+
transition: all 250ms ease;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.ios-switch-checkbox:checked + .ios-switch-label {
|
|
131
|
+
background-color: #151515;
|
|
132
|
+
}
|
|
133
|
+
.ios-switch-checkbox:checked + .ios-switch-label,
|
|
134
|
+
.ios-switch-checkbox:checked + .ios-switch-label:before {
|
|
135
|
+
border-color: #151515;
|
|
136
|
+
}
|
|
137
|
+
.ios-switch-checkbox:checked + .ios-switch-label:before {
|
|
138
|
+
right: -1px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
.subheaderContainer {
|
|
143
|
+
display: flex;
|
|
144
|
+
align-items: center;
|
|
145
|
+
position: relative;
|
|
146
|
+
padding: 15px 25px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.subheaderContainer .left-button {
|
|
150
|
+
width: 40px!important;
|
|
151
|
+
height: 40px!important;
|
|
152
|
+
margin: 0;
|
|
153
|
+
border-radius: 50%;
|
|
154
|
+
background: #f4f4f4;
|
|
155
|
+
display: flex;
|
|
156
|
+
align-items: center;
|
|
157
|
+
justify-content: center;
|
|
158
|
+
position: absolute;
|
|
159
|
+
left: 20px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.subheaderContainer .button {
|
|
163
|
+
width: 40px!important;
|
|
164
|
+
height: 40px!important;
|
|
165
|
+
margin: 0;
|
|
166
|
+
border-radius: 50%;
|
|
167
|
+
background: #f4f4f4;
|
|
168
|
+
display: flex;
|
|
169
|
+
align-items: center;
|
|
170
|
+
justify-content: center;
|
|
171
|
+
position: absolute;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.subheaderContainer .button img {
|
|
175
|
+
top: 0!important;
|
|
176
|
+
margin-right: 3px!important;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.subheaderContainer .left-button {
|
|
180
|
+
left: 20px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.subheaderContainer .right-button {
|
|
184
|
+
right: 20px;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.transition-icon {
|
|
188
|
+
transition: 0.5s;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.rotate-icon {
|
|
192
|
+
transform: translate(-50%, -50%) rotate(180deg)!important;
|
|
193
|
+
}
|
package/dist/index.html
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!DOCTYPE HTML>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta name="google-signin-client_id" content="977665455842-5d5ar2comte3muk65oaf4g5jrmcsvu1m.apps.googleusercontent.com">
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover">
|
|
7
|
+
<meta name="format-detection" content="telephone=no">
|
|
8
|
+
<meta name="msapplication-tap-highlight" content="no">
|
|
9
|
+
<meta name="format-detection" content="telephone=no">
|
|
10
|
+
<link rel="icon" href="/favicon.ico" class="next-head"/>
|
|
11
|
+
<title>Tapni - Share everything with just a tap</title>
|
|
12
|
+
<meta name="description" content="Your new connecting experience. Tapni allows you to share all your socials and contact information in a smart, contactless, and sustainable way. One TAP is all it takes. Keep all your links in one place. Bring your business card to life. Impress anyone you meet. Connecting made effortless with just a simple tap!">
|
|
13
|
+
<!-- Open Graph / Facebook -->
|
|
14
|
+
<meta property="og:type" content="website">
|
|
15
|
+
<meta property="og:title" content="Tapni - Share with just a tap">
|
|
16
|
+
<meta property="og:description" content="Share everything in a smart, contactless,and sustainable way">
|
|
17
|
+
<meta property="og:image" content="https://cdn.tapni.co/images/banner-sticker.png">
|
|
18
|
+
<meta property="og:url" content="https://tapni.com">
|
|
19
|
+
|
|
20
|
+
<!-- Twitter -->
|
|
21
|
+
<meta property="twitter:url" content="https://tapni.com">
|
|
22
|
+
<meta property="twitter:card" content="summary_large_image">
|
|
23
|
+
<meta property="twitter:site" content="@tapni_co">
|
|
24
|
+
<meta property="twitter:title" content="Tapni - Share everything with just a tap">
|
|
25
|
+
<meta property="twitter:description" content="Your new connecting experience. Tapni allows you to share all your socials and contact information in a smart, contactless, and sustainable way. One TAP is all it takes. Keep all your links in one place. Bring your business card to life. Impress anyone you meet. Connecting made effortless with just a simple tap!">
|
|
26
|
+
<meta property="twitter:image" content="https://cdn.tapni.co/images/banner-sticker.png">
|
|
27
|
+
|
|
28
|
+
<link rel="apple-touch-icon" href="/icon.png">
|
|
29
|
+
<link rel="android-touch-icon" href="/icon.png" />
|
|
30
|
+
<script type="module" crossorigin src="/assets/index-DXEfDC45.js"></script>
|
|
31
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CNOQuLc_.css">
|
|
32
|
+
</head>
|
|
33
|
+
<body id="bodyId" class="lazy-scroll no-select">
|
|
34
|
+
<div id="app"></div>
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tapni/auth",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/TapniAuth.umd.js",
|
|
6
6
|
"module": "./dist/TapniAuth.es.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@otplib/preset-browser": "^12.0.1",
|
|
35
35
|
"@recognizebv/capacitor-plugin-msauth": "^3.5.1",
|
|
36
36
|
"@tapni/capacitor-reactive-localstorage-vue3": "^0.0.17",
|
|
37
|
-
"@tapni/styles": "^0.0.
|
|
37
|
+
"@tapni/styles": "^0.0.8",
|
|
38
38
|
"await-to-js": "^3.0.0",
|
|
39
39
|
"axios": "^1.6.5",
|
|
40
40
|
"buffer": "^6.0.3",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"vue": "^3.3.11",
|
|
44
44
|
"vue-cookies": "^1.8.3",
|
|
45
45
|
"vue-router": "^4.2.5",
|
|
46
|
+
"vue3-select-component": "^0.5.2",
|
|
46
47
|
"vuex": "^4.0.2",
|
|
47
48
|
"vuex-router-sync": "v6.0.0-rc.1"
|
|
48
|
-
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@rollup/plugin-inject": "^5.0.5",
|
package/src/App.vue
CHANGED
|
@@ -14,26 +14,16 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
14
14
|
<template>
|
|
15
15
|
<div id="ssoapp">
|
|
16
16
|
<a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img src="data:image/png;base64,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" onerror="this.onerror=null;this.src='https://cdn.tapni.co/images/logo-dark.png';" class="header-logo-img"></a>
|
|
17
|
-
|
|
18
|
-
<a v-if="display === 'redirect'"
|
|
19
|
-
@click="toggleSSOLanguageModal"
|
|
20
|
-
class="font-18 no-border pointer color-black"
|
|
21
|
-
style="position: absolute; right: 20px; top: -10px; z-index: 1;">
|
|
22
|
-
<span class="lang-icon">{{ appLanguage.toUpperCase() }}</span>
|
|
23
|
-
</a>
|
|
24
|
-
|
|
25
|
-
|
|
26
17
|
<ModalOverlay />
|
|
27
18
|
<Language v-if="!isModal" />
|
|
28
19
|
<SSO v-if="!isModal" />
|
|
29
20
|
<SSOPick v-if="!isModal" />
|
|
30
|
-
<OTP />
|
|
31
21
|
|
|
32
22
|
<AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
|
|
33
23
|
<AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
|
|
34
24
|
<AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
|
|
35
25
|
<AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
|
|
36
|
-
<
|
|
26
|
+
<AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" />
|
|
37
27
|
<AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
|
|
38
28
|
<AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
|
|
39
29
|
<RouterView v-else-if="display !== 'npm'" />
|
|
@@ -84,16 +74,15 @@ import AuthWelcome from "@/views/Welcome.vue";
|
|
|
84
74
|
import AuthLogin from "@/views/Login.vue";
|
|
85
75
|
import AuthRegister from "@/views/Register.vue";
|
|
86
76
|
import AuthVerify from "@/views/Verify.vue";
|
|
87
|
-
import
|
|
77
|
+
import AuthSecurity from "@/views/Security.vue";
|
|
88
78
|
import AuthReset from "@/views/Reset.vue";
|
|
89
79
|
import AuthCallback from "@/views/Callback.vue";
|
|
90
|
-
import ModalOverlay from "@/components/
|
|
80
|
+
import ModalOverlay from "@/components/DELETE_ModalOverlay.vue";
|
|
91
81
|
import SSO from "@/components/SSO.vue";
|
|
92
|
-
import OTP from "@/components/OTP.vue";
|
|
93
82
|
import SSOPick from "@/components/SSOPick.vue";
|
|
94
83
|
import {EventBus} from "./store/event-bus.js";
|
|
95
84
|
import AuthMixin from "@/mixins/auth.mixin.js";
|
|
96
|
-
import Language from "@/components/
|
|
85
|
+
import Language from "@/components/DELETE_Language.vue";
|
|
97
86
|
import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3'
|
|
98
87
|
import store from './store/auth.js';
|
|
99
88
|
|
|
@@ -109,9 +98,8 @@ export default {
|
|
|
109
98
|
},
|
|
110
99
|
components: {
|
|
111
100
|
Language,
|
|
112
|
-
OTP,
|
|
113
101
|
SSOPick,
|
|
114
|
-
SSO, ModalOverlay, AuthCallback, AuthReset, AuthVerify,
|
|
102
|
+
SSO, ModalOverlay, AuthCallback, AuthReset, AuthVerify, AuthSecurity, AuthRegister, AuthLogin, AuthWelcome
|
|
115
103
|
},
|
|
116
104
|
props: {
|
|
117
105
|
viewProp: {
|
|
@@ -154,6 +142,7 @@ export default {
|
|
|
154
142
|
EventBus.$on('refreshTokenAction',(data) => this.refreshTokenAction({...data, storage: this.$storex}))
|
|
155
143
|
EventBus.$on('switchAccount',(data) => this.switchAccount(data))
|
|
156
144
|
EventBus.$on('setToken',(data) => this.setToken(data))
|
|
145
|
+
EventBus.$on('setStorageItem',(data) => this.setStorageItem(data))
|
|
157
146
|
},
|
|
158
147
|
methods: {
|
|
159
148
|
async init () {
|
|
@@ -184,9 +173,6 @@ export default {
|
|
|
184
173
|
document.getElementsByTagName("html")[0].style = ""
|
|
185
174
|
}
|
|
186
175
|
},
|
|
187
|
-
toggleSSOLanguageModal () {
|
|
188
|
-
EventBus.$emit('toggleSSOLanguageModal', true)
|
|
189
|
-
}
|
|
190
176
|
},
|
|
191
177
|
watch: {
|
|
192
178
|
viewProp (nv) {
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
|
|
107
107
|
<script>
|
|
108
108
|
import { EventBus } from "../store/event-bus.js";
|
|
109
|
-
import LinkIcon from "./
|
|
109
|
+
import LinkIcon from "./DELETE_LinkIcon.vue";
|
|
110
110
|
import UtilService from "../services/UtilService.js";
|
|
111
111
|
import CONSTANTS from "../store/constants.js";
|
|
112
112
|
import { Device } from "@capacitor/device";
|
|
@@ -35,8 +35,8 @@ export default {
|
|
|
35
35
|
// EventBus.$on('togglePasswordModal', this.toggleModal)
|
|
36
36
|
// EventBus.$on('toggleAddAccountModal', this.toggleModal)
|
|
37
37
|
// EventBus.$on("toggleAccountSettingsModal", this.toggleModal);
|
|
38
|
-
EventBus.$on("toggleSSOLanguageModal", this.toggleModal);
|
|
39
|
-
EventBus.$on("
|
|
38
|
+
// EventBus.$on("toggleSSOLanguageModal", this.toggleModal);
|
|
39
|
+
// EventBus.$on("toggleOTPField", this.toggleModal);
|
|
40
40
|
EventBus.$on("toggleSSOModal", this.toggleModal);
|
|
41
41
|
EventBus.$on("toggleSSOPickModal", this.toggleModal);
|
|
42
42
|
},
|
|
@@ -69,13 +69,13 @@ export default {
|
|
|
69
69
|
};
|
|
70
70
|
},
|
|
71
71
|
mounted() {
|
|
72
|
-
EventBus.$on("
|
|
72
|
+
EventBus.$on("toggleOTPField", this.toggleModal);
|
|
73
73
|
EventBus.$on("closeModal", () => {
|
|
74
74
|
this.toggle = false;
|
|
75
75
|
});
|
|
76
76
|
},
|
|
77
77
|
beforeDestroy() {
|
|
78
|
-
EventBus["_events"]["
|
|
78
|
+
EventBus["_events"]["toggleOTPField"].pop();
|
|
79
79
|
},
|
|
80
80
|
methods: {
|
|
81
81
|
forceClose() {
|
|
@@ -91,7 +91,7 @@ export default {
|
|
|
91
91
|
|
|
92
92
|
this.loading = true;
|
|
93
93
|
EventBus.$emit('otpSubmitted', this.otp);
|
|
94
|
-
EventBus.$emit("
|
|
94
|
+
EventBus.$emit("toggleOTPField")
|
|
95
95
|
this.loading = false;
|
|
96
96
|
},
|
|
97
97
|
toggleModal() {
|
package/src/main.js
CHANGED
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
accountDelete: false,
|
|
9
|
+
|
|
10
|
+
changePassword: false,
|
|
11
|
+
password: '',
|
|
12
|
+
passwordRepeat: '',
|
|
13
|
+
currentPassword: '',
|
|
14
|
+
|
|
15
|
+
otpToken: null,
|
|
16
|
+
otpSecret: null,
|
|
17
|
+
mfaEnable: false,
|
|
18
|
+
otp: "",
|
|
19
|
+
qrCodeHash: null,
|
|
20
|
+
qrCodeRefreshInterval: null,
|
|
21
|
+
poolingInterval: null,
|
|
22
|
+
loading: false,
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
props: {
|
|
26
|
+
isModal: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
required: false,
|
|
29
|
+
default: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
computed: {
|
|
33
|
+
promptMFA () {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
async mounted () {
|
|
38
|
+
if (this.renderView === 'AuthSecurity') {
|
|
39
|
+
await this.getAccountSettings();
|
|
40
|
+
this.generateOTPQrCode();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
EventBus.$on('otpSubmitted', this.otpSubmitted)
|
|
44
|
+
},
|
|
45
|
+
methods: {
|
|
46
|
+
otpSubmitted(code) {
|
|
47
|
+
this.otpToken = code;
|
|
48
|
+
|
|
49
|
+
// Assuming that the parent component had a method called submit
|
|
50
|
+
this.submit();
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
}
|
package/src/mixins/auth.mixin.js
CHANGED
|
@@ -4,6 +4,13 @@ import GlobalMixin from './global.mixin'
|
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
6
|
mixins: [GlobalMixin],
|
|
7
|
+
props: {
|
|
8
|
+
isModal: {
|
|
9
|
+
type: Boolean,
|
|
10
|
+
required: false,
|
|
11
|
+
default: false,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
7
14
|
computed: {
|
|
8
15
|
...mapState([
|
|
9
16
|
'$storex',
|
|
@@ -31,12 +38,12 @@ export default {
|
|
|
31
38
|
...mapActions([
|
|
32
39
|
'setLoggedInAccounts',
|
|
33
40
|
'setLoggedInUserId',
|
|
34
|
-
'getRefreshTokens',
|
|
35
41
|
'setRefreshToken',
|
|
36
42
|
'unsetRefreshToken',
|
|
37
43
|
'setToken',
|
|
38
44
|
'setView',
|
|
39
45
|
'setStorage',
|
|
46
|
+
'setStorageItem',
|
|
40
47
|
'updateLang',
|
|
41
48
|
'login',
|
|
42
49
|
'register',
|
|
@@ -29,6 +29,13 @@ export default {
|
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
31
|
methods: {
|
|
32
|
+
getIcon(icon) {
|
|
33
|
+
if (!this.isNative && false) {
|
|
34
|
+
return 'https://cdn.tapni.co/icons/' + icon;
|
|
35
|
+
} else {
|
|
36
|
+
return `http://localhost:7777/icons/${icon}`;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
32
39
|
errorHandler(error) {
|
|
33
40
|
if (error && error.response && error.response.data && error.response.data.error) {
|
|
34
41
|
if (
|
package/src/routes.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
const Welcome = () =>
|
|
2
|
-
import("./views/Welcome.vue");
|
|
1
|
+
const Welcome = () => import("./views/Welcome.vue");
|
|
3
2
|
const Login = () => import("./views/Login.vue");
|
|
4
|
-
const Register = () =>
|
|
5
|
-
import("./views/Register.vue");
|
|
3
|
+
const Register = () => import("./views/Register.vue");
|
|
6
4
|
const Reset = () => import("./views/Reset.vue");
|
|
7
5
|
const Account = () => import("./views/Account.vue");
|
|
8
|
-
const Verify = () =>
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
import("./views/MFA.vue");
|
|
6
|
+
const Verify = () => import("./views/Verify.vue");
|
|
7
|
+
const Callback = () => import("./views/Callback.vue");
|
|
8
|
+
const QR = () => import("./views/QR.vue");
|
|
9
|
+
const Security = () => import("./views/Security.vue");
|
|
10
|
+
const Apps = () => import("./views/Apps.vue");
|
|
11
|
+
const CustomApp = () => import("./views/CustomApp.vue");
|
|
12
|
+
const General = () => import("./views/General.vue");
|
|
16
13
|
|
|
17
14
|
export default [
|
|
18
15
|
{
|
|
@@ -37,9 +34,24 @@ export default [
|
|
|
37
34
|
component: QR,
|
|
38
35
|
},
|
|
39
36
|
{
|
|
40
|
-
path: "/
|
|
41
|
-
name: "
|
|
42
|
-
component:
|
|
37
|
+
path: "/security",
|
|
38
|
+
name: "AuthSecurity",
|
|
39
|
+
component: Security,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
path: "/apps",
|
|
43
|
+
name: "AuthApps",
|
|
44
|
+
component: Apps,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
path: "/apps/:app",
|
|
48
|
+
name: "AuthApp",
|
|
49
|
+
component: CustomApp,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
path: "/general",
|
|
53
|
+
name: "AuthGeneral",
|
|
54
|
+
component: General,
|
|
43
55
|
},
|
|
44
56
|
{
|
|
45
57
|
path: "/account",
|
package/src/store/auth.js
CHANGED
|
@@ -73,6 +73,9 @@ export default {
|
|
|
73
73
|
setAccountSettings(state, account) {
|
|
74
74
|
state.account = account;
|
|
75
75
|
},
|
|
76
|
+
setStorageItem(state, item) {
|
|
77
|
+
state.$storex[item.name] = item.data;
|
|
78
|
+
},
|
|
76
79
|
setStorage(state, storage) {
|
|
77
80
|
state.$storex = {
|
|
78
81
|
...state.$storex,
|
|
@@ -135,6 +138,9 @@ export default {
|
|
|
135
138
|
commit('setAccountSettings', response.data.data);
|
|
136
139
|
}
|
|
137
140
|
},
|
|
141
|
+
setStorageItem({ commit }, item) {
|
|
142
|
+
commit('setStorageItem', item);
|
|
143
|
+
},
|
|
138
144
|
setStorage({ commit }, storage) {
|
|
139
145
|
commit('setStorage', storage);
|
|
140
146
|
},
|
|
@@ -150,7 +156,7 @@ export default {
|
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
if (error.response.data.error === 'OTP_REQUIRED') {
|
|
153
|
-
return EventBus.$emit('
|
|
159
|
+
return EventBus.$emit('toggleOTPField', true);
|
|
154
160
|
}
|
|
155
161
|
|
|
156
162
|
// Link click network error bug fix
|
package/src/store/constants.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
WEB_VERSION: '5.6.0',
|
|
5
|
-
SUPPORTED_LANGUAGES: ['en', 'de', 'es', 'kr', 'it', 'fr'],
|
|
6
|
-
METAPIXEL_ID: '1203678696914368',
|
|
7
|
-
GOOGLE_ANALYTICS_ID: ''
|
|
2
|
+
WEB_VERSION: '1.0.1',
|
|
3
|
+
SUPPORTED_LANGUAGES: ['en', 'de', 'es', 'kr', 'it', 'fr', 'sr', 'tr', 'cn'],
|
|
8
4
|
}
|