diff --git a/src/components/Auth.jsx b/src/components/Auth.jsx new file mode 100644 index 0000000..1dc3ebf --- /dev/null +++ b/src/components/Auth.jsx @@ -0,0 +1,64 @@ +import React, {useState} from 'react'; +import {Redirect} from "react-router-dom"; +import queryString from "query-string"; + +import {get_auth, obtain_code} from "../services/auth_service"; +import {useStateValue} from "../services/State"; + +export const AuthCallback = (props) => { + return null; +} + +export const AuthLogin = (props) => { + const [response, setResponse] = useState(null); + const [context, dispatch] = useStateValue(); + + if (window.localStorage.getItem('refresh_token')) { + } + + if (!response) { + if (context.user.auth) { + return + } + + if (!window.localStorage.getItem('code_verifier')) { + const {redirect, code_verifier} = obtain_code(); + window.localStorage.setItem('code_verifier', code_verifier); + window.location.href = redirect; + return null; + } + + const parsedParams = queryString.parse(props.location.search); + if (parsedParams.error) { + console.log(parsedParams.error); + window.localStorage.removeItem('code_verifier'); + return + } + + const code = parsedParams.code; + const code_verifier = window.localStorage.getItem('code_verifier'); + get_auth(code, code_verifier).then((response) => setResponse(response)); + + return null; + } else { + console.log(response); + + window.localStorage.removeItem('code_verifier'); + + const refresh = response.refresh_token; + const expires = new Date(new Date().getTime() + ((response.expires_in) * 1000)) + + window.localStorage.setItem('refresh_token', refresh); + window.localStorage.setItem('expires', expires); + + dispatch({type: 'login', user: {auth: true, access_token: response.access_token}}); + + return + } +} + +export const AuthLogout = (props) => { + const [context, dispatch] = useStateValue(); + dispatch({action: 'logout', user: {auth: false}}) + return +} diff --git a/src/components/Nav.jsx b/src/components/Nav.jsx index 58f63cb..67afdbd 100644 --- a/src/components/Nav.jsx +++ b/src/components/Nav.jsx @@ -3,12 +3,9 @@ import {Link} from "react-router-dom"; import './Nav.scss'; import {useStateValue} from '../services/State' -export const Nav = () => { +export const Nav = (props) => { const [context, dispatch] = useStateValue(); - const handleLogin = () => dispatch({type: 'login', user: {auth: true}}) - const handleLogout = () => dispatch({type: 'logout', user: {auth: false}}) - const showLogin = () => { return context.user.auth === false; } @@ -17,7 +14,7 @@ export const Nav = () => { if (showLogin()) { return
  • - + Iniciar Sesión
  • Registrate @@ -26,10 +23,10 @@ export const Nav = () => { }else { return
    • - Bienvenido + Bienvenido {context.user.access_token}
    • - + Cerrar Sesión
    } diff --git a/src/index.jsx b/src/index.jsx index 2d8d1ef..9870bb3 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -19,6 +19,7 @@ import {ReleaseView} from "./views/Release"; import {Recomended} from "./views/Recomended"; import {SongView} from "./views/Song"; import {Grid, RowCol} from './components/Grid'; +import {AuthCallback, AuthLogin, AuthLogout} from "./components/Auth"; const Main = (props) => { const navigate = (query) => props.history.push(`/search?query=${query}`); @@ -50,10 +51,16 @@ const App = () => (