@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
2 lines (1 loc) • 4.3 kB
JavaScript
import{f as P}from"./chunk-4KESSWTF.js";import{Ba as d,U as g,Va as C,X as N,cb as E,kb as H,oa as O,sa as f,vb as k,wb as F}from"./chunk-WL65GYD5.js";import{d as T}from"./chunk-XE5YHU5J.js";import{$ as I,G as h,O as m,Oc as R,Z as x,ca as A,ha as n,p as c,q as _,v as p}from"./chunk-RSNLYAN6.js";var a=(function(r){return r.ACCESS="access",r.REFRESH="refresh",r.WS="ws",r.CSRF="csrf",r})(a||{});var s=(function(r){return r.BASE="/api/auth",r.LOGIN="login",r.LOGOUT="logout",r.REFRESH="refresh",r.TOKEN="token",r.TOKEN_REFRESH="token/refresh",r.WS="socket.io",r})(s||{}),U=`${s.BASE}/${s.LOGIN}`,K=`${s.BASE}/${s.LOGOUT}`,l=`${s.BASE}/${s.REFRESH}`,M=`${s.BASE}/${s.TOKEN}`,W=`${s.BASE}/${s.TOKEN_REFRESH}`,b=`/${s.WS}`;var u="sync-in-csrf";var y=[a.REFRESH,a.ACCESS,a.WS,a.CSRF];var L="Client token is expired";var S={BASE:"auth",LOGIN:"login"};var fe=(()=>{let o=class o{constructor(){this.http=n(R),this.router=n(T),this.store=n(H),this.userService=n(P),this.layout=n(F),this.electron=n(k),this._refreshExpiration=parseInt(localStorage.getItem("refresh_expiration")||"0",10)||0,this._accessExpiration=parseInt(localStorage.getItem("access_expiration")||"0",10)||0}get refreshExpiration(){return this._refreshExpiration}set refreshExpiration(e){this._refreshExpiration=e!==0?e+60:e,localStorage.setItem("refresh_expiration",e.toString())}get accessExpiration(){return this._accessExpiration}set accessExpiration(e){this._accessExpiration=e!==0?e+60:e,localStorage.setItem("access_expiration",e.toString())}login(e,t){return this.http.post(U,{login:e,password:t}).pipe(p(i=>(this.accessExpiration=i.token.access_expiration,this.refreshExpiration=i.token.refresh_expiration,this.userService.initUser(i.user),{success:!0,message:null})),h(i=>(console.warn(i),c({success:!1,message:i.error.message||i.message}))))}loginElectron(){return this.electron.authenticate().pipe(x(e=>this.http.post(g,e).pipe(p(t=>(this.accessExpiration=t.token.access_expiration,this.refreshExpiration=t.token.refresh_expiration,this.userService.initUser(t.user),t?.client_token_update&&this.electron.send(E.SERVER.AUTHENTICATION_TOKEN_UPDATE,t.client_token_update),!0)),h(t=>(console.warn(t),t.error.message===L?this.electron.send(E.SERVER.AUTHENTICATION_TOKEN_EXPIRED):this.electron.send(E.SERVER.AUTHENTICATION_FAILED),c(!1))))))}logout(e=!0,t=!1){if((e||t)&&this.store.userImpersonate()){this.logoutImpersonateUser();return}this.userService.disconnectWebSocket(),this.clearCookies().pipe(m(()=>{this.accessExpiration=0,this.refreshExpiration=0,this.layout.clean(),this.store.clean(),e&&this.router.navigate([S.BASE,S.LOGIN]).catch(console.error),t&&this.layout.sendNotification("warning","Session has expired","Please sign in")})).subscribe()}logoutImpersonateUser(){this.http.post(O,null).subscribe({next:e=>{this.userService.disconnectWebSocket(),this.initUserFromResponse(e),this.router.navigate([f.BASE,f.ACCOUNT]).catch(console.error)},error:e=>{console.error(e),this.layout.sendNotification("error","Impersonate identity","logout",e)}})}initUserFromResponse(e,t=!1){e!==null&&(this.accessExpiration=e.token.access_expiration,this.refreshExpiration=e.token.refresh_expiration,this.userService.initUser(e.user,t))}isLogged(){return!this.refreshTokenHasExpired()}refreshToken(){return this.http.post(l,null).pipe(p(e=>(this.accessExpiration=e.access_expiration,this.refreshExpiration=e.refresh_expiration,console.debug("refresh token done"),!0)),h(e=>(console.debug("token has expired"),this.electron.enabled?(console.debug("login with app"),this.loginElectron()):(this.logout(!0,!0),_(()=>e)))))}checkUserAuthAndLoad(e){return this.refreshTokenHasExpired()?this.electron.enabled?this.loginElectron():(this.returnUrl=e.length>1?e:null,this.logout(),c(!1)):this.store.user.getValue()?c(!0):this.http.get(N).pipe(I(t=>this.userService.initUser(t.user)),p(()=>!0),h(t=>(t.status===401?this.logout():console.warn(t),c(!1))))}checkCSRF(e){return e.headers.has(u)?e.clone({headers:e.headers.set(u,C(u))}):e}refreshTokenHasExpired(){return this.refreshExpiration===0||d()>=this.refreshExpiration}clearCookies(){return this.http.post(K,null)}};o.\u0275fac=function(t){return new(t||o)},o.\u0275prov=A({token:o,factory:o.\u0275fac,providedIn:"root"});let r=o;return r})();export{U as a,K as b,l as c,u as d,S as e,fe as f};