From 2c5c403da1926727f03a78e2600e987e22f2adc5 Mon Sep 17 00:00:00 2001
From: Raul Almeida <haltsimog@gmail.com>
Date: Fri, 28 Aug 2020 13:48:56 -0300
Subject: [PATCH] wip

---
 package-lock.json                        | 208 ++++++++++++++++++++++-
 package.json                             |   9 +-
 public/index.html                        |   4 +
 src/Components/LoginContainerFunction.js |  22 +--
 src/Store.js                             |   6 +
 src/env.js                               |   3 +
 src/index.js                             |  16 +-
 src/redux-token-auth-config.js           |  27 +++
 src/redux/initial-state.js               |  14 ++
 9 files changed, 288 insertions(+), 21 deletions(-)
 create mode 100644 src/redux-token-auth-config.js
 create mode 100644 src/redux/initial-state.js

diff --git a/package-lock.json b/package-lock.json
index 72d8e321..1333ee0a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1268,6 +1268,24 @@
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
       "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
     },
+    "@reduxjs/toolkit": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.4.0.tgz",
+      "integrity": "sha512-hkxQwVx4BNVRsYdxjNF6cAseRmtrkpSlcgJRr3kLUcHPIAMZAmMJkXmHh/eUEGTMqPzsYpJLM7NN2w9fxQDuGw==",
+      "requires": {
+        "immer": "^7.0.3",
+        "redux": "^4.0.0",
+        "redux-thunk": "^2.3.0",
+        "reselect": "^4.0.0"
+      },
+      "dependencies": {
+        "immer": {
+          "version": "7.0.8",
+          "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.8.tgz",
+          "integrity": "sha512-XnpIN8PXBBaOD43U8Z17qg6RQiKQYGDGGCIbz1ixmLGwBkSWwmrmx5X7d+hTtXDM8ur7m5OdLE0PiO+y5RB3pw=="
+        }
+      }
+    },
     "@svgr/babel-plugin-add-jsx-attribute": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
@@ -1529,6 +1547,28 @@
         "csstype": "^2.2.0"
       }
     },
+    "@types/react-redux": {
+      "version": "5.0.21",
+      "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-5.0.21.tgz",
+      "integrity": "sha512-ewkOW4GjnyXq5L++T31utI8yRmwj8iCIahZohYi1Ef7Xkrw0V/q92ao7x20rm38FKgImDaCCsaRGWfCJmF/Ukg==",
+      "requires": {
+        "@types/react": "*",
+        "redux": "^3.6.0"
+      },
+      "dependencies": {
+        "redux": {
+          "version": "3.7.2",
+          "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
+          "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+          "requires": {
+            "lodash": "^4.2.1",
+            "lodash-es": "^4.2.1",
+            "loose-envify": "^1.1.0",
+            "symbol-observable": "^1.0.3"
+          }
+        }
+      }
+    },
     "@types/react-transition-group": {
       "version": "4.2.4",
       "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.4.tgz",
@@ -4514,6 +4554,16 @@
         "sha.js": "^2.4.8"
       }
     },
+    "create-react-class": {
+      "version": "15.6.3",
+      "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
+      "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
+      "requires": {
+        "fbjs": "^0.8.9",
+        "loose-envify": "^1.3.1",
+        "object-assign": "^4.1.1"
+      }
+    },
     "cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -6675,6 +6725,35 @@
         "bser": "2.1.1"
       }
     },
+    "fbjs": {
+      "version": "0.8.17",
+      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
+      "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+      "requires": {
+        "core-js": "^1.0.0",
+        "isomorphic-fetch": "^2.1.1",
+        "loose-envify": "^1.0.0",
+        "object-assign": "^4.1.0",
+        "promise": "^7.1.1",
+        "setimmediate": "^1.0.5",
+        "ua-parser-js": "^0.7.18"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "1.2.7",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+        },
+        "promise": {
+          "version": "7.3.1",
+          "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+          "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+          "requires": {
+            "asap": "~2.0.3"
+          }
+        }
+      }
+    },
     "fecha": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
@@ -9168,6 +9247,15 @@
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
     },
+    "isomorphic-fetch": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+      "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+      "requires": {
+        "node-fetch": "^1.0.1",
+        "whatwg-fetch": ">=0.10.0"
+      }
+    },
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -10224,6 +10312,11 @@
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
       "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
     },
+    "lodash-es": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz",
+      "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ=="
+    },
     "lodash._reinterpolate": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
@@ -10682,9 +10775,9 @@
       }
     },
     "moment": {
-      "version": "2.24.0",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
-      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+      "version": "2.25.3",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz",
+      "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg=="
     },
     "moo-server": {
       "version": "1.3.0",
@@ -14299,6 +14392,14 @@
         "scheduler": "^0.19.1"
       }
     },
+    "react-dropdown": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/react-dropdown/-/react-dropdown-1.7.0.tgz",
+      "integrity": "sha512-zFZ73pgLA32hArpE4j/7DtOEhOMg240XG5QvbAb0/VinGekkHDVIakMyAFUKC5jDz8jqXEltgriqFW9R5iCtPQ==",
+      "requires": {
+        "classnames": "^2.2.3"
+      }
+    },
     "react-easy-crop": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-2.1.1.tgz",
@@ -14323,9 +14424,9 @@
       "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q=="
     },
     "react-google-login": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-5.1.3.tgz",
-      "integrity": "sha512-QMNzjekgJWA5T0iwDa4ZwhZBRMX5vwaaeo9bzyaj89P+JJyXrPR039PuotX6BdV5cyJAKBiloMxcbgnQgaPqcw==",
+      "version": "5.1.21",
+      "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-5.1.21.tgz",
+      "integrity": "sha512-z5LtNOc9FZgrkwnqpnzN/hWqG/Tg5+9gKDz0hIHx82U48TkcXvD3HjhhbAzM5OsyFGRE39GnaC4SdB3mpWGX6A==",
       "requires": {
         "@types/react": "*",
         "prop-types": "^15.6.0"
@@ -14361,11 +14462,30 @@
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
       "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
     },
+    "react-lifecycles-compat": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+    },
     "react-recaptcha": {
       "version": "2.3.10",
       "resolved": "https://registry.npmjs.org/react-recaptcha/-/react-recaptcha-2.3.10.tgz",
       "integrity": "sha512-IyanbozsYCuHvTYDuskZTIEcRAMG/sdvAu5b29iQWoC8Kd3Zk9WGCv2oNxh6RfGHvSvgHAyaLjmC6ei/yMsJ7g=="
     },
+    "react-redux": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz",
+      "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==",
+      "requires": {
+        "@babel/runtime": "^7.1.2",
+        "hoist-non-react-statics": "^3.3.0",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.1.0",
+        "prop-types": "^15.6.1",
+        "react-is": "^16.6.0",
+        "react-lifecycles-compat": "^3.0.0"
+      }
+    },
     "react-responsive-carousel": {
       "version": "3.2.3",
       "resolved": "https://registry.npmjs.org/react-responsive-carousel/-/react-responsive-carousel-3.2.3.tgz",
@@ -14872,6 +14992,67 @@
         "minimatch": "3.0.4"
       }
     },
+    "redux": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
+      "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
+      "requires": {
+        "loose-envify": "^1.4.0",
+        "symbol-observable": "^1.2.0"
+      }
+    },
+    "redux-thunk": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
+      "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+    },
+    "redux-token-auth": {
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/redux-token-auth/-/redux-token-auth-0.19.0.tgz",
+      "integrity": "sha512-z+/WX/RIImGZWn/aUIId2D92ULH2bII7tkc9YyBXGKriinyf9zMHjGE5TGHZkSMFjjXmeGzybCsWCJDq7cwmRw==",
+      "requires": {
+        "@types/react": "^16.0.5",
+        "@types/react-redux": "^5.0.9",
+        "axios": "^0.16.2",
+        "react": "^15.6.1",
+        "react-redux": "^5.0.6",
+        "redux": "^3.7.2"
+      },
+      "dependencies": {
+        "axios": {
+          "version": "0.16.2",
+          "resolved": "https://registry.npmjs.org/axios/-/axios-0.16.2.tgz",
+          "integrity": "sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=",
+          "requires": {
+            "follow-redirects": "^1.2.3",
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "react": {
+          "version": "15.6.2",
+          "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
+          "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
+          "requires": {
+            "create-react-class": "^15.6.0",
+            "fbjs": "^0.8.9",
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.0",
+            "prop-types": "^15.5.10"
+          }
+        },
+        "redux": {
+          "version": "3.7.2",
+          "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
+          "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+          "requires": {
+            "lodash": "^4.2.1",
+            "lodash-es": "^4.2.1",
+            "loose-envify": "^1.1.0",
+            "symbol-observable": "^1.0.3"
+          }
+        }
+      }
+    },
     "regenerate": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -15090,6 +15271,11 @@
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
     },
+    "reselect": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz",
+      "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
+    },
     "resolve": {
       "version": "1.15.1",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
@@ -16566,6 +16752,11 @@
         }
       }
     },
+    "symbol-observable": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+      "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+    },
     "symbol-tree": {
       "version": "3.2.4",
       "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -16924,6 +17115,11 @@
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz",
       "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w=="
     },
+    "ua-parser-js": {
+      "version": "0.7.21",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz",
+      "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ=="
+    },
     "uglify-js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz",
diff --git a/package.json b/package.json
index f1406e90..0c6c8b76 100644
--- a/package.json
+++ b/package.json
@@ -7,17 +7,19 @@
     "@material-ui/icons": "^4.5.1",
     "@material-ui/lab": "^4.0.0-alpha.40",
     "@material-ui/styles": "^4.9.0",
+    "@reduxjs/toolkit": "^1.4.0",
     "axios": "^0.19.2",
     "base64-img": "^1.0.4",
     "binary-extensions": "^2.0.0",
     "build": "^0.1.4",
     "image-to-base64": "^2.0.1",
     "material-design-icons": "^3.0.1",
-    "moment": "^2.24.0",
+    "moment": "^2.25.3",
     "react": "^16.12.0",
     "react-dom": "^16.12.0",
+    "react-dropdown": "^1.7.0",
     "react-easy-crop": "^2.1.0",
-    "react-google-login": "^5.0.7",
+    "react-google-login": "^5.1.21",
     "react-grid-system": "^4.4.11",
     "react-icons": "^3.8.0",
     "react-input-mask": "^2.0.4",
@@ -26,6 +28,9 @@
     "react-router-dom": "^5.1.2",
     "react-scripts": "^2.1.8",
     "react-star-ratings": "^2.3.0",
+    "redux": "^4.0.5",
+    "redux-thunk": "^2.3.0",
+    "redux-token-auth": "^0.19.0",
     "styled-components": "^4.4.1",
     "typescript": "^3.7.5"
   },
diff --git a/public/index.html b/public/index.html
index 2e5c176d..abb624ca 100755
--- a/public/index.html
+++ b/public/index.html
@@ -20,6 +20,10 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 <html lang="pt-br">
   <head>
     <meta charset="utf-8" />
+		<!-- google sign-in -->
+		<meta name="google-signin-client_id" content="288460085642-k4veg4fo8kddvjer8b055n9da5qtgha7.apps.googleusercontent.com">
+    <script src="https://apis.google.com/js/platform.js" async defer></script>
+
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <title>Portal MEC</title>
   </head>
diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js
index 3aef0866..43bfdbeb 100644
--- a/src/Components/LoginContainerFunction.js
+++ b/src/Components/LoginContainerFunction.js
@@ -96,6 +96,8 @@ export default function LoginContainer (props) {
     //arrumar isso
     const responseGoogle = (response) => {
       console.log(response);
+			let profile = response.getBasicProfile();
+
     }
 
     return (
@@ -111,16 +113,15 @@ export default function LoginContainer (props) {
                 </DialogHeaderStyled>
 
                 <DialogContentDiv>
-                    {/*<SocialConnectDiv>
+                    <SocialConnectDiv>
                         <StyledGoogleLoginButton
-                            clientId="658977310896-knrl3gka66fldh83dao2rhgbblmd4un9.apps.googleusercontent.com"
-                            onSuccess={responseGoogle}
-                            onFailure={responseGoogle}
-                            cookiePolicy={'single_host_origin'}
-                        >
-                        <span style={{textTransform:"none", fontSize:"13px", color : "#666"}}>Usando o Google</span>
-                        </StyledGoogleLoginButton>
-                    </SocialConnectDiv>*/}
+													clientId="288460085642-k4veg4fo8kddvjer8b055n9da5qtgha7.apps.googleusercontent.com"
+													buttonText="Entrar com o Google"
+													onSuccess={responseGoogle}
+													onFailure={responseGoogle}
+													cookiePolicy={'single_host_origin'}
+                        />
+                    </SocialConnectDiv>
 
                     <H3Div>
                         <H3Styled>
@@ -239,7 +240,8 @@ export default function LoginContainer (props) {
     border : 1px solid rgb(66, 133, 244);
     box-shadow: 0 0 0 1px #4285f4 !important;
     :hover {
-    background-color: #f4f4f4 !important;
+			background-color: #f4f4f4 !important;
+			cursor: pointer;
     }
     `
 
diff --git a/src/Store.js b/src/Store.js
index 8a8c0e96..12cfe744 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -17,9 +17,15 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React from 'react'
+import { combineReducers } from 'redux'
+import { reduxTokenAuthReducer } from 'redux-token-auth'
 
 export const Store = React.createContext()
 
+export const rootReducer = combineReducers({
+	reduxTokenAuth: reduxTokenAuthReducer,
+})
+
 const initialState = {
   searchOpen: false,
   userIsLoggedIn : false,
diff --git a/src/env.js b/src/env.js
index 1f221ee7..a38b4456 100644
--- a/src/env.js
+++ b/src/env.js
@@ -25,6 +25,9 @@ var simcaqAPIDomain = 'https://www.simcaq.c3sl.ufpr.br/api',
     apiVersion = 'v1',
     simcaqAPIurl = simcaqAPIDomain + '/' + apiVersion
 
+var authUrl = '288460085642-k4veg4fo8kddvjer8b055n9da5qtgha7.apps.googleusercontent.com';
+
 export {apiUrl};
 export {apiDomain};
 export {simcaqAPIurl}
+export {authUrl};
diff --git a/src/index.js b/src/index.js
index 7759fd80..a72c1a9a 100755
--- a/src/index.js
+++ b/src/index.js
@@ -24,11 +24,21 @@ import './index.css';
 import App from './App.js'
 import { StoreProvider } from './Store';
 
+import { configureStore } from '@reduxjs/toolkit';
+import { verifyCredentials } from './redux-token-auth-config';
+import { Provider } from 'react-redux'
+import { rootReducer } from './Store';
+
+const redux_store = configureStore({reducer: rootReducer});
+verifyCredentials(redux_store);
+
 
 ReactDOM.render(
-  <StoreProvider>
-    <App />
-  </StoreProvider>
+	<Provider store={redux_store}>
+		<StoreProvider>
+			<App />
+		</StoreProvider>
+	</Provider>
   , document.getElementById('root'));
 
 // If you want your app to work offline and load faster, you can change
diff --git a/src/redux-token-auth-config.js b/src/redux-token-auth-config.js
new file mode 100644
index 00000000..9e4e94cd
--- /dev/null
+++ b/src/redux-token-auth-config.js
@@ -0,0 +1,27 @@
+import { generateAuthActions } from 'redux-token-auth'
+import { authUrl } from './env'
+
+const config = {
+  authUrl,
+  userAttributes: {
+    firstName: 'first_name',
+    imageUrl: 'image',
+  },
+  userRegistrationAttributes: {
+    firstName: 'first_name',
+  },
+}
+
+const {
+  registerUser,
+  signInUser,
+  signOutUser,
+  verifyCredentials,
+} = generateAuthActions(config)
+
+export {
+  registerUser,
+  signInUser,
+  signOutUser,
+  verifyCredentials,
+}
diff --git a/src/redux/initial-state.js b/src/redux/initial-state.js
new file mode 100644
index 00000000..fd3e9011
--- /dev/null
+++ b/src/redux/initial-state.js
@@ -0,0 +1,14 @@
+const initialState = {
+  reduxTokenAuth: {
+    currentUser: {
+      isLoading: false,
+      isSignedIn: false,
+      attributes: {
+        firstName: null, // <-- Just an example. Attributes are whatever you specify in your cofig (below).
+      },
+    },
+  },
+  // All your other state
+}
+
+export default initialState
-- 
GitLab