diff --git a/frontend/.env b/frontend/.env deleted file mode 100644 index 1786301..0000000 --- a/frontend/.env +++ /dev/null @@ -1 +0,0 @@ -REACT_APP_DEVCHALLENGE_API=http://localhost:3333 \ No newline at end of file diff --git a/frontend/src/App.js b/frontend/src/App.js index c368411..ccf2d83 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -1,8 +1,14 @@ import React from 'react'; import Routes from './routes'; +import { AuthProvider } from './contexts/AuthContext'; + function App() { - return ; + return ( + + + + ); } export default App; diff --git a/frontend/src/components/Header/index.js b/frontend/src/components/Header/index.js index 270470b..a0a5ece 100644 --- a/frontend/src/components/Header/index.js +++ b/frontend/src/components/Header/index.js @@ -4,7 +4,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faBars, faTimes } from '@fortawesome/free-solid-svg-icons'; import { faGithub } from '@fortawesome/free-brands-svg-icons'; -import Logo from '../Logo' +import Logo from '../Logo'; import * as S from './styled'; @@ -49,7 +49,10 @@ export default function Header() {
  • - + Entrar { + const [user, setUser] = useState({}); + + return ( + + {children} + + ); +}; + +export { AuthContext, AuthProvider }; diff --git a/frontend/src/pages/CallbackPage/index.js b/frontend/src/pages/CallbackPage/index.js new file mode 100644 index 0000000..a13f3a6 --- /dev/null +++ b/frontend/src/pages/CallbackPage/index.js @@ -0,0 +1,48 @@ +/* eslint-disable no-shadow */ +import React, { useEffect, useCallback, useContext } from 'react'; +import { useHistory, useLocation } from 'react-router-dom'; + +import { AuthContext } from '../../contexts/AuthContext'; + +import api from '../../services/api'; +import { login } from '../../services/authentication'; + +import Logo from '../../components/Logo'; + +import * as S from './styled'; + +export default function CallbackPage() { + const history = useHistory(); + + const { search } = useLocation(); + const searchParam = new URLSearchParams(search); + + const code = searchParam.get('code'); + + const { setUser } = useContext(AuthContext); + + const authenticateUserWithGithub = useCallback( + async (code) => { + const response = await api.get( + `http://localhost:3333/auth/${code}` + ); + if (response.status === 200 || response.status === 201) { + setUser(response.data.user); + login(response.data.token); + history.push('/dashboard'); + } + }, + [history, setUser] + ); + + useEffect(() => { + authenticateUserWithGithub(code); + }, [code, authenticateUserWithGithub]); + + return ( + + +

    Aguardando as informações...

    +
    + ); +} diff --git a/frontend/src/pages/CallbackPage/styled.js b/frontend/src/pages/CallbackPage/styled.js new file mode 100644 index 0000000..e12830d --- /dev/null +++ b/frontend/src/pages/CallbackPage/styled.js @@ -0,0 +1,15 @@ +import styled from 'styled-components'; + +export const Container = styled.div` + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + margin-top: 10%; + + h2 { + color: white; + margin-top: 20px; + } + +` diff --git a/frontend/src/pages/ConstructPage/index.js b/frontend/src/pages/ConstructPage/index.js deleted file mode 100644 index 29e12b0..0000000 --- a/frontend/src/pages/ConstructPage/index.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; - -import pageInConstruction from '../../assets/page-under-construction.png'; -import Header from '../../components/Header'; - -function ConstructPage() { - return ( - <> -
    -
    - -

    Pagina em Construção

    -
    - - ); -} - -export default ConstructPage; diff --git a/frontend/src/routes.js b/frontend/src/routes.js index 082d594..a666709 100644 --- a/frontend/src/routes.js +++ b/frontend/src/routes.js @@ -1,6 +1,8 @@ import React from 'react'; import { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom'; +import { isAuthenticated as logged } from './services/authentication'; + import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import Home from './pages/Home'; @@ -15,15 +17,15 @@ import Footer from './components/Footer'; import ToDoChallenge from './pages/ToDoChallenge'; import { Container } from './styles/GlobalStyles'; -import ConstructPage from './pages/ConstructPage'; +import CallbackPage from './pages/CallbackPage'; -const logged = false; const LoggedRoute = ({ component: Component, ...rest }) => ( + - logged ? ( + logged() ? ( ) : ( + @@ -55,7 +58,6 @@ function Routes() { component={MyChallenges} /> -