From 27763be864586c5872fa345733a9c85eb2a50a1c Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Fri, 21 Jan 2022 17:56:17 +0700
Subject: [PATCH] added session for auth

---
 src/hooks/auth/useSessionCookie.ts   | 18 ++++++++++++++++++
 src/utils/dom/cookie.ts              | 13 +++++++++++++
 src/utils/providers/AuthProvider.tsx |  2 ++
 3 files changed, 33 insertions(+)
 create mode 100644 src/hooks/auth/useSessionCookie.ts
 create mode 100644 src/utils/dom/cookie.ts

diff --git a/src/hooks/auth/useSessionCookie.ts b/src/hooks/auth/useSessionCookie.ts
new file mode 100644
index 00000000..0d7ce68d
--- /dev/null
+++ b/src/hooks/auth/useSessionCookie.ts
@@ -0,0 +1,18 @@
+import { useEffect } from 'react';
+
+import { autorun } from 'mobx';
+
+import { useAuthStore } from '~/store/auth/useAuthStore';
+import { setCookie } from '~/utils/dom/cookie';
+
+export const useSessionCookie = () => {
+  const auth = useAuthStore();
+
+  useEffect(
+    () =>
+      autorun(() => {
+        setCookie('session', auth.token, 30);
+      }),
+    [auth]
+  );
+};
diff --git a/src/utils/dom/cookie.ts b/src/utils/dom/cookie.ts
new file mode 100644
index 00000000..4eb29a50
--- /dev/null
+++ b/src/utils/dom/cookie.ts
@@ -0,0 +1,13 @@
+export const setCookie = (name: string, value: string, days: number) => {
+  let expires;
+
+  if (days) {
+    const date = new Date();
+    date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
+    expires = '; expires=' + date.toISOString();
+  } else {
+    expires = '';
+  }
+
+  document.cookie = name + '=' + value + expires + '; path=/';
+};
diff --git a/src/utils/providers/AuthProvider.tsx b/src/utils/providers/AuthProvider.tsx
index a2391404..9e325a6b 100644
--- a/src/utils/providers/AuthProvider.tsx
+++ b/src/utils/providers/AuthProvider.tsx
@@ -6,6 +6,7 @@ import { EMPTY_USER } from '~/constants/auth';
 import { useAuth } from '~/hooks/auth/useAuth';
 import { useMessageEventReactions } from '~/hooks/auth/useMessageEventReactions';
 import { useRestorePasswordRedirect } from '~/hooks/auth/useRestorePasswordRedirect';
+import { useSessionCookie } from '~/hooks/auth/useSessionCookie';
 
 interface AuthProviderContextType extends ReturnType<typeof useAuth> {}
 
@@ -24,6 +25,7 @@ export const AuthProvider: FC = observer(({ children }) => {
 
   useMessageEventReactions();
   useRestorePasswordRedirect();
+  useSessionCookie();
 
   return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
 });