From fcbb13b3890a0fd88156383566a16964bdd369e1 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Fri, 29 Jan 2021 11:06:48 -0300
Subject: [PATCH] centralized all axios calls and deleted all useless files

---
 src/Components/AreasSubPages.js               |  14 +-
 src/Components/Comment.js                     |  52 ++-----
 src/Components/ContactButtons/FollowButton.js |  52 ++-----
 .../ContactButtons/FollowingButton.js         |  29 +---
 src/Components/ContactCardOptions.js          |  28 +---
 src/Components/ContactForm.js                 |  31 +---
 src/Components/CriarColecaoForm.js            |  26 +---
 src/Components/EditarColecaoForm.js           |  36 ++---
 src/Components/Firulas.js                     |  20 +--
 src/Components/FollowCollectionButton.js      | 119 ++++----------
 src/Components/GuardarModal.js                |  56 +++----
 src/Components/Header.js                      |  90 ++++-------
 .../FormValidationFunction.js                 |   0
 .../HelperFunctions/getAxiosConfig.js         | 116 ++++++++++++--
 src/Components/IframeOverlay/DrawerContent.js |  17 +-
 src/Components/IllegalContentModal.js         |  14 +-
 src/Components/LoginContainerFunction.js      |   2 +-
 src/Components/LoginModal.js                  |  54 +++----
 src/Components/MenuList.js                    |  40 ++---
 src/Components/MobileDrawerMenu.js            |  41 ++---
 .../ComponentAlterarAvatar.js                 |  49 ++----
 .../ComponentAlterarCover.js                  |  48 ++----
 src/Components/ModalConfirmarCuradoria.js     |  20 +--
 src/Components/ModalExcluirColecao.js         |  22 +--
 src/Components/NotificationsInner.js          |  26 ++--
 .../PageProfessorComponents/PartOne.js        |   1 -
 .../PublicationPermissionsContent.js          |  19 +--
 src/Components/ReportModal.js                 |  20 +--
 src/Components/ResourceCardFunction.js        |  31 ++--
 .../ResourcePageComponents/CommentForm.js     |  33 ++--
 .../ResourcePageComponents/CommentsArea.js    |  21 ++-
 .../ResourcePageComponents/TextoObjeto.js     |  24 +--
 src/Components/SignUpContainerFunction.js     |   2 +-
 src/Components/SignUpModal.js                 |  76 ++++-----
 src/Components/TabPanels/Breadcrumbs.js       |  23 ++-
 .../PanelComponents/TemplateColecao.js        |   6 +-
 .../PublicUserPageTabs/LastCollections.js     |  18 +++
 .../PublicUserPageTabs/LastLearnObj.js        |  18 +++
 .../PublicUserPageTabs/TabColecoes.js         |  18 +++
 .../TabPanels/PublicUserPageTabs/TabInicio.js |  18 +++
 .../PublicUserPageTabs/TabRecursos.js         |  18 +++
 .../TabPanels/PublicUserPageTabs/TabRede.js   |  63 ++++----
 .../PublicUserPageTabs/UserDescription.js     |  18 +++
 .../TabPanels/TabPanelStatusEConquistas.js    |  21 ++-
 .../UserPageTabs/ModalExcluirConta.js         |  26 ++--
 .../TabPanels/UserPageTabs/PanelAtividades.js |  33 ++--
 .../TabPanels/UserPageTabs/PanelColecoes.js   |  36 ++---
 .../TabPanels/UserPageTabs/PanelCuradoria.js  |  21 +--
 .../UserPageTabs/PanelEditarPerfil.js         |   8 +-
 .../TabPanels/UserPageTabs/PanelFavoritos.js  |  39 ++---
 .../UserPageTabs/PanelGerenciarConta.js       |   2 +-
 .../UserPageTabs/PanelMeusRecursos.js         |  50 +++---
 .../TabPanels/UserPageTabs/PanelRede.js       |  43 ++----
 .../PanelSolicitarContaProfessor.js           |   8 -
 .../UploadPageComponents/ButtonsDiv.js        |   1 +
 .../UploadPageComponents/FileToUpload.ts      |  18 +++
 .../UploadPageComponents/FileUploadStage.js   |  19 +--
 .../UploadPageComponents/ModalCancelar.js     |  34 ++--
 .../UploadPageComponents/PartOne.js           |  37 +----
 .../UploadPageComponents/PartThree.js         |  35 ++---
 .../UploadPageComponents/PartTwo.js           |  44 ++----
 .../CustomCircularProgress.js                 |  18 +++
 .../PartTwoComponents/DisplayThumbnail.js     |  18 +++
 .../PartTwoComponents/EditThumbnail.js        |  18 +++
 .../UploadPageComponents/ReactFileToUpload.js |   8 +-
 .../UploadPageComponents/SendInfo.js          |  41 ++---
 .../UploadPageComponents/Stepper.js           |  18 +++
 .../UploadPageComponents/UploadFileWrapper.js |  34 ++--
 src/Components/UserCard.js                    |  18 ---
 src/Components/UserPageComponents/Avatar.js   |   4 +-
 src/Components/UserPageComponents/Cover.js    |   6 +-
 src/Pages/EditLearningObjectPage.js           | 146 ++++++------------
 src/Pages/EditProfilePage.js                  |  82 ++++------
 src/Pages/PageProfessor.js                    |  31 ++--
 src/Pages/PasswordRecoveryPage.js             |  21 +--
 src/Pages/ProfilePage.js                      |  30 ----
 src/Pages/PublicUserPage.js                   |  43 ++----
 src/Pages/ResourcePage.js                     |  45 ++----
 src/Pages/UploadPage.js                       |  55 +++----
 src/Pages/UserPage.js                         |  74 +++------
 src/Store.js                                  |  23 ++-
 81 files changed, 1092 insertions(+), 1545 deletions(-)
 rename src/Components/{ => HelperFunctions}/FormValidationFunction.js (100%)
 delete mode 100644 src/Components/UserCard.js
 delete mode 100644 src/Pages/ProfilePage.js

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index fb21567d..b61d0937 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -17,8 +17,6 @@ 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, { Component } from "react";
-import axios from "axios";
-import { apiUrl } from "../env";
 import "./carousel.css";
 import { Col, Row, Container, Hidden, Visible } from "react-grid-system";
 import MaterialCard from "./MaterialCard";
@@ -52,7 +50,8 @@ class ReqResources extends Component {
   }
 
 componentDidMount() {
-    makeAxiosGetRequest(`/learning_objects?limit=12&sort=["published_at", "desc"]`, (data) => {this.setState({ resources: data })}, () => {console.log('error AreasSubPages')})
+    const url = `/learning_objects?limit=12&sort=["published_at", "desc"]`
+    makeAxiosGetRequest(url, (data) => {this.setState({ resources: data })}, (error) => {console.log(error)})
 }
   render() {
     var row1 = this.state.resources.slice(0, 4);
@@ -137,12 +136,9 @@ class ReqCollections extends Component {
     };
   }
   componentDidMount() {
-    axios
-      .get(`${apiUrl}/collections?limit=12&sort=["updated_at", "desc"]`)
-      .then((res) => {
-        this.setState({ collections: res.data });
-        console.log(res.data);
-      });
+      const url = `/collections?limit=12&sort=["updated_at", "desc"]`
+
+      makeAxiosGetRequest(url, (data) => {this.setState({ collections: data })}, (error) => {console.log(error)})
   }
   render() {
     var row1 = this.state.collections.slice(0, 4);
diff --git a/src/Components/Comment.js b/src/Components/Comment.js
index 51850497..374ec115 100644
--- a/src/Components/Comment.js
+++ b/src/Components/Comment.js
@@ -28,11 +28,10 @@ import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import EditIcon from '@material-ui/icons/Edit';
 import TextField from "@material-ui/core/TextField";
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
 import ModalExcluir from './ModalExcluirComentario.js'
+import {makeAxiosPutRequest, makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Comment (props) {
 
@@ -75,18 +74,16 @@ export default function Comment (props) {
         setComment({...comment, error : flag, value : userInput})
     }
 
+    function handleOnSuccessfulComment (data) {
+        setDisplayedComment(comment.value)
+        setEditando(false)
+        props.handleSnackbar(2)
+    }
+
     const updateComment = () => {
         const finalComment = comment
         if (!finalComment.error) {
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid'),
-                }
-            }
+
             let payload = {
                 "review" : {
                     "name":null,
@@ -96,35 +93,19 @@ export default function Comment (props) {
                     "review_ratings_attributes" : props.reviewRatings
                 }
             }
+            makeAxiosPutRequest(`/learning_objects/${props.objectID}/reviews/`, payload, handleOnSuccessfulComment, (error) => {console.log(error)})
 
-            axios.put( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID),payload, config
-            ).then((response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                setDisplayedComment(finalComment.value)
-                setEditando(false)
-                props.handleSnackbar(2)
-            }, (error) => {console.log(error)})
         }
     }
 
+    function handleSuccessDeleteComment (data) {
+        props.rerenderCallback()
+        props.handleSnackbar(3)
+    }
+
     const deleteComment = () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                'Uid': sessionStorage.getItem('@portalmec/uid'),
-            }
-        }
-        axios.delete( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID), config).then((response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            props.rerenderCallback(); props.handleSnackbar(3)}, (error) => {console.log(error)})
+
+        makeAxiosDeleteRequest(`/learning_objects/${props.objectID}/reviews/${props.reviewID}`, handleSuccessDeleteComment, (error) => {console.log(error)})
 
         toggleModal(false)
 
@@ -327,4 +308,3 @@ const AvatarDiv = styled.div`
         vertical-align : middle;
     }
 `
-
diff --git a/src/Components/ContactButtons/FollowButton.js b/src/Components/ContactButtons/FollowButton.js
index 4faddda7..bb3f2ac2 100644
--- a/src/Components/ContactButtons/FollowButton.js
+++ b/src/Components/ContactButtons/FollowButton.js
@@ -20,32 +20,19 @@ import React from 'react'
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
 import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
-import axios from 'axios'
-import {apiUrl} from '../../env';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowButton (props) {
 
-    const handleFollow = (followerID) => {
-        const id = followerID
-        console.log('id: ', id)
-
-        let payload = {}
-        const header = getAxiosConfig()
-
-        axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                props.toggleFollowed()
-            },
-            (error) => {
-                  console.log(error)
-            }
-        )
+    function handleSuccess (data) {
+        props.toggleFollowed()
+    }
 
+    const handleFollow = (followerID) => {
+        if (followerID !== undefined) {
+            const url = `/users/${followerID}/follow/`
+            makeAxiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
+        }
     }
 
     return (
@@ -62,24 +49,9 @@ export default function FollowButton (props) {
 export function NoIcon (props) {
 
     const handleFollow = (followerID) => {
-        const id = followerID
-        console.log('id: ', id)
-
-        if (id !== undefined) {
-            let payload = {}
-            const header = getAxiosConfig()
-
-            axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-                (response) => {
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                    console.log(response)
-                },
-                (error) => {
-                      console.log(error)
-                }
-            )
+        if (followerID !== undefined) {
+            const url = `/users/${followerID}/follow/`
+            makeAxiosPutRequest(url, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Components/ContactButtons/FollowingButton.js b/src/Components/ContactButtons/FollowingButton.js
index 6fa7464a..b76f6291 100644
--- a/src/Components/ContactButtons/FollowingButton.js
+++ b/src/Components/ContactButtons/FollowingButton.js
@@ -21,9 +21,7 @@ import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
 import FollowingIcon from '../../img/how_to_reg-24px.png'
 import ModalConfirmarUnfollow from '../ModalConfirmarUnfollow.js'
-import axios from 'axios'
-import {apiUrl} from '../../env';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowingButton (props) {
 
@@ -38,26 +36,15 @@ export default function FollowingButton (props) {
         toggleModal(true)
     }
 
-    const handleUnfollowPartTwo = () => {
-        const id = unfollowID
-        console.log('id: ', id)
 
-        let payload = {}
-        const header = getAxiosConfig()
+    function handleSuccess (data) {
+        props.toggleFollowed()
+        toggleModal(false)
+    }
+    const handleUnfollowPartTwo = () => {
+        const url = `/users/${unfollowID}/follow/`
 
-        axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                props.toggleFollowed()
-                toggleModal(false)
-            },
-            (error) => {
-                  console.log(error)
-            }
-        )
+        makeAxiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ContactCardOptions.js b/src/Components/ContactCardOptions.js
index 99de8ca9..0f122c0d 100644
--- a/src/Components/ContactCardOptions.js
+++ b/src/Components/ContactCardOptions.js
@@ -26,9 +26,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import OpenIcon from '@material-ui/icons/OpenInNew';
 import ReportIcon from '@material-ui/icons/Error';
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
-import axios from 'axios'
-import {apiUrl} from '../env';
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 import ReportModal from './ReportModal.js'
 import {Link} from 'react-router-dom'
 
@@ -44,33 +42,13 @@ export default function SimpleMenu(props) {
         setAnchorEl(null);
     }
     const handleFollow = (followerID) => {
-        const id = followerID
-        console.log('id: ', id)
-
-        let payload = {}
-        const header = getAxiosConfig()
-        axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+
+        makeAxiosPutRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
     }
 
     const [reportModal, toggleReportModal] = useState(false)
     const handleModal = (value) => {
         toggleReportModal(value)
-        // {/*if (state.currentUser.id) {
-        //     toggleReportModal(!reportModal)
-        // }
-        // else {
-        //     toggleLoginModal(true)
-        // }*/}
     }
 
   return (
diff --git a/src/Components/ContactForm.js b/src/Components/ContactForm.js
index b00d2f32..7231f6d3 100644
--- a/src/Components/ContactForm.js
+++ b/src/Components/ContactForm.js
@@ -19,11 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, { useState } from 'react';
 import styled from 'styled-components';
 import FormInput from "../Components/FormInput.js"
-import axios from 'axios'
-import {apiUrl} from '../env';
-
-
-
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 const Button = styled.button`
 
@@ -187,27 +183,16 @@ const Button = styled.button`
       console.log(!(nome.dict.key && email.dict.key && mensagem.dict.key ))
       // Se não houver erro em nunhum dos campos E nenhum dos campos for vazio: a página faz o contato com o backend e os campos ficam em branco no formulário
       if (!(nome.dict.key || email.dict.key || mensagem.dict.key )) {
-
-        axios.post(`${apiUrl}/contacts`,
-            {
+          let payload = {
               contact : {
-                name: nome.dict.value,
-                email: email.dict.value,
-                message: mensagem.dict.value
+                  name: nome.dict.value,
+                  email: email.dict.value,
+                  message: mensagem.dict.value
               }
-
-        }
-        ).then()
-
-
-
-        limpaTudo();
-
-      }
-
-
-
+            }
+            makeAxiosPostRequest(`/contacts`, payload, (data) => {limpaTudo()}, (error) => {console.log(error)})
   }
+}
 
 
 
diff --git a/src/Components/CriarColecaoForm.js b/src/Components/CriarColecaoForm.js
index 9eada322..86eb3f78 100644
--- a/src/Components/CriarColecaoForm.js
+++ b/src/Components/CriarColecaoForm.js
@@ -25,8 +25,7 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function CriarColecaoForm (props) {
     const {state} = useContext(Store)
@@ -59,6 +58,9 @@ export default function CriarColecaoForm (props) {
         })
     }
 
+    function handleSuccess (data) {
+        props.finalize(data.id)
+    }
     const formSubmit = (e) => {
         e.preventDefault()
 
@@ -66,7 +68,6 @@ export default function CriarColecaoForm (props) {
         const finalRadioValue = value === 'pública' ? 'public' : 'private'
         const finalColName = colName
 
-        console.log(finalRadioValue, finalColName.value)
         if(!(finalColName.key)) {
             let payload = {
                 "collection" : {
@@ -76,25 +77,8 @@ export default function CriarColecaoForm (props) {
                     "privacy" : finalRadioValue
                 }
             }
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid')
-                }
-            }
+            makeAxiosPostRequest( `/collections/`, payload, handleSuccess, (error) =>{console.log(error)})
 
-            axios.post( (`${apiUrl}/collections/`), payload, config
-            ).then(
-                (response) => {
-                    console.log(response)
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                    props.finalize(response.data.id)
-                }, (error) =>{console.log(error)})
         }
     }
 
diff --git a/src/Components/EditarColecaoForm.js b/src/Components/EditarColecaoForm.js
index a078b1af..0f1a5d43 100644
--- a/src/Components/EditarColecaoForm.js
+++ b/src/Components/EditarColecaoForm.js
@@ -25,22 +25,19 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import axios from 'axios'
-import {apiUrl} from '../env';
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
+import {makeAxiosGetRequest, makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function EditarColecaoForm (props) {
     const {state} = useContext(Store)
 
+    function handleSuccessfulGet (data) {
+        setColName({key : false, value : data.name})
+        setValue( data.privacy === 'public' ? 'pública' : 'privada')
+        handleColDescription(data.description)
+    }
+
     useEffect(() => {
-        axios.get(`${apiUrl}/collections/${props.id}`).then(
-        (res) => {
-            setColName({key : false, value : res.data.name})
-            setValue( res.data.privacy === 'public' ? 'pública' : 'privada')
-            handleColDescription(res.data.description)
-        },
-        (err) => {console.log(err)}
-        )
+        makeAxiosGetRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
     }, [])
 
     const [value, setValue] = useState(-1);
@@ -71,6 +68,9 @@ export default function EditarColecaoForm (props) {
         })
     }
 
+    function handleSuccessfulSubmit (data) {
+        props.finalize(data.id)
+    }
     const formSubmit = (e) => {
         e.preventDefault()
 
@@ -78,7 +78,6 @@ export default function EditarColecaoForm (props) {
         const finalRadioValue = value === 'pública' ? 'public' : 'private'
         const finalColName = colName
 
-        console.log(finalRadioValue, finalColName.value)
         if(!(finalColName.key)) {
             let payload = {
                 "collection" : {
@@ -88,17 +87,8 @@ export default function EditarColecaoForm (props) {
                     "privacy" : finalRadioValue
                 }
             }
-            let config = getAxiosConfig()
-
-            axios.put( (`${apiUrl}/collections/${props.id}`), payload, config
-            ).then(
-                (response) => {
-                    console.log(response)
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                    props.finalize(response.data.id)
-                }, (error) =>{console.log(error)})
+
+            makeAxiosPutRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
         }
     }
 
diff --git a/src/Components/Firulas.js b/src/Components/Firulas.js
index 526ff7ab..0c65a12c 100644
--- a/src/Components/Firulas.js
+++ b/src/Components/Firulas.js
@@ -1,29 +1,19 @@
 import React, {useState} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import styled from 'styled-components'
 import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import {LikeCounter, ButtonNoWidth} from '../Components/ResourceCardFunction.js'
 import FavoriteIcon from '@material-ui/icons/Favorite';
+import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Firulas (props) {
     const [liked, setLiked] = useState(props.liked)
 
+    function handleSuccess (data) {
+        setLiked(!liked)
+    }
     const handleLike = () => {
-        let payload = {}
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                'Uid': sessionStorage.getItem('@portalmec/uid'),
-            }
-        }
-
-        axios.put( (`${apiUrl}/learning_objects/` + props.recursoId + '/like'),payload, config
-    ).then( (response) => {setLiked(!liked)}, (error) => {console.log(error)})
+        makeAxiosPutRequest(`/learning_objects/${props.recursoId}/like/`, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/FollowCollectionButton.js b/src/Components/FollowCollectionButton.js
index cf7d7323..25aad567 100644
--- a/src/Components/FollowCollectionButton.js
+++ b/src/Components/FollowCollectionButton.js
@@ -22,8 +22,7 @@ import CheckIcon from '@material-ui/icons/Check';
 import AddIcon from '@material-ui/icons/Add';
 import styled from 'styled-components';
 import SignUpModal from './SignUpModal.js';
-import axios from 'axios';
-import { apiUrl } from '../env';
+import {makeAxiosGetRequest, makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function FollowCollectionButton(props) {
 	const [icon, setIcon] = useState(<AddIcon fontSize="large" />);
@@ -32,34 +31,21 @@ export default function FollowCollectionButton(props) {
 	const [sign_up_open, setSignUpOpen] = useState(false);
 	const [following, setFollowing] = useState(false); //user following collection
 
+    function handleSuccessGet (data) {
+        if(data)
+            data.map((e) => {
+                if (e["followable"]["id"] === Number(props.collection_id)){
+                    setVariant("contained");
+                    setButtonText("Seguindo");
+                    setIcon(<CheckIcon fontSize="large" />)
+                    setFollowing(true);
+                }
+                return undefined
+            })
+    }
 	useEffect(() => {
-		const url = apiUrl + '/users/' + props.user_id + '/following/Collection';
-		console.log("props: ", props);
-		axios({
-			method: 'get',
-			url: url,
-			headers: {
-				'Accept': 'application/json',
-				'Content-Type': 'application/json; charset=utf-8',
-				'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-				'client': sessionStorage.getItem('@portalmec/clientToken'),
-				'uid': sessionStorage.getItem('@portalmec/uid'),
-				'If-None-Match': null
-			},
-		}).then(response => {
-			const data = [...response.data];
-			if(data)
-				data.map((e) => {
-					if (e["followable"]["id"] === Number(props.collection_id)){
-						setVariant("contained");
-						setButtonText("Seguindo");
-						setIcon(<CheckIcon fontSize="large" />)
-						setFollowing(true);
-					}
-					return undefined						
-				})
-			SaveNewHeaders(response)
-		})
+		const url = `/users/${props.user_id}/following/Collection`
+        makeAxiosGetRequest(url, handleSuccessGet, (error) => console.log(error))
 	}, []);
 
 	//handleMouse{Enter, Leave} only do anything when user follows given collection:
@@ -79,70 +65,27 @@ export default function FollowCollectionButton(props) {
 		}
 	}
 
-	const SaveNewHeaders = (response) => {
-		if (
-			(response.headers['access-token'] === undefined || response.headers['access-token'] === null) &&
-			(response.headers.client === undefined || response.headers.client === null)
-		) {
-
-		} else {
-			sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-			sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
-			console.log('saved')
-		}
-	}
-
+    function handleSuccessfulFollow (data) {
+        setVariant("contained");
+        setButtonText("Seguindo");
+        setIcon(<CheckIcon fontSize="large" />)
+        setFollowing(true);
+    }
+    function handleSuccessfulUnfollow (data) {
+        setVariant("outlined");
+        setButtonText("Seguir Coleção");
+        setIcon(<AddIcon fontSize="large" />);
+        setFollowing(false);
+    }
 	const handleClick = () => {
+        const url = `/collections/${props.collection_id}/follow`
+
 		if (!props.user_id)
 			setSignUpOpen(true);
 		else if (!following) {
-			const url = apiUrl + '/collections/' + props.collection_id + '/follow';
-			setVariant("contained");
-			setButtonText("Seguindo");
-			setIcon(<CheckIcon fontSize="large" />)
-			setFollowing(true);
-			axios({
-				method: 'put',
-				url: url,
-				headers: {
-					'Accept': 'application/json',
-					'Content-Type': 'application/json; charset=utf-8',
-					'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-					'client': sessionStorage.getItem('@portalmec/clientToken'),
-					'uid': sessionStorage.getItem('@portalmec/uid'),
-					'If-None-Match': null
-				},
-			}).then(response => {
-				if (response.status === 201)
-					setFollowing(true);
-				else if (response.status === 200)
-					setFollowing(false);
-				SaveNewHeaders(response)
-			})
+            makeAxiosPutRequest(url, {}, handleSuccessfulFollow, (error) => {console.log(error)})
 		} else {
-			const url = apiUrl + '/collections/' + props.collection_id + '/follow';
-			setVariant("outlined");
-			setButtonText("Seguir Coleção");
-			setIcon(<AddIcon fontSize="large" />);
-			setFollowing(false);
-			axios({
-				method: 'put',
-				url: url,
-				headers: {
-					'Accept': 'application/json',
-					'Content-Type': 'application/json; charset=utf-8',
-					'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-					'client': sessionStorage.getItem('@portalmec/clientToken'),
-					'uid': sessionStorage.getItem('@portalmec/uid'),
-					'If-None-Match': null
-				},
-			}).then(response => {
-				if (response.status === 201)
-					setFollowing(true);
-				else if (response.status === 200)
-					setFollowing(false);
-				SaveNewHeaders(response)
-			})
+            makeAxiosPutRequest(url, {}, handleSuccessfulUnfollow, (error) => {console.log(error)})
 		}
 	};
 
diff --git a/src/Components/GuardarModal.js b/src/Components/GuardarModal.js
index 8d4fc7ff..2f66ee51 100644
--- a/src/Components/GuardarModal.js
+++ b/src/Components/GuardarModal.js
@@ -23,14 +23,14 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../env';
+import {apiDomain} from '../env';
 import CloseIcon from '@material-ui/icons/Close';
 import PublicIcon from '@material-ui/icons/Public';
 import LockIcon from '@material-ui/icons/Lock';
 import LoadingSpinner from './LoadingSpinner.js'
 import CriarColecaoForm from './CriarColecaoForm.js'
 import SnackbarComponent from './SnackbarComponent'
+import {makeAxiosGetRequest, makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -40,60 +40,42 @@ function CloseModalButton (props) {
     )
 }
 
-function getConfig () {
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid')
-        }
-    }
-    return config
-}
-
 export default function ReportModal (props) {
     const {state} = useContext(Store)
     const [collsArr, setcolls] = useState([])
     const [loading, toggleLoading] = useState(true)
     const [creatingCol, setCreating] = useState(false)
 
+
+    function handleSuccessGetCols (data) {
+        setcolls(data)
+        toggleLoading(false)
+    }
     const getCols = () => {
         if (collsArr.length === 0) {
             const id = state.currentUser.id
-            const config = getConfig()
-
-            axios.get( (`${apiUrl}/users/` + id + '/collections'), config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                setcolls(response.data)
-                toggleLoading(false)
-            }, (error) => {console.log('error')})
+
+            const url = `/users/${id}/collections/`
+
+            makeAxiosGetRequest(url, handleSuccessGetCols, (error) => {console.log('error')})
         }
     }
 
+
+    function handleSuccessPostToCol (data) {
+        toggleSnackbar(true)
+        setCreating(false)
+        props.handleClose()
+    }
     const postToCol = (colId) => {
-        const config = getConfig()
+        const url = `/collections/${colId}/items`
         const payload = {
             "collection" : {
                 "items" : [ {"id":props.recursoId, "type":"LearningObject"} ]
             }
         }
+        makeAxiosPostRequest( url, payload, handleSuccessPostToCol, (error) => {console.log(error)})
 
-        axios.post( (`${apiUrl}/collections/` + colId + '/items'), payload, config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            toggleSnackbar(true)
-            setCreating(false)
-            props.handleClose()
-        }, (error) => {console.log(error)})
     }
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
diff --git a/src/Components/Header.js b/src/Components/Header.js
index 25edfdee..cbbf66e0 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -17,8 +17,6 @@ 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, { useContext, useState, useEffect } from 'react'
-import axios from 'axios'
-import {apiUrl} from '../env'
 import MenuBar from './MenuBar'
 import SearchBar from './SearchBar'
 import SignUpModal from './SignUpModal'
@@ -29,6 +27,7 @@ import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 import {useLocation} from 'react-router-dom'
 import MenuBarMobile from './MenuBarMobile.js'
+import {validateGoogleLoginToken} from './HelperFunctions/getAxiosConfig'
 
 //const StyledButton = styled(Button)`
 //    background : #ffa54c !important;
@@ -46,52 +45,41 @@ export default function Header(props){
   const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
   const [modalColaborar, setModalColaborar] = useState(false)
 
-  const validateToken = (config) => {
-      axios.get(`${apiUrl}/auth/validate_token/`, config).then(
-           (response) => {
-              console.log(response.data)
-              if ( response.headers['access-token'] ) {
-                  sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-              }
-              dispatch ({
-                  type: "USER_LOGGED_IN",
-                  userLoggedIn: !state.userIsLoggedIn,
-                  login: response.data.data
-                  }
-              )
-
-              sessionStorage.setItem('@portalmec/id', response.data.data.id)
-              sessionStorage.setItem('@portalmec/username', response.data.data.name)
-              sessionStorage.setItem('@portalmec/uid', response.data.data.uid)
-
-
-              let headers = {
-                  client:response.headers.client,
-                  "access-token":response.headers['access-token'],
-                  "token-type": "Bearer",
-                  expiry:response.headers.expiry,
-                  uid:response.data.data.uid
-              }
-              sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-          },
-          (err) => {
-              console.log(err)
+  function handleSuccessValidateToken (data) {
+      dispatch ({
+          type: "USER_LOGGED_IN",
+          userLoggedIn: !state.userIsLoggedIn,
+          login: data.data
           }
-       )
+      )
   }
 
-  useEffect( () => {
+/*  useEffect( () => {
       if (sessionStorage.getItem('@portalmec/auth_headers')) {
           let config = { headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))}
-          console.log(config)
-          console.log(sessionStorage.getItem('@portalmec/accessToken'))
 
-          if (config.headers['access-token'] !== sessionStorage.getItem('@portalmec/accessToken')){
-              console.log('erro tokens diferentes')
-          }
-          validateToken(config)
+          validateToken(config, handleSuccessValidateToken, (error) => {console.log(error)})
       }
-  }, [])
+  }, [])*/
+
+  let loc = useLocation()
+  useEffect(() => {
+      let query = new URLSearchParams(loc.search)
+
+      if(query.get("auth_token")) {
+             let config = {
+                     headers : {
+                                "access-token" : query.get("auth_token"),
+                                "client" : query.get("client_id"),
+                                "uid" : query.get("uid"),
+                                "expiry" : query.get("expiry"),
+                                "token-type" : 'Bearer'
+                     }
+                  }
+           validateGoogleLoginToken(config, handleSuccessValidateToken, (error) => {console.log(error)})
+           redirect()
+      }
+  }, [loc])
 
   useEffect ( () => {
       if (state.currentUser.askTeacherQuestion === true) {
@@ -106,26 +94,6 @@ export default function Header(props){
       props.history.push('/')
   }
 
-  let loc = useLocation()
-  useEffect(() => {
-      let query = new URLSearchParams(loc.search)
-
-      console.log(query.getAll("auth_token"))
-      if(query.get("auth_token")) {
-  	       let config = {
-  		           headers : {
-  			                  "access-token" : query.get("auth_token"),
-  			                  "client" : query.get("client_id"),
-  			                  "uid" : query.get("uid"),
-  			                  "expiry" : query.get("expiry"),
-  			                  "token-type" : 'Bearer'
-  		           }
-  	            }
-  	       validateToken(config)
-           redirect()
-      }
-  }, [loc])
-
   const toggleSnackbar = (event, reason) => {
       if (reason === 'clickaway') {
           return;
diff --git a/src/Components/FormValidationFunction.js b/src/Components/HelperFunctions/FormValidationFunction.js
similarity index 100%
rename from src/Components/FormValidationFunction.js
rename to src/Components/HelperFunctions/FormValidationFunction.js
diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 7ef9c62d..0286868f 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -15,18 +15,30 @@ export const getAxiosConfig = () => {
     return config
 }
 
-function getAxiosConfigFromJSON () {
+export function getAxiosConfigFromJSON () {
     let config = {
         headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
     }
     return config
 }
 
-function updateHeaders (newAccessToken) {
-    sessionStorage.setItem('@portalmec/accessToken', newAccessToken)
+export function updateHeaders (newHeaders) {
+    sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token'])
 
     let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
-    auth_headers['access-token'] = newAccessToken
+
+    if (auth_headers) {
+        auth_headers['access-token'] = newHeaders['access-token']
+    }
+    else {
+        auth_headers = {
+            client: newHeaders.client,
+            "access-token": newHeaders['access-token'],
+            uid: newHeaders.uid,
+            expiry: newHeaders.expiry,
+            "token-type": "Bearer"
+        }
+    }
 
     sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
 }
@@ -37,8 +49,8 @@ export const makeAxiosGetRequest = (url, onSuccess, onError) => {
     axios.get( (`${apiUrl}${url}`), config ).then(
         (response) => {
 
-            if ( response.headers['access-token'] ) {
-                updateHeaders(response.headers['access-token'])
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
             }
 
             onSuccess(response.data)
@@ -55,8 +67,8 @@ export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
     axios.delete( (`${apiUrl}${url}`), config ).then(
         (response) => {
 
-            if ( response.headers['access-token'] ) {
-                updateHeaders(response.headers['access-token'])
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
             }
 
             onSuccess(response.data)
@@ -67,15 +79,75 @@ export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
     )
 }
 
-
 export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
     let config = getAxiosConfigFromJSON()
 
     axios.put( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+export const makeAxiosPostRequest = (url, payload, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.post( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+function filterFunction (value) {
+    if (value.headers['access-token'] && value.status !== 304) {
+        return true
+    }
+    else {
+        return false
+    }
+}
+
+export const axiosAllRequest = (urls, onSuccess, onError) => {
+    axios.all(
+        urls.map( url => axios.get(`${apiUrl}${url}`, getAxiosConfigFromJSON()) )
+    ).then(
+        (responseArray) => {
+            var aux = responseArray.filter(filterFunction)
+            if (aux[0]) {
+                updateHeaders(aux[0].headers)
+            }
+
+            onSuccess(responseArray)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+export const validateGoogleLoginToken = (config, onSuccess, onError) => {
+    axios.get( (`${apiUrl}/auth/validate_token/`), config ).then(
         (response) => {
 
             if ( response.headers['access-token'] ) {
-                updateHeaders(response.headers['access-token'])
+                updateHeaders(response.headers)
             }
 
             onSuccess(response.data)
@@ -85,3 +157,27 @@ export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
         }
     )
 }
+
+export const authentication = (url, payload, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.post( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            const auth_headers = {
+                client: response.headers.client,
+                "access-token": response.headers['access-token'],
+                uid: response.headers.uid,
+                expiry: response.headers.expiry,
+                "token-type": "Bearer"
+            }
+
+            sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
diff --git a/src/Components/IframeOverlay/DrawerContent.js b/src/Components/IframeOverlay/DrawerContent.js
index 8bd7e483..461cca83 100644
--- a/src/Components/IframeOverlay/DrawerContent.js
+++ b/src/Components/IframeOverlay/DrawerContent.js
@@ -1,21 +1,22 @@
 import React, { useState, useEffect } from 'react';
 import styled from 'styled-components';
-import axios from 'axios';
 import Grid from '@material-ui/core/Grid';
 import SearchInput from './SearchInput.js';
 import ResourceCard from './ResourceCard.js';
-import { apiUrl } from '../../env';
 import SmallFooter from './SmallFooter.js';
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function DrawerContent(props) {
 	const [resources, setResources] = useState([]);
 
+    function handleSuccess(data) {
+        setResources(data)
+    }
 	const search = (query) => {
-		axios.get(`${apiUrl}/search?
-			page=0&results_per_page=5&query=${query}&search_class=LearningObject`)
-			.then(res => {
-				setResources(res.data);
-			});
+        const url = `/search?
+			page=0&results_per_page=5&query=${query}&search_class=LearningObject`
+
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 	}
 
 	useEffect(() => {
@@ -34,7 +35,7 @@ export default function DrawerContent(props) {
 		>
 			<Grid item xs={11}>
 				<SearchInput stdin={props.tag} search={search}/>
-			</Grid> 
+			</Grid>
 			<Grid item xs={11}>
 				<Description>
 					Recursos Relacionados na Plataforma MEC:
diff --git a/src/Components/IllegalContentModal.js b/src/Components/IllegalContentModal.js
index 135270c2..976bb5d8 100644
--- a/src/Components/IllegalContentModal.js
+++ b/src/Components/IllegalContentModal.js
@@ -81,24 +81,12 @@ const StyledDivContainer = styled.div`
 export default function IllegalContentModal (props) {
     const {state} = useContext(Store)
 
-    // const func = () => {
-    //     let name = ''
-    //     axios.get(`${apiUrl}/users/:id`,{
-    //
-    //     }
-    //     ).then ( (response) => {
-    //         name = response.name
-    //     }, (error) => {
-    //         console.log(':(')
-    //     })
-    // }
-
     return (
         <StyledModal
         aria-labelledby="transition-modal-title"
         aria-describedby="transition-modal-description"
         open={props.open}
-         
+
         centered="true"
         onClose={props.handleClose}
         closeAfterTransition
diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js
index 33b7ff15..8534da0a 100644
--- a/src/Components/LoginContainerFunction.js
+++ b/src/Components/LoginContainerFunction.js
@@ -25,7 +25,7 @@ import {device} from './device.js'
 import LabeledCheckbox from './Checkbox.js'
 import FormInput from "./FormInput.js"
 import GoogleLogo from "../img/logo_google.svg"
-import ValidateUserInput from '../Components/FormValidationFunction.js'
+import ValidateUserInput from './HelperFunctions/FormValidationFunction.js'
 import {Link} from 'react-router-dom'
 import {apiUrl} from '../env.js'
 
diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js
index 18b5e7e6..814457ea 100644
--- a/src/Components/LoginModal.js
+++ b/src/Components/LoginModal.js
@@ -23,10 +23,10 @@ import Zoom from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import LoginContainer from './LoginContainerFunction.js'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
+import {authentication} from './HelperFunctions/getAxiosConfig'
+
 const StyledLogin = styled(Modal)`
     margin : 0 !important;
     margin-left : 0 !important;
@@ -55,45 +55,27 @@ export default function LoginModal (props){
         handleSnackbar(false);
     }
 
+    function handleSuccess (data) {
+        dispatch ({
+            type: "USER_LOGGED_IN",
+            userLoggedIn: !state.userIsLoggedIn,
+            login: data.data
+            }
+        )
+        props.handleClose();
+        props.openSnackbar();
+    }
+    function handleError (error) {
+        handleSnackbar(true)
+    }
     const handleLoginInfo = (login) => {
-        axios.post(`${apiUrl}/auth/sign_in`,
-            {
+        const url = `/auth/sign_in`
+        const payload = {
             email : login.email,
             password : login.senha
         }
-        ).then( (response) => {
-            console.log(response)
-            dispatch ({
-                type: "USER_LOGGED_IN",
-                userLoggedIn: !state.userIsLoggedIn,
-                login: response.data.data
-                }
-            )
-            sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
-            sessionStorage.setItem('@portalmec/id', response.data.data.id)
-            sessionStorage.setItem('@portalmec/username', response.data.data.name)
-            sessionStorage.setItem('@portalmec/uid', response.data.data.uid)
 
-            let headers = {
-                client:response.headers.client,
-                "access-token":response.headers['access-token'],
-                "token-type": "Bearer",
-                expiry:response.headers.expiry,
-                uid:response.data.data.uid
-            }
-            sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-
-            if (login.checkboxChecked) {
-                localStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-            }
-
-            props.handleClose();
-            props.openSnackbar();
-            }, (error) => {
-                handleSnackbar(true)
-            }
-        )
+        authentication(url, payload, handleSuccess, handleError)
     }
 
 
diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js
index 6ec3f5c9..3db6d12c 100644
--- a/src/Components/MenuList.js
+++ b/src/Components/MenuList.js
@@ -26,9 +26,8 @@ import ExitToAppIcon from '@material-ui/icons/ExitToApp';
 import { Store } from '../Store';
 import Profile from '../img/default_profile0.png'
 import styled from 'styled-components'
-import {apiDomain, apiUrl} from '../env.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
+import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 
 const OverrideButton = styled(Button)`
@@ -47,30 +46,15 @@ export default function MenuList(props) {
     setAnchorEl(null);
   };
 
+  function handleSuccessSignOut (data) {
+      dispatch( {
+          type: 'USER_LOGGED_OUT',
+          userLoggedOut: !state.userIsLoggedIn,
+      })
+  }
   const handleLogout = () => {
-      let config = getAxiosConfig()
-      axios.delete(`${apiUrl}/auth/sign_out`, config).then(
-          () => {
-
-          localStorage.removeItem('@portalmec/username');
-          sessionStorage.removeItem('@portalmec/uid');
-          sessionStorage.removeItem('@portalmec/senha');
-          dispatch( {
-              type: 'USER_LOGGED_OUT',
-              userLoggedOut: !state.userIsLoggedIn,
-              login: {
-                  username : '',
-                  email : '',
-                  accessToken : '',
-                  client : ''
-              }
-          })
-      },
-      (err) => {
-          console.log(err)
-      }
-      )
-
+      const url = `/auth/sign_out`
+      makeAxiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
   }
 
   return (
@@ -84,13 +68,13 @@ export default function MenuList(props) {
       >
         <div style={{borderRadius: "50%", border: "2px solid #fff", background: "#fff", overflow: "hidden", maxWidth : "50px", maxHeight : "50px"}}>
             {
-                state.currentUser.avatar_file_name === '' || state.currentUser.avatar_file_name === null ?
+                state.currentUser.avatar === '' || state.currentUser.avatar === null ?
                 (
 
                     <img src={Profile} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
                 ):
                 (
-                    <img src={apiDomain + state.currentUser.avatar_file_name} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
+                    <img src={apiDomain + state.currentUser.avatar} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
                 )
             }
         </div>
diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js
index 2b159882..b904e550 100644
--- a/src/Components/MobileDrawerMenu.js
+++ b/src/Components/MobileDrawerMenu.js
@@ -36,9 +36,8 @@ import HistoryIcon from '@material-ui/icons/History';
 import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
 import FolderOpenIcon from '@material-ui/icons/FolderOpen';
 import SettingsIcon from '@material-ui/icons/Settings';
-import {apiDomain, apiUrl} from '../env.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
+import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function MobileDrawerMenu (props) {
     const {state, dispatch} = useContext(Store)
@@ -58,11 +57,11 @@ export default function MobileDrawerMenu (props) {
     };
 
     const getUserAvatar = ()  => {
-        if (state.currentUser.avatar_file_name === '' || state.currentUser.avatar_file_name == null) {
+        if (state.currentUser.avatar === '' || state.currentUser.avatar == null) {
             return DefaultAvatar
         }
         else {
-            return apiDomain + state.currentUser.avatar_file_name
+            return apiDomain + state.currentUser.avatar
         }
     }
 
@@ -75,30 +74,16 @@ export default function MobileDrawerMenu (props) {
         { name: "Coleções", href: "/perfil", icon : <FolderOpenIcon/>, value : '3'},
     ]
 
-    // {/*dispatches log out actions to Store.js*/}
-    const handleLogout = () => {
-        let config = getAxiosConfig()
-        axios.delete(`${apiUrl}/auth/sign_out`, config).then(
-            (res) => {
 
-            localStorage.removeItem('@portalmec/username');
-            sessionStorage.removeItem('@portalmec/uid');
-            sessionStorage.removeItem('@portalmec/senha');
-            dispatch( {
-                type: 'USER_LOGGED_OUT',
-                userLoggedOut: !state.userIsLoggedIn,
-                login: {
-                    username : '',
-                    email : '',
-                    accessToken : '',
-                    client : ''
-                }
-            })
-        },
-        (err) => {
-            console.log(err)
-        }
-        )
+    function handleSuccessSignOut (data) {
+        dispatch( {
+            type: 'USER_LOGGED_OUT',
+            userLoggedOut: !state.userIsLoggedIn,
+        })
+    }
+    const handleLogout = () => {
+        const url = `/auth/sign_out`
+        makeAxiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
index 4895cf29..8a31f4a0 100644
--- a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
+++ b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
@@ -20,12 +20,11 @@ import React, {useContext, useState} from 'react';
 import { Button } from '@material-ui/core';
 import styled from 'styled-components'
 import {Store} from '../../Store.js'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../../env';
+import {apiDomain} from '../../env';
 import CloseIcon from '@material-ui/icons/Close';
 import Profile from '../../img/default_profile0.png'
 import Cropper from '../Cropper.js'
-
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 function ChooseImage (props) {
     return (
@@ -65,21 +64,6 @@ function ChooseImage (props) {
     )
 }
 
-const GetHeaderConfig = () => {
-
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid'),
-        }
-    }
-    // {/*'Host': 'api.portalmec.c3sl.ufpr.br',
-    // 'Cookie': ''*/}
-    return config
-}
 
 export default function ComponentAlterarAvatar (props) {
     const {state, dispatch} = useContext(Store)
@@ -103,28 +87,23 @@ export default function ComponentAlterarAvatar (props) {
         aspect: 1
     });
 
+    function handleSuccess(data) {
+        const target = state.currentUser
+        const source = {userAvatar : data.avatar}
+        dispatch({
+            type : 'USER_CHANGED_COVER',
+            currUser : Object.assign(target, source)
+        })
+    }
+
     const completeSelection = () => {
-        console.log(newAvatar)
+        const url = `/users/${props.id}`
+
         //newAvatar is a base64 encoded image file
         let fdAvatar = new FormData()
         fdAvatar.set('user[avatar]', newAvatar)
 
-        axios.put( (`${apiUrl}/users/` + props.id ),
-            fdAvatar,
-            GetHeaderConfig()
-        ).then( (response) => {
-            console.log(response)
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            const target = state.currentUser
-            const source = {userAvatar : response.data.avatar}
-            dispatch({
-                type : 'USER_CHANGED_COVER',
-                currUser : Object.assign(target, source)
-            })
-        }, (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(url, fdAvatar, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarCover/ComponentAlterarCover.js b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
index caf408d4..68da2c71 100644
--- a/src/Components/ModalAlterarCover/ComponentAlterarCover.js
+++ b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
@@ -20,27 +20,9 @@ import React, {useContext, useState} from 'react';
 import { Button } from '@material-ui/core';
 import styled from 'styled-components'
 import {Store} from '../../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import CloseIcon from '@material-ui/icons/Close';
 import Cropper from '../Cropper.js'
-
-
-const GetHeaderConfig = () => {
-
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid'),
-        }
-    }
-    // {/*'Host': 'api.portalmec.c3sl.ufpr.br',
-    // 'Cookie': ''*/}
-    return config
-}
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function ComponentAlterarCover (props) {
     const {state, dispatch} = useContext(Store)
@@ -55,27 +37,23 @@ export default function ComponentAlterarCover (props) {
         aspect: 16 / 9
     });
 
+    function handleSuccess (data) {
+        const target = state.currentUser
+        const source = {userCover : data.cover}
+        dispatch({
+            type : 'USER_CHANGED_COVER',
+            currUser : Object.assign(target, source)
+        })
+    }
+
     const completeSelection = () => {
-        console.log(newCover)
+        const url = `/users/${props.id}`
+
         //newCover is a base64 encoded image file.
         let fdCover = new FormData()
         fdCover.set('user[cover]', newCover)
 
-        axios.put( (`${apiUrl}/users/` + props.id ),
-            fdCover,
-            GetHeaderConfig()
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            const target = state.currentUser
-            const source = {userCover : response.data.cover}
-            dispatch({
-                type : 'USER_CHANGED_COVER',
-                currUser : Object.assign(target, source)
-            })
-        }, (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(url, fdCover, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalConfirmarCuradoria.js b/src/Components/ModalConfirmarCuradoria.js
index b654338c..1156810d 100644
--- a/src/Components/ModalConfirmarCuradoria.js
+++ b/src/Components/ModalConfirmarCuradoria.js
@@ -22,10 +22,8 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import CloseModalButton from './CloseModalButton'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalConfirmarCuradoriaOpen (props) {
 
@@ -42,8 +40,11 @@ export default function ModalConfirmarCuradoriaOpen (props) {
         return newArr
     }
 
+    function handleSuccess (data) {
+        props.finalizeCuratorshipFlow()
+    }
     const handleConfirmation = () => {
-        let config = getAxiosConfig()
+        const url = `/submissions/${props.recursoId}/answer`
 
         let payload = {
             "submission" : {
@@ -51,16 +52,7 @@ export default function ModalConfirmarCuradoriaOpen (props) {
                 "answers" : transformReportCriteria(props.reportCriteria)
             }
         }
-
-        axios.post( (`${apiUrl}/submissions/` + props.recursoId + '/answer'), payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data)
-                props.finalizeCuratorshipFlow()
-            }, (error) => {console.log(error)}
-        )
+        makeAxiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalExcluirColecao.js b/src/Components/ModalExcluirColecao.js
index 914aa74f..13b6de08 100644
--- a/src/Components/ModalExcluirColecao.js
+++ b/src/Components/ModalExcluirColecao.js
@@ -21,28 +21,22 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import GreyButton from './GreyButton.js'
 import PurpleButton from './PurpleButton.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
 import SnackbarComponent from './SnackbarComponent'
+import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalExcluirColecao (props) {
     const [snackbarOpen, toggleSnackbar] = useState(false)
 
+    function handleDeleteSuccess (data) {
+        toggleSnackbar(true)
+        props.handleClose()
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig()
-
-        axios.delete( (`${apiUrl}/collections/` + props.id), config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            toggleSnackbar(true)
-            props.handleClose()
-        }, (error) => {console.log(error);})
+        const url = `/collections/${props.id}`
+
+        makeAxiosDeleteRequest(url, handleDeleteSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/NotificationsInner.js b/src/Components/NotificationsInner.js
index 5b80924a..ffb5ef4f 100644
--- a/src/Components/NotificationsInner.js
+++ b/src/Components/NotificationsInner.js
@@ -1,30 +1,22 @@
 import React, {useState, useContext, useEffect} from 'react'
 import styled from 'styled-components'
-import {apiDomain, apiUrl} from '../env.js'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig.js'
+import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function NotificationInner (props) {
     const [notifications, setNotifications] = useState([]);
     const [notificatonsLength, setLength] = useState(0);
+
+    function handleSuccess (data) {
+        setNotifications(data)
+        setLength(data.length)
+    }
     useEffect(() => {
         let config = getAxiosConfig()
-        axios.get(`${apiUrl}/feed?offset=0&limit=30`, config)
-        .then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
+        const url = `/feed?offset=0&limit=30`
 
-                console.log('atividades response: ', response)
-                setNotifications(response.data)
-                setLength(response.data.length)
-
-            },
-            (error) => {
-                console.log('error while running getNotifications')
-            }
-        )
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
     }, [])
 
     return (
diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js
index 6fe3e70c..ad8fcf9a 100644
--- a/src/Components/PageProfessorComponents/PartOne.js
+++ b/src/Components/PageProfessorComponents/PartOne.js
@@ -88,7 +88,6 @@ export default function PartOne (props) {
     }
 
     const handleSubmit = () => {
-        console.log('handle submit : ', uf.abbreviation, uf.name, municipio.name, codigoINEP.value)
         props.handleBuscar(uf.abbreviation, uf.name, municipio.name, codigoINEP.value)
     }
 
diff --git a/src/Components/PublicationPermissionsContent.js b/src/Components/PublicationPermissionsContent.js
index 533993c1..bdc34f32 100644
--- a/src/Components/PublicationPermissionsContent.js
+++ b/src/Components/PublicationPermissionsContent.js
@@ -8,8 +8,7 @@ import Radio from '@material-ui/core/Radio';
 import FormControl from '@material-ui/core/FormControl';
 import Grid from '@material-ui/core/Grid';
 import { withStyles } from '@material-ui/core/styles';
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig'
 
 const StyledFormControl = styled(FormControl)`
     display: "block ruby";
@@ -31,16 +30,14 @@ export default function PublicationPermissionsContent (props) {
     const [questionsArr, setQuestionsArr] = useState([])
     const handleSetQuestionsArr = (newArr) => {setQuestionsArr(newArr)}
 
+    function handleSuccess (data) {
+        handleSetQuestionsArr(data)
+    }
+
     useEffect(() => {
-        axios.get(`${apiUrl}/questions/`).then(
-            (response) => {
-                console.log(response)
-                handleSetQuestionsArr(response.data)
-            },
-            (error) => {
-                console.log('falhou em get questions')
-            }
-        )
+        const url = `/questions/`
+
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/ReportModal.js b/src/Components/ReportModal.js
index be2248df..b12218a8 100644
--- a/src/Components/ReportModal.js
+++ b/src/Components/ReportModal.js
@@ -23,12 +23,11 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import CloseIcon from '@material-ui/icons/Close';
 import ReportUserForm from './ReportUserForm.js'
 import ReportRecursoForm from './ReportRecursoForm.js'
 import ReportColecaoForm from './ReportColecaoForm.js'
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -42,9 +41,7 @@ export default function ReportModal (props) {
     const {state} = useContext(Store)
 
     const handleSubmit  = (complaint_reason_id, description) => {
-        console.log('complaint_reason_id: ', complaint_reason_id)
-        console.log('description: ', description)
-
+        const url = `/complaints/`
         const payload = {
             "complaint" : {
                 "user_id" : state.currentUser.id,
@@ -54,18 +51,9 @@ export default function ReportModal (props) {
                 "complaint_reason_id" : complaint_reason_id
             }
         }
-        console.log(payload)
 
-        axios.post(`${apiUrl}/complaints`,
-        {
-            "complaint" : {
-                "user_id" : state.currentUser.id,
-                "description" : description,
-                "complainable_id" : props.complainableId,
-                "complainable_type" : props.complainableType,
-                "complaint_reason_id" : complaint_reason_id
-            }
-        }).then( (response) => {console.log(response)}, (error) => {console.log(error)})
+        makeAxiosPostRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
+
     }
 
     const renderForm = (formType) => {
diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index 8113aa67..9b069378 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -18,8 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useState, useEffect} from 'react';
 import Card from '@material-ui/core/Card';
-import axios from 'axios'
-import {apiDomain, apiUrl} from '../env';
+import {apiDomain} from '../env';
 import ResourceCardOptions from './ResourceCardOptions'
 import noAvatar from "../img/default_profile.png";
 // import { makeStyles } from '@material-ui/core/styles';
@@ -51,12 +50,8 @@ import Grid from '@material-ui/core/Grid';
 import {Link} from 'react-router-dom';
 import {getDefaultThumbnail} from './HelperFunctions/getDefaultThumbnail'
 import GetIconByName from './UploadPageComponents/GetIconByName'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-
 import "./ResourceCard.css";
-
-// const types = [{label: "Animação", thumb: animacao}, {label: "Apresentação", thumb: apresentacao},
-// {label: "Aplicativo" , thumb: aplicativo}, {label: "Áudio", thumb: audio}, {label: "Vazio", thumb: vazio}, {label: "Imagem", thumb: imagem}, {label: "Gráfico", thumb: grafico}, {label: "Jogo", thumb: jogo}, {label: "Livro", thumb: livro}, {label:"Livro digital", thumb: livro}, {label: "Mapa", thumb: mapa}, {label: "Outros", thumb: outros}, {label: "Software Educacional", thumb:software}, {label: "Software", thumb:software}, {label: "Texto", thumb:texto}, {label: "Vídeo", thumb:video}]
+import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ResourceCardFunction (props) {
     const [thumbnail, setThumbnail] = useState(null)
@@ -83,23 +78,15 @@ export default function ResourceCardFunction (props) {
 
     }, [])
 
+    function handleSuccessLike (data) {
+        toggleLiked(!liked)
+        setLikesCount(data.count)
+    }
+
     const handleLike = () => {
-        let payload = {}
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/learning_objects/` + props.id + '/like'),payload, config
-        ).then(
-            (response) => {
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleLiked(!liked)
-                setLikesCount(response.data.count)
+        const url = `/learning_objects/${props.id}/like/`
 
-            },
-            (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(url, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const SlideAnimationContent = () => {
diff --git a/src/Components/ResourcePageComponents/CommentForm.js b/src/Components/ResourcePageComponents/CommentForm.js
index 1859e116..d549bf01 100644
--- a/src/Components/ResourcePageComponents/CommentForm.js
+++ b/src/Components/ResourcePageComponents/CommentForm.js
@@ -4,10 +4,9 @@ import Rating from '@material-ui/lab/Rating';
 import StarIcon from '@material-ui/icons/Star';
 import TextField from "@material-ui/core/TextField";
 import { Button } from '@material-ui/core';
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import EditIcon from '@material-ui/icons/Edit';
 import Grid from '@material-ui/core/Grid';
+import {makeAxiosPostRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentForm (props) {
     const [rating, setRating] = useState({
@@ -27,22 +26,19 @@ export default function CommentForm (props) {
 
     const [attemptedSubmit, setAttempt] = useState(false)
 
+    function handleSuccess (data) {
+        props.handleSnackbar(1)
+        props.rerenderCallback()
+    }
     const handleSubmit = (e) => {
         e.preventDefault()
         const finalRating = rating
         const finalComment = comment
 
-
         if (!(finalRating.error || finalComment.error)) {
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid'),
-                }
-            }
+            let type = props.recurso ? 'learning_objects' : 'collections'
+            const url = `/${type}/${props.recursoId}/reviews`
+
             let payload = {
                 "review" : {
                     "description" : finalComment.value,
@@ -54,17 +50,8 @@ export default function CommentForm (props) {
                     ]
                 }
             }
-            let type = props.recurso ? 'learning_objects/' : 'collections/'
-            console.log(payload)
-            axios.post( (`${apiUrl}/` + type + props.recursoId + '/reviews'), payload, config
-        ).then((response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response.data);
-             props.handleSnackbar(1);
-              props.rerenderCallback()},
-        (error) => {console.log(error)})
+
+            makeAxiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
         }
         else {
             setAttempt(true)
diff --git a/src/Components/ResourcePageComponents/CommentsArea.js b/src/Components/ResourcePageComponents/CommentsArea.js
index fdabf836..2ed0ba13 100644
--- a/src/Components/ResourcePageComponents/CommentsArea.js
+++ b/src/Components/ResourcePageComponents/CommentsArea.js
@@ -23,10 +23,10 @@ import Grid from '@material-ui/core/Grid';
 import { Button } from '@material-ui/core';
 import ExitToAppIcon from '@material-ui/icons/ExitToApp';
 import Comentarios from '../../img/comentarios.png'
-import {apiUrl, apiDomain} from '../../env';
+import {apiDomain} from '../../env';
 import CommentForm from './CommentForm.js'
-import axios from 'axios'
 import Comment from '../Comment.js'
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentsArea (props) {
     const {state} = useContext(Store)
@@ -34,15 +34,14 @@ export default function CommentsArea (props) {
     const [gambiarra, setState] = useState(0)
     const forceUpdate = () => {setState(gambiarra + 1)}
 
+    function handleSuccess (data) {
+        setComentarios(data.sort((a, b) => a.updated_at > b.updated_at ? -1 : 1))
+    }
+
     useEffect( () => {
-        axios.get( (`${apiUrl}/learning_objects/` + props.recursoId + '/reviews')
-    ).then( (response) => {
-        if ( response.headers['access-token'] ) {
-            sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-        }
-        console.log(response)
-        setComentarios(response.data.sort((a, b) => a.updated_at > b.updated_at ? -1 : 1))
-    }, (error) => {console.log(error)})
+        const url = `/learning_objects/${props.recursoId}/reviews`
+
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [gambiarra])
 
     return (
@@ -55,7 +54,7 @@ export default function CommentsArea (props) {
                                 <h3>Conte sua experiência com o Recurso</h3>
                                 <Grid container style={{paddingTop : "20px"}}>
                                     <Grid item xs={2} style={{paddingLeft : "15px", paddingRight : "15px"}}>
-                                        <img src={apiDomain + state.currentUser.avatar_file_name} className="minha-imagem" alt="user avatar"/>
+                                        <img src={apiDomain + state.currentUser.avatar} className="minha-imagem" alt="user avatar"/>
                                     </Grid>
                                     <Grid item xs={10}>
                                         <CommentForm
diff --git a/src/Components/ResourcePageComponents/TextoObjeto.js b/src/Components/ResourcePageComponents/TextoObjeto.js
index 5b5bc3cd..3fba2d8d 100644
--- a/src/Components/ResourcePageComponents/TextoObjeto.js
+++ b/src/Components/ResourcePageComponents/TextoObjeto.js
@@ -29,9 +29,7 @@ import Button from '@material-ui/core/Button';
 import {Link, Redirect} from 'react-router-dom'
 import Alert from '../Alert.js';
 import Snackbar from '@material-ui/core/Snackbar';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
-import axios from 'axios'
-import {apiUrl} from '../../env';
+import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function TextoObjeto (props) {
     const {state} = useContext(Store)
@@ -81,21 +79,13 @@ export default function TextoObjeto (props) {
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
     const [publisherDeletedObject, toggleDeleted] = useState(false)
+    function handleSuccess (data) {
+        toggleSnackbar(true)
+        toggleDeleted(true)
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig()
-        axios.delete((`${apiUrl}/learning_objects/` + props.recursoId), config).then(
-            (response) => {
-                toggleSnackbar(true)
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleDeleted(true)
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+        const url = `/learning_objects/${props.recursoId}`
+        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     const checkAccessLevel = (levelToCheck) => {
diff --git a/src/Components/SignUpContainerFunction.js b/src/Components/SignUpContainerFunction.js
index 19ec2036..d336d341 100644
--- a/src/Components/SignUpContainerFunction.js
+++ b/src/Components/SignUpContainerFunction.js
@@ -26,7 +26,7 @@ import FormInput from "./FormInput.js"
 import {StyledCloseModalButton, DialogContentDiv, DialogHeaderStyled, SocialConnectDiv, H3Div} from './LoginContainerFunction.js'
 import {apiUrl} from '../env.js'
 import {GoogleLoginButton} from './LoginContainerFunction'
-import ValidateUserInput from '../Components/FormValidationFunction.js'
+import ValidateUserInput from './HelperFunctions/FormValidationFunction.js'
 import GoogleLogo from "../img/logo_google.svg"
 
 async function handleGoogleAttempt () {
diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js
index d5d26a54..d3ed47c7 100644
--- a/src/Components/SignUpModal.js
+++ b/src/Components/SignUpModal.js
@@ -22,32 +22,22 @@ import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import SignUpContainer from './SignUpContainerFunction.js'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
-
-const StyledModalSignUp = styled(Modal)`
-    .djXaxP{
-        margin : 0 !important;
-    }
-
-    display : flex;
-    align-items: center;
-    justify-content : center;
-    text-align : center;
-    padding : 10px !important;
-    border-radius : 4px;
-
-`
-
-
+import {authentication} from './HelperFunctions/getAxiosConfig'
 
 export default function SignUpModal (props) {
     const { state, dispatch } = useContext(Store)
 
+    function handleSuccess (data) {
+        dispatch ({
+            type: 'USER_SIGNED_UP',
+            userLoggedIn: !state.userIsLoggedIn,
+            user: data.data
+        })
+        props.handleClose()
+    }
     const handleLoginInfo = (newLogin) => {
-        // {/*console.log(state.currentUser)*/}
-        axios.post(`${apiUrl}/auth`,
-            {
+        const url = `/auth`
+        const payload = {
             name : newLogin.name,
             email: newLogin.email,
             password : newLogin.password,
@@ -55,37 +45,9 @@ export default function SignUpModal (props) {
             terms_of_service:true,
             avatar: ""
         }
-        ).then( (response) => {
-            dispatch ( {
-                type: 'USER_SIGNED_UP',
-                userLoggedIn: !state.userIsLoggedIn,
-                user: response.data.data
-                }
-            )
-            localStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            localStorage.setItem('@portalmec/clientToken', response.headers.client,)
-            localStorage.setItem('@portalmec/id', response.data.data.id)
-            localStorage.setItem('@portalmec/username', response.data.data.name)
-            localStorage.setItem('@portalmec/uid', response.data.data.uid)
-
-            let headers = {
-                client:response.headers.client,
-                "access-token":response.headers['access-token'],
-                "token-type": "Bearer",
-                expiry:response.headers.expiry,
-                uid:response.data.data.uid
-            }
-            sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-
-            props.handleClose()
-            }, (error) => {
-                console.log(':(')
-            }
-        )
+        authentication(url, payload, handleSuccess, (error) => {console.log(error)})
     }
 
-    //useEffect(()=>{console.log(state.currentUser)},[state.currentUser])
-
     return (
         <StyledModalSignUp
             aria-labelledby="transition-modal-title"
@@ -110,3 +72,17 @@ export default function SignUpModal (props) {
         </StyledModalSignUp>
     )
 }
+
+const StyledModalSignUp = styled(Modal)`
+    .djXaxP{
+        margin : 0 !important;
+    }
+
+    display : flex;
+    align-items: center;
+    justify-content : center;
+    text-align : center;
+    padding : 10px !important;
+    border-radius : 4px;
+
+`
diff --git a/src/Components/TabPanels/Breadcrumbs.js b/src/Components/TabPanels/Breadcrumbs.js
index 00d54782..1d208986 100644
--- a/src/Components/TabPanels/Breadcrumbs.js
+++ b/src/Components/TabPanels/Breadcrumbs.js
@@ -1,3 +1,22 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 styled from 'styled-components'
 import Breadcrumbs from '@material-ui/core/Breadcrumbs';
@@ -12,8 +31,8 @@ export default function CustomizedBreadcrumbs (props) {
                     Página Inicial
                 </Link>
                 {
-                    props.values.map( (value) =>
-                        <span>
+                    props.values.map( (value, i) =>
+                        <span key={i}>
                             {value}
                         </span>
                     )
diff --git a/src/Components/TabPanels/PanelComponents/TemplateColecao.js b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
index dfb193fc..b15f74ff 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateColecao.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
@@ -78,13 +78,10 @@ export default function PanelTemplateColecao (props) {
             {
                 props.length === 0 ?
                 (
-                    [
-                        <NoContent text={props.noContentText}/>
-                    ]
+                    <NoContent text={props.noContentText}/>
                 )
                 :
                 (
-                    [
                         <React.Fragment>
 
                             <StyledGrid container spacing={1} style={{paddingLeft : "30px", paddingRight : "15px"}}>
@@ -104,7 +101,6 @@ export default function PanelTemplateColecao (props) {
                                 showAll={() => props.showAll()}
                             />
                         </React.Fragment>
-                    ]
                 )
             }
 
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
index 3aab2492..e0a93832 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 Grid from '@material-ui/core/Grid';
 import {HeaderGrid, StyledGrid} from '../StyledComponents.js'
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js b/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
index 044ebc5b..a0eba2f9 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
index 3622356c..f1a51e88 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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, {useState, useEffect} from 'react'
 import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js b/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js
index 9e3cd80b..0663a44c 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 styled from 'styled-components'
 import UserDescription from './UserDescription.js'
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
index 6f2a08ba..6b0be8a7 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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, {useState, useEffect} from 'react'
 import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
index b3dea17e..125d7a2f 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
@@ -1,20 +1,24 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import PanelTemplateRede from '../PanelComponents/TemplateRede.js'
-
-const getConfig = () => {
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type':'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid')
-        }
-    }
-    return config
-}
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabRede (props) {
     const [followers, setFollowers] = useState([])
@@ -34,26 +38,19 @@ export default function TabRede (props) {
     }
     const showAllFollowing = () => {setFollowingSlice(following)}
 
+    function handleSuccess (responseArr) {
+        setFollowers(responseArr[0].data)
+        setFollowersSlice(responseArr[0].data.slice(0,4))
+
+        setFollowing(responseArr[1].data)
+        setFollowingSlice(responseArr[1].data.slice(0,4))
+    }
+
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/followers'), getConfig()),
-            axios.get((`${apiUrl}/users/` + props.id + '/following/User'), getConfig())
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Rede: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-                setFollowers(responseArr[0].data)
-                setFollowersSlice(responseArr[0].data.slice(0,4))
 
-                setFollowing(responseArr[1].data)
-                setFollowingSlice(responseArr[1].data.slice(0,4))
-            },
-            (error) => {
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [`/users/${props.id}/followers`, `/users/${props.id}/following/User`]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js b/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js
index 495e60e3..4fcc273f 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 styled from 'styled-components'
 
diff --git a/src/Components/TabPanels/TabPanelStatusEConquistas.js b/src/Components/TabPanels/TabPanelStatusEConquistas.js
index 2617f8a7..d9e0c207 100644
--- a/src/Components/TabPanels/TabPanelStatusEConquistas.js
+++ b/src/Components/TabPanels/TabPanelStatusEConquistas.js
@@ -1,3 +1,22 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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, {useContext, useState, useEffect} from 'react'
 import { Store } from '../../Store.js'
 import styled from 'styled-components'
@@ -68,7 +87,7 @@ export default function TabPanelStatusEConquistas (props) {
 									src={a.imgsrc}
 									requirements={a.requirements}
                                     />
-									
+
 							</Grid>
 						)}
 				)}
diff --git a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
index 05c08553..a49bfd52 100644
--- a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
+++ b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
@@ -23,15 +23,13 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../../../env.js'
 import CloseIcon from '@material-ui/icons/Close';
 import ExcluirAvatar from '../../../img/Excluir.png'
 import GreyButton from '../../GreyButton'
 import FormInput from '../../FormInput'
 import {Link} from 'react-router-dom'
 import SnackbarComponent from '../../SnackbarComponent.js'
-import {getAxiosConfig} from '../../HelperFunctions/getAxiosConfig'
+import {makeAxiosDeleteRequest} from '../../HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -64,20 +62,16 @@ export default function ModalExcluirConta (props) {
 
     const deletedAccountText = `A conta ${state.currentUser.email} foi deletada com sucesso`
 
+    function handleSuccess (data) {
+        toggleSnackbar(true)
+        dispatch({
+          type: "USER_DELETED_ACCOUNT",
+        });
+        props.handleClose()
+    }
     const deleteAccount = () => {
-        let config = getAxiosConfig()
-
-        axios.delete( (`${apiUrl}/auth/`), config
-        ).then( (response) => {
-            console.log(response)
-            toggleSnackbar(true)
-
-            dispatch({
-              type: "USER_DELETED_ACCOUNT",
-            });
-
-            props.handleClose()
-        }, (error) => {console.log(error);})
+        const url = `/auth`
+        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
index 0c9d8da9..770b03b5 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
@@ -20,13 +20,12 @@ import React, {useState, useEffect} from 'react'
 import styled from 'styled-components'
 import Paper from '@material-ui/core/Paper';
 import Button from '@material-ui/core/Button';
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../../../env';
+import {apiDomain} from '../../../env';
 import Bolo from '../../../img/Bolo.png'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ActivityListItem from '../../ActivityListItem.js'
 import List from '@material-ui/core/List';
-import {getAxiosConfig} from '../../HelperFunctions/getAxiosConfig.js'
+import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig.js'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -40,25 +39,17 @@ export default function TabPanelAtividades (props) {
         setNotificationsSlice(notifications.slice(0, sliceLength + offset))
     }
 
-    useEffect( () => {
-        let config = getAxiosConfig()
-
-        axios.get(`${apiUrl}/feed?offset=0&limit=30`, config)
-        .then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
+    function handleSuccess (data) {
+        setNotifications(data)
+        setNotificationsSlice(data.slice(0,30))
+        setLength(data.length)
 
-                setNotifications(response.data)
-                setNotificationsSlice(response.data.slice(0,30))
-                setLength(response.data.length)
+        handleLoading(false)
+    }
+    useEffect( () => {
+        const url = `/feed?offset=0&limit=30`
 
-                handleLoading(false)
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
@@ -224,4 +215,4 @@ const DivTitulo = styled.div`
     line-height: 1.2em;
     margin : 0;
     border-bottom: 1px solid #eee;
-`
\ No newline at end of file
+`
diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
index f7883396..c9ea1c8d 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
@@ -20,11 +20,8 @@ import React, {useState, useEffect} from 'react'
 import styled from 'styled-components'
 import Grid from '@material-ui/core/Grid';
 import LoadingSpinner from '../../LoadingSpinner.js'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import PanelTemplateColecao from '../PanelComponents/TemplateColecao.js'
 import PaginaVaziaColecao from '../../../img/Pagina_vazia_colecao.png'
-
 import NoContent from '../PanelComponents/NoContent.js'
 import {WhiteContainer, StyledGrid} from '../StyledComponents.js'
 import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';
@@ -32,6 +29,7 @@ import Title from '../PanelComponents/PanelTitle.js'
 import CollectionCardFunction from '../../CollectionCardFunction.js'
 import {ButtonsAreaColecao} from '../PanelComponents/ButtonsArea'
 import CriarColecaoModal from '../../CriarColecaoModal.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelColecoes (props) {
     const [loading, handleLoading] = useState(true)
@@ -42,30 +40,18 @@ export default function TabPanelColecoes (props) {
     const [followedCollections, setFollowedCollections] = useState([])
     const [followedCollectionsSlice, setFollowedCollectionsSlice] = useState([])
 
-    const getInfo = () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/collections'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/following/Collection'), props.config),
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Colecoes: ', responseArr)
-                if (responseArr[1].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[1].headers['access-token'])
-                }
-
-                handleLoading(false)
-                setUserCollections(responseArr[0].data)
-                setUserCollectionsSlice(responseArr[0].data.slice(0,3))
+    function handleSuccess (responseArr) {
+        handleLoading(false)
+        setUserCollections(responseArr[0].data)
+        setUserCollectionsSlice(responseArr[0].data.slice(0,3))
 
-                setFollowedCollections(responseArr[1].data)
-                setFollowedCollectionsSlice(responseArr[1].data.slice(0,4))
+        setFollowedCollections(responseArr[1].data)
+        setFollowedCollectionsSlice(responseArr[1].data.slice(0,4))
+    }
 
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+    const getInfo = () => {
+        const urls = [`/users/${props.id}/collections`, `/users/${props.id}/following/Collection`]
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }
 
     useEffect( () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
index 06ea8fd6..723ad97e 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
@@ -17,10 +17,9 @@ 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, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
+import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelCuradoria (props) {
     const [loading, handleLoading] = useState(true)
@@ -35,19 +34,15 @@ export default function TabPanelCuradoria (props) {
 
     const showAllSubmissions = () => {setSubmissionsSlice(submissions)}
 
+    function handleSuccess (data) {
+        handleLoading(false)
+        setSubmissions(data)
+        setSubmissionsSlice(data.slice(0,4))
+    }
     useEffect( () => {
-        axios.get( (`${apiUrl}/users/` + props.id + '/submissions?offset=0&status=submitted'), props.config)
-            .then(response => {
-                console.log(response)
-                if (response.headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-
-                handleLoading(false)
-                setSubmissions(response.data)
-                setSubmissionsSlice(response.data.slice(0,4))
+        const url = `/users/${props.id}/submissions?offset=0&status=submitted`
 
-            }, error => {console.log('error while running ComponentDidMout on TabPanelCuradoria')})
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js b/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
index 9e0560fd..a2a082d0 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
@@ -25,7 +25,7 @@ import IconButton from '@material-ui/core/IconButton';
 import PhotoCamera from '@material-ui/icons/PhotoCamera';
 import Tooltip from '@material-ui/core/Tooltip';
 import FormInput from "../../FormInput.js"
-import ValidateUserInput from '../../FormValidationFunction.js'
+import ValidateUserInput from '../../HelperFunctions/FormValidationFunction.js'
 import {apiDomain} from '../../../env.js'
 
 
@@ -69,7 +69,7 @@ export default function TabPanelEditarPerfil (props) {
                 key : flag,
                 value : userInput,
             })
-            
+
         }
     }
 
@@ -104,7 +104,7 @@ export default function TabPanelEditarPerfil (props) {
                     <div style={{padding:"0", display:"flex", flexDirection:"column"}}>
                         <HeaderContainer>
                             <div style={{position:"relative", height:"100%"}}>
-                                <img src={`${apiDomain}` + state.currentUser.cover_file_name} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/>
+                                <img src={`${apiDomain}` + state.currentUser.cover} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/>
                                 <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" onChange={(e) => updateCover(e.target.files)}/>
                                 <label htmlFor="icon-button-file">
                                     <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left">
@@ -115,7 +115,7 @@ export default function TabPanelEditarPerfil (props) {
                                 </label>
                             </div>
                             <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}>
-                                <img src={`${apiDomain}` + state.currentUser.avatar_file_name} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/>
+                                <img src={`${apiDomain}` + state.currentUser.avatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/>
                                 <ChangeAvatarDiv  style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}>
                                     <span>Alterar Foto</span>
                                 </ChangeAvatarDiv>
diff --git a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
index 75c96c27..e3b51866 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
@@ -17,11 +17,10 @@ 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, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import Template from '../PanelComponents/TemplateRecurso.js'
 import PanelTemplateColecao from '../PanelComponents/TemplateColecao.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelFavoritos (props) {
     const [loading, handleLoading] = useState(true)
@@ -32,29 +31,21 @@ export default function TabPanelFavoritos (props) {
     const [likedCollections, setlikedCollections] = useState([])
     const [likedCollectionsSlice, setlikedCollectionsSlice] = useState([])
 
+    function handleSuccess (responseArr) {
+        setlikedLearnObjs(responseArr[0].data)
+        setlikedLearnObjsSlice(responseArr[0].data.slice(0,4))
+
+        setlikedCollections(responseArr[1].data)
+        setlikedCollectionsSlice(responseArr[1].data.slice(0,4))
+
+        handleLoading(false)
+    }
+
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/learning_objects/liked'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/collections/liked'), props.config),
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr favoritos: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-                setlikedLearnObjs(responseArr[0].data)
-                setlikedLearnObjsSlice(responseArr[0].data.slice(0,4))
-
-                setlikedCollections(responseArr[1].data)
-                setlikedCollectionsSlice(responseArr[1].data.slice(0,4))
-
-                handleLoading(false)
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [ `/users/${props.id}/learning_objects/liked`, `/users/${props.id}/collections/liked`]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+
     }, [])
 
     const showMoreLikedLearnObj = () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js b/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js
index 421cadcd..0207eb9f 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js
@@ -21,7 +21,7 @@ import Paper from '@material-ui/core/Paper';
 import FormInput from "../../FormInput.js"
 import {CompletarCadastroButton} from './PanelSolicitarContaProfessor.js'
 import {ButtonCancelar} from './PanelEditarPerfil.js'
-import ValidateUserInput from '../../FormValidationFunction.js'
+import ValidateUserInput from '../../HelperFunctions/FormValidationFunction.js'
 import ModalExcluirConta from './ModalExcluirConta.js'
 
 export default function TabPanelGerenciarConta (props) {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
index 3d9c93d0..0b05d5ac 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
@@ -17,11 +17,10 @@ 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, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import Template from '../PanelComponents/TemplateRecurso.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -35,34 +34,27 @@ export default function TabPanelAtividades (props) {
     const [curating, setCurating] = useState([]);
     const [curatingSlice, setCuratingSlice] = useState([])
 
+    function handleSuccess (responseArr) {
+        setLearningObjects(responseArr[0].data)
+        setLearningObjectsSlice(responseArr[0].data.slice(0, 4))
+
+        setDrafts(responseArr[1].data)
+        setDraftsSlice(responseArr[1].data.slice(0, 4))
+
+        setCurating(responseArr[2].data)
+        setCuratingSlice(responseArr[2].data.slice(0, 4))
+
+        handleLoading(false)
+    }
+
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/learning_objects'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/drafts'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/submissions?status=submitted'), props.config)
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Meus recursos: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-
-                setLearningObjects(responseArr[0].data)
-                setLearningObjectsSlice(responseArr[0].data.slice(0, 4))
-
-                setDrafts(responseArr[1].data)
-                setDraftsSlice(responseArr[1].data.slice(0, 4))
-
-                setCurating(responseArr[2].data)
-                setCuratingSlice(responseArr[2].data.slice(0, 4))
-
-                handleLoading(false)
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [
+            `/users/${props.id}/learning_objects`,
+            `/users/${props.id}/drafts`,
+            `/users/${props.id}/submissions?status=submitted`
+        ]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     const showMoreLearnObj = () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js
index 464b40c3..e8f56bdf 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelRede.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js
@@ -17,11 +17,10 @@ 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, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ContainerRedeVazia from './ContainerRedeVazia.js'
 import PanelTemplateRede from '../PanelComponents/TemplateRede.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelRede (props) {
     const [loading, handleLoading] = useState(true)
@@ -44,32 +43,24 @@ export default function TabPanelRede (props) {
     }
     const showAllFollowers = () => {setFollowersSlice(followersList)}
 
+    function handleSuccess (responseArr) {
+        setFollowing(responseArr[0].data)
+        setFollowingSlice(responseArr[0].data.slice(0,4))
+
+
+        setFollowers(responseArr[1].data)
+        setFollowersSlice(responseArr[1].data.slice(0,4))
+
+        handleLoading(false)
+    }
 
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/following/User'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/followers'), props.config)
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Rede: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-
-                setFollowing(responseArr[0].data)
-                setFollowingSlice(responseArr[0].data.slice(0,4))
-
-
-                setFollowers(responseArr[1].data)
-                setFollowersSlice(responseArr[1].data.slice(0,4))
-
-                handleLoading(false)
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [
+            `/users/${props.id}/following/User`,
+            `/users/${props.id}/followers`
+        ]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js b/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js
index 769977a5..3e0fe1c7 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js
@@ -35,7 +35,6 @@ export default function TabPanelSolicitarContaProfessor (props) {
                 {
                     state.currentUser.submitter_request === 'default' || state.currentUser.submitter_request === 'rejected' ?
                     (
-                        [
                             <div style={{paddingLeft:"100px", paddingRight:"101px"}}>
                                 <ImageDiv/>
                                 <StyledH2>Você é professor(a) da educação básica e gostaria de colaborar com a Plataforma?</StyledH2>
@@ -48,28 +47,21 @@ export default function TabPanelSolicitarContaProfessor (props) {
                                     </CompletarCadastroButton>
                                 </div>
                             </div>
-                        ]
                     )
                     :
                     (
-                        [
                             <>
                             {
                                 state.currentUser.submitter_request === 'requested' ?
                                 (
-                                    [
                                         <span>Requested</span>
-                                    ]
                                 )
                                 :
                                 (
-                                    [
                                         <span>Professor</span>
-                                    ]
                                 )
                             }
                             </>
-                        ]
                     )
                 }
             </div>
diff --git a/src/Components/UploadPageComponents/ButtonsDiv.js b/src/Components/UploadPageComponents/ButtonsDiv.js
index 975017b0..b6aaaa3c 100644
--- a/src/Components/UploadPageComponents/ButtonsDiv.js
+++ b/src/Components/UploadPageComponents/ButtonsDiv.js
@@ -21,6 +21,7 @@ import ModalCancelar from './ModalCancelar.js'
 import { GreyButton, OrangeButton } from './StyledComponents';
 import Grid from '@material-ui/core/Grid';
 import {Redirect} from 'react-router-dom'
+
 export default function ButtonsDiv (props) {
     const [modalCancelar, toggleModalCancelar] = useState(false)
     const [redirectTrue, toggleRedirect] = useState(false)
diff --git a/src/Components/UploadPageComponents/FileToUpload.ts b/src/Components/UploadPageComponents/FileToUpload.ts
index 0fba0fc8..fddbf404 100644
--- a/src/Components/UploadPageComponents/FileToUpload.ts
+++ b/src/Components/UploadPageComponents/FileToUpload.ts
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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/>.*/
+
 export default class FileToUpload {
     static chunkSize = 262144;
     readonly request: XMLHttpRequest;
diff --git a/src/Components/UploadPageComponents/FileUploadStage.js b/src/Components/UploadPageComponents/FileUploadStage.js
index 5419bb3f..79cb05be 100644
--- a/src/Components/UploadPageComponents/FileUploadStage.js
+++ b/src/Components/UploadPageComponents/FileUploadStage.js
@@ -21,25 +21,18 @@ import styled from 'styled-components'
 import {WrapperBox} from './StyledComponents.js'
 import DoneIcon from '@material-ui/icons/Done';
 import DeleteIcon from '@material-ui/icons/Delete';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
-import axios from 'axios'
-import {apiUrl} from '../../env';
+import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function FileUploadStage (props) {
     const [uploading, toggleUploading] = useState(true)
 
+    function handleSuccess (data) {
+        props.handleNextStage("default")
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig
+        const url = `/learning_objects/${props.draftID}`
 
-        axios.delete( (`${apiUrl}/learning_objects/` + props.draftID), config).then(
-            (response) => {
-                console.log(response)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                props.handleNextStage("default")
-            },
-            (error) => {console.log(error)})
+        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/UploadPageComponents/ModalCancelar.js b/src/Components/UploadPageComponents/ModalCancelar.js
index 5906286e..8f9e6990 100644
--- a/src/Components/UploadPageComponents/ModalCancelar.js
+++ b/src/Components/UploadPageComponents/ModalCancelar.js
@@ -22,37 +22,23 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import {Link} from 'react-router-dom'
+import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function ModalCancelar (props) {
+
+    function handleSuccess (data) {
+        props.handleClose()
+        console.log('ir pra home')
+
+    }
     const handleDelete = () => {
-        console.log(props.draftID)
         // {/*delete the draft*/}
         if (props.draftID) {
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid'),
-                }
-            }
-            axios.delete( (`${apiUrl}/learning_objects/` + props.draftID), config).then(
-                (response) => {
-                    console.log(response)
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                }, (error) => {console.log(error)})
-        }
-        // {/*close modal*/}
-        props.handleClose()
-        // {/*change current page to home page*/}
-        console.log('ir pra home')
+            const url = `/learning_objects/${props.draftID}`
 
+            makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        }
     }
 
     return (
diff --git a/src/Components/UploadPageComponents/PartOne.js b/src/Components/UploadPageComponents/PartOne.js
index 46540f49..4e071e0c 100644
--- a/src/Components/UploadPageComponents/PartOne.js
+++ b/src/Components/UploadPageComponents/PartOne.js
@@ -18,10 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useState, useEffect} from 'react'
 import Grid from '@material-ui/core/Grid';
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import ButtonsDiv from './ButtonsDiv.js'
-
 import SobreORecurso from './Forms/SobreORecurso.js'
 import NewTitle from './Forms/NewTitle.js'
 import Keywords from './Forms/Keywords.js'
@@ -29,40 +26,20 @@ import Autor from './Forms/Autor.js'
 import TipoDeRecurso from './Forms/TipoDeRecurso.js'
 import Idioma from './Forms/Idioma.js'
 import {SendInfo} from './SendInfo.js'
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartOne (props) {
     // {/*const [subjects, setSubjects] = useState([])*/}
     const [languages, setLanguages] = useState([])
     const [objTypes, setObjTypes] = useState([])
 
+    function handleSuccessGetObjTypes (data) {
+        setObjTypes(data.sort((a, b) => (a.name) > (b.name) ? 1 : -1))
+    }
     useEffect( () => {
-        //     {/*get the list of subjects*/}
-        // {/*    axios.get(`${apiUrl}/subjects/`).then(
-        //         (response) => {
-        //             console.log(response.data)
-        //             setSubjects(response.data)
-        //         }, (error) => {
-        //             console.log(error)
-        //         }
-        //     )*/}
-
-            // {/*get the list of object_types*/}
-            axios.get(`${apiUrl}/object_types/`).then(
-                (response) => {
-                    setObjTypes(response.data.sort((a, b) => (a.name) > (b.name) ? 1 : -1))
-                }, (error) => {
-                    console.log(error)
-                }
-            )
-
-            // {/*get the list of languages*/}
-            axios.get(`${apiUrl}/languages/`).then(
-                (response) => {
-                    setLanguages(response.data)
-                }, (error) => {
-                    console.log(error)
-                }
-            )
+            makeAxiosGetRequest(`/object_types/`, handleSuccessGetObjTypes, (error) => {console.log(error)})
+
+            makeAxiosGetRequest(`/languages/`, (data) => {setLanguages(data)}, (error) => {console.log(error)})
     }, [])
 
     const handleSubmit = () => {
diff --git a/src/Components/UploadPageComponents/PartThree.js b/src/Components/UploadPageComponents/PartThree.js
index 3a2608c7..61b70f09 100644
--- a/src/Components/UploadPageComponents/PartThree.js
+++ b/src/Components/UploadPageComponents/PartThree.js
@@ -20,8 +20,7 @@ import React, {useState, useEffect, useContext} from 'react'
 import {Store} from '../../Store.js'
 import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../../env';
+import {apiDomain} from '../../env';
 import Stepper from './Stepper.js'
 import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
@@ -34,8 +33,8 @@ import TranslateIcon from '@material-ui/icons/Translate';
 import AssignmentIcon from '@material-ui/icons/Assignment';
 import { GrayButton, OrangeButton} from './StyledComponents';
 import ModalCancelar from './ModalCancelar.js'
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
 import {getDefaultThumbnail} from '../HelperFunctions/getDefaultThumbnail'
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartThree (props) {
     var moment = require('moment')
@@ -48,24 +47,22 @@ export default function PartThree (props) {
     const [description, setDescription] = useState('')
     const [author, setAuthor] = useState('')
 
+    function handleSuccess (data) {
+        setDraft(data)
+        /*extract subjects*/
+        setSubjects(data.subjects.map((subject)=>(subject.name)).join(', '))
+        setTags(data.tags.map(tag => tag.name))
+        setDescription(data.description)
+        setAuthor(data.author)
+        setLoading(false)
+    }
+
     useEffect(() => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
-            axios.get( (`${apiUrl}/learning_objects/` + props.draftID), config
-            ).then( (response) => {
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                setDraft(response.data)
-
-                /*extract subjects*/
-                setSubjects(response.data.subjects.map((subject)=>(subject.name)).join(', '))
-                setTags(response.data.tags.map(tag => tag.name))
-                setDescription(response.data.description)
-                setAuthor(response.data.author)
-                setLoading(false)
-            }, (error) => {console.log(error)})
+            const url = `/learning_objects/${props.draftID}`
+
+            makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+
         }
     }, [state.currentUser.id])
 
diff --git a/src/Components/UploadPageComponents/PartTwo.js b/src/Components/UploadPageComponents/PartTwo.js
index 02a83da8..63810377 100644
--- a/src/Components/UploadPageComponents/PartTwo.js
+++ b/src/Components/UploadPageComponents/PartTwo.js
@@ -19,8 +19,6 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useState, useEffect} from 'react'
 import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import DragAndDropThumbnail from './PartTwoComponents/DragAndDropThumbnail'
 import EducationalStage from './PartTwoComponents/EducationalStage'
 import Licenca from './PartTwoComponents/Licenca'
@@ -32,9 +30,9 @@ import ButtonsDiv from './ButtonsDiv.js'
 import SubjectsAndThemes from './PartTwoComponents/SubjectsAndThemes.js'
 import {SendInfo} from './SendInfo.js'
 import EditThumbnail from './PartTwoComponents/EditThumbnail.js'
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
 import DisplayThumbnail from './PartTwoComponents/DisplayThumbnail.js'
 import CustomCircularProgress from './PartTwoComponents/CustomCircularProgress';
+import {makeAxiosGetRequest, makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export function LoadingDiv () {
     return (
@@ -49,21 +47,15 @@ export default function PartTwo (props) {
     const [subjects, setSubjects] = useState([])
     const [themes, setThemes] = useState([])
 
+    function handleSuccess (data) {
+        setSubjects(data.filter(subject => subject.theme === false).sort((a,b) => a.name > b.name ? 1 : -1))
+        setThemes(data.filter(subject => subject.theme === true).sort((a,b) => a.name > b.name ? 1 : -1))
+    }
+
     useEffect(() => {
-        axios.get(`${apiUrl}/educational_stages/`).then(
-            (response) => {console.log(response);
-                setEduStages(response.data)
-            },
-            (error) => {console.log(error)}
-        )
-
-        axios.get(`${apiUrl}/subjects/`).then(
-            (response) => {console.log(response);
-                setSubjects(response.data.filter(subject => subject.theme === false).sort((a,b) => a.name > b.name ? 1 : -1))
-                setThemes(response.data.filter(subject => subject.theme === true).sort((a,b) => a.name > b.name ? 1 : -1))
-            },
-            (error) => {console.log(error)}
-        )
+        makeAxiosGetRequest(`/educational_stages/`, (data) => {setEduStages(data)}, (error) => {console.log(error)})
+
+        makeAxiosGetRequest(`/subjects/`, handleSuccess, (error) => {console.log(error)})
     }, [])
 
 
@@ -86,23 +78,17 @@ export default function PartTwo (props) {
      const updateThumb = (newThumbnail) => {
          setThumbnail(newThumbnail)
          console.log(thumbnail)
-
      }
+
      const finalizeThumb = () => {
          setThumbnailStage('uploading')
-         let config = getAxiosConfig()
+
+         const url = `/learning_objects/${props.draftID}`
+
          let fdThumb = new FormData()
          fdThumb.set('learning_object[thumbnail]', thumbnail)
-         axios.put((`${apiUrl}/learning_objects/` + props.draftID), fdThumb, config).then(
-             (response) => {
-                 setThumbnailStage('done')
-                 console.log(response.data)
-                 if ( response.headers['access-token'] ) {
-                     sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                 }
-             },
-             (error) => {console.log(error)}
-         )
+
+         makeAxiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('done')}, (error) => {console.log(error)})
      }
 
      const [thumbnailStage, setThumbnailStage] = useState('default')
diff --git a/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js b/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js
index 617a8e70..21640918 100644
--- a/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js
+++ b/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 { makeStyles } from '@material-ui/core/styles';
 import CircularProgress from '@material-ui/core/CircularProgress';
diff --git a/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js b/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js
index 261df04c..0c07e151 100644
--- a/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js
+++ b/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 {StyledFormLabel} from '../StyledComponents.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
diff --git a/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js b/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js
index 35be2ce5..7cce6bf2 100644
--- a/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js
+++ b/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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, {useState} from 'react'
 import {StyledFormLabel} from '../StyledComponents.js'
 import Cropper from '../../Cropper'
diff --git a/src/Components/UploadPageComponents/ReactFileToUpload.js b/src/Components/UploadPageComponents/ReactFileToUpload.js
index d7342d9c..ffbd6a45 100644
--- a/src/Components/UploadPageComponents/ReactFileToUpload.js
+++ b/src/Components/UploadPageComponents/ReactFileToUpload.js
@@ -19,13 +19,13 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useState, useEffect} from 'react'
 import CloudUploadIcon from '@material-ui/icons/CloudUpload';
 import {DottedBox, BlueButton} from './StyledComponents.js';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
+import {getAxiosConfigFromJSON, updateHeaders} from '../HelperFunctions/getAxiosConfig.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
 import axios from 'axios'
 import {apiUrl} from '../../env';
 
 export default function ReactFileToUpload (props) {
-    const [fileToUpload, setFileToUpload] = useState(null); 
+    const [fileToUpload, setFileToUpload] = useState(null);
     const chunkSize = 262144
     const uploadUrl = `${apiUrl}/learning_objects/` + props.draftID + '/chunk'
     const [fileName, setFileName] = useState(null)
@@ -50,7 +50,7 @@ export default function ReactFileToUpload (props) {
 
         for (var i = 0; i < total; i++) {
             let chunk = newFile.slice(currentChunkStartByte, currentChunkFinalByte)
-            let config = getAxiosConfig()
+            let config = getAxiosConfigFromJSON()
             let formData = new FormData()
             formData.append('_chunkFilename', newFile.name);
             formData.append('_chunkIdentifier', chunkIdentifier);
@@ -65,7 +65,7 @@ export default function ReactFileToUpload (props) {
                 const response = await axios.post(uploadUrl, formData, config);
                 console.log(response)
                 if (response.headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+                    updateHeaders(response.headers)
                 }
                 remainingBytes = newFile.size - currentChunkFinalByte;
                 if (currentChunkFinalByte === newFile.size) {
diff --git a/src/Components/UploadPageComponents/SendInfo.js b/src/Components/UploadPageComponents/SendInfo.js
index c931c5ba..166d9894 100644
--- a/src/Components/UploadPageComponents/SendInfo.js
+++ b/src/Components/UploadPageComponents/SendInfo.js
@@ -1,9 +1,25 @@
-import axios from 'axios'
-import {apiUrl} from '../../env';
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 
 export function SendInfo (fieldName, payload, draftID) {
-    console.log('fieldName', fieldName, 'payload', payload, 'draftID', draftID)
     const key = fieldName
     let value = payload
     if (key === "tags") {
@@ -18,23 +34,8 @@ export function SendInfo (fieldName, payload, draftID) {
         }
     }
     putObject.learning_object[key] = value
-    console.log(putObject)
 
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-        }
-    }
-    config.headers["Access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-    config.headers.Client = sessionStorage.getItem('@portalmec/clientToken')
-    config.headers.Uid = sessionStorage.getItem('@portalmec/uid')
-    axios.put((`${apiUrl}/learning_objects/` + draftID), putObject, config)
-     .then( (response) => {
-        if ( response.headers['access-token'] ) {
-            sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-        }
-        console.log(response)
-    } , (error) => {console.log(error)})
+    const url = `/learning_objects/${draftID}`
 
+    makeAxiosPutRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
 }
diff --git a/src/Components/UploadPageComponents/Stepper.js b/src/Components/UploadPageComponents/Stepper.js
index 2c0a1179..c1f9d40f 100644
--- a/src/Components/UploadPageComponents/Stepper.js
+++ b/src/Components/UploadPageComponents/Stepper.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+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 styled from 'styled-components'
 import PropTypes from 'prop-types';
diff --git a/src/Components/UploadPageComponents/UploadFileWrapper.js b/src/Components/UploadPageComponents/UploadFileWrapper.js
index d93e8d47..4abdcaa0 100644
--- a/src/Components/UploadPageComponents/UploadFileWrapper.js
+++ b/src/Components/UploadPageComponents/UploadFileWrapper.js
@@ -21,7 +21,7 @@ import LinkIcon from '../../img/link_icon.svg'
 import ChooseLink from './ChooseLinkSection.js'
 import {WrapperBox, BlueButton, GrayButton} from './StyledComponents.js';
 import {DottedBox} from './StyledComponents.js';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
+import {getAxiosConfigFromJSON, updateHeaders, makeAxiosDeleteRequest, makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
 import axios from 'axios'
 import {apiUrl} from '../../env';
@@ -71,7 +71,7 @@ export default function UploadFileWrapper (props) {
         handleNextStage("fileSelected")
         for (var i = 0; i < total; i++) {
             let chunk = newFile.slice(currentChunkStartByte, currentChunkFinalByte)
-            let config = getAxiosConfig()
+            let config = getAxiosConfigFromJSON()
             let formData = new FormData()
             formData.append('_chunkFilename', newFile.name);
             formData.append('_chunkIdentifier', chunkIdentifier);
@@ -86,7 +86,7 @@ export default function UploadFileWrapper (props) {
                 const response = await axios.post(uploadUrl, formData, config);
                 console.log(response)
                 if (response.headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+                    updateHeaders(response.headers)
                 }
                 setProgress(Math.round((currentChunkFinalByte/newFile.size) * 100))
                 remainingBytes = newFile.size - currentChunkFinalByte;
@@ -112,17 +112,9 @@ export default function UploadFileWrapper (props) {
 
     const handleDelete = () => {
         if (attachmentID != null) {
+            const url = `/learning_objects/${props.draftID}/attachment/${attachmentID}`
 
-        let config = getAxiosConfig()
-        axios.delete( (`${apiUrl}/learning_objects/` + props.draftID + '/attachment/' + attachmentID), config).then(
-            (response) => {
-                console.log(response)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                handleNextStage("default")
-            },
-            (error) => {console.log(error)})
+            makeAxiosDeleteRequest(url, (data) => {handleNextStage("default")}, (error) => {console.log(error)})
         }
     }
 
@@ -148,26 +140,18 @@ export default function UploadFileWrapper (props) {
     };
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
+
     const handleChooseLink = (link) => {
-        let config = getAxiosConfig()
+        const url = `/learning_objects/${props.draftID}`
+
         let payload = {
             "learning_object" : {
                 "id" : props.draftID,
                 "link" : link
             }
         }
-        axios.put((`${apiUrl}/learning_objects/` + props.draftID), payload, config).then(
-            (response) => {
-                console.log(response)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleSnackbar(true)
-            }, (error) => {
-                console.log(error)
-            }
-        )
 
+        makeAxiosPutRequest(url, payload, (data) => {toggleSnackbar(true)}, (error) => {console.log(error)})
     }
 
     switch (stage) {
diff --git a/src/Components/UserCard.js b/src/Components/UserCard.js
deleted file mode 100644
index c8cb4a80..00000000
--- a/src/Components/UserCard.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-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/>.*/
-
diff --git a/src/Components/UserPageComponents/Avatar.js b/src/Components/UserPageComponents/Avatar.js
index afecba14..f5ff994f 100644
--- a/src/Components/UserPageComponents/Avatar.js
+++ b/src/Components/UserPageComponents/Avatar.js
@@ -26,7 +26,7 @@ export default function ProfileAvatar (props) {
     // eslint-disable-next-line
     const {state, dispatch} = useContext(Store)
 
-    const [currentAvatar, setAvatar] = useState(state.currentUser.avatar_file_name)
+    const [currentAvatar, setAvatar] = useState(state.currentUser.avatar)
 
     const [hoverBool, toggleHover] = React.useState(false)
     const handleToggleHover = () => {toggleHover(!hoverBool)}
@@ -34,7 +34,7 @@ export default function ProfileAvatar (props) {
     const [open, toggleOpen] = useState(false)
     const controlModal = () => {toggleOpen(!open)}
 
-    useEffect(() => {setAvatar(state.currentUser.avatar_file_name)}, state.currentUser.avatar_file_name)
+    useEffect(() => {setAvatar(state.currentUser.avatar)}, state.currentUser.avatar)
 
     return (
         <>
diff --git a/src/Components/UserPageComponents/Cover.js b/src/Components/UserPageComponents/Cover.js
index 6fd3c539..14348745 100644
--- a/src/Components/UserPageComponents/Cover.js
+++ b/src/Components/UserPageComponents/Cover.js
@@ -27,7 +27,7 @@ import ModalAlterarCover from '../ModalAlterarCover/ModalAlterarCover.js'
 export default function Cover (props) {
     const {state} = useContext(Store)
 
-    const [currentCover, setCoverImg] = useState(state.currentUser.cover_file_name)
+    const [currentCover, setCoverImg] = useState(state.currentUser.cover)
     const [tempCover, setTempCover] = useState('')
 
     const [open, toggleOpen] = useState(false)
@@ -41,8 +41,8 @@ export default function Cover (props) {
     }
 
     useEffect( () => {
-        setCoverImg(state.currentUser.cover_file_name)
-    }, state.currentUser.cover_file_name)
+        setCoverImg(state.currentUser.cover)
+    }, state.currentUser.cover)
     return (
         <>
             <ModalAlterarCover
diff --git a/src/Pages/EditLearningObjectPage.js b/src/Pages/EditLearningObjectPage.js
index 7f4e39ba..f807d270 100644
--- a/src/Pages/EditLearningObjectPage.js
+++ b/src/Pages/EditLearningObjectPage.js
@@ -25,7 +25,6 @@ import UploadFileWrapper from '../Components/UploadPageComponents/UploadFileWrap
 import Alert from '../Components/Alert.js';
 import Snackbar from '@material-ui/core/Snackbar';
 import {GreyButton, OrangeButton, InfoBox} from '../Components/UploadPageComponents/StyledComponents.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig.js'
 import {Background} from '../Components/UploadPageComponents/StyledComponents'
 import LoadingSpinner from '../Components/LoadingSpinner'
 import NewTitle from '../Components/UploadPageComponents/Forms/NewTitle.js'
@@ -41,7 +40,7 @@ import {LoadingDiv} from '../Components/UploadPageComponents/PartTwo.js'
 import EditThumbnail from '../Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js'
 import DisplayThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js'
 import DragAndDropThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DragAndDropThumbnail'
-
+import {makeAxiosGetRequest, makeAxiosDeleteRequest, makeAxiosPutRequest, makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function EditLearningObjectPage (props) {
     const recursoId = props.match.params.recursoId
@@ -52,23 +51,19 @@ export default function EditLearningObjectPage (props) {
     const [eduStages, setEduStages] = useState([])
     const [subjects, setSubjects] = useState([])
 
+    function handleSuccessfulGet (data) {
+        setLearningObject(data)
+        if(data.thumbnail) {
+            setThumbnail(data.thumbnail)
+            setThumbnailStage('done')
+        }
+        setUpdatedInfo({...updatedInfo, 'id' : data.id})
+        toggleLoading(false)
+    }
+
     useEffect( () => {
-        const config = getAxiosConfig()
-        axios.get( (`${apiUrl}/learning_objects/` + recursoId), config
-            ).then( (response) => {
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                setLearningObject(response.data)
-                if(response.data.thumbnail) {
-                    setThumbnail(response.data.thumbnail)
-                    setThumbnailStage('done')
-                }
-                setUpdatedInfo({...updatedInfo, 'id' : response.data.id})
-                toggleLoading(false)
-            }, (error) => {console.log(error)}
-        )
+        const url = `/learning_objects/${recursoId}`
+        makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
         axios.get(`${apiUrl}/object_types/`).then(
             (response) => {
@@ -99,7 +94,7 @@ export default function EditLearningObjectPage (props) {
             },
             (error) => {console.log(error)}
         )
-    }, [state.currentUser.id])
+    }, [])
 
     const [loading, toggleLoading] = useState(true)
 
@@ -111,58 +106,37 @@ export default function EditLearningObjectPage (props) {
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
 
+    function handleSuccessfulDelete (data) {
+        toggleSnackbar(true)
+        props.history.push("/")
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig()
-        axios.delete((`${apiUrl}/learning_objects/` + learningObject.id), config).then(
-            (response) => {
-                toggleSnackbar(true)
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                props.history.push("/")
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+        const url = `/learning_objects/${learningObject.id}`
+
+        makeAxiosDeleteRequest(url, handleSuccessfulDelete, (error) => {console.log(error)})
     }
 
     const handleUpdateInfo = () => {
-        let config = getAxiosConfig()
-        console.log(updatedInfo)
+        const url = `/learning_objects/${learningObject.id}`
         let payload = {
             "learning_object" : updatedInfo
         }
-        console.log(payload)
-        axios.put((`${apiUrl}/learning_objects/` + learningObject.id), payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data); props.history.goBack()
-            },
-            (error) => {console.log(error)}
-        )
+
+        makeAxiosPutRequest(url, payload, (data) => {props.history.goBack()}, (error) => {console.log(error)})
     }
 
     const handlePost = () => {
-        let config = getAxiosConfig()
-        console.log(updatedInfo)
+        const url = `/learning_objects/${learningObject.id}/publish`
+
         let payload = {
             "learning_object" : updatedInfo
         }
-        console.log(payload)
-        axios.post((`${apiUrl}/learning_objects/` + learningObject.id + '/publish'), payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data);
-                props.history.push('/recurso/' + learningObject.id)
-            },
+
+        makeAxiosPostRequest(url, payload,
+            (data) => {props.history.push( `/recurso/${learningObject.id}`)},
             (error) => {console.log(error)}
         )
+
     }
 
     const [thumbnailStage, setThumbnailStage] = useState('default')
@@ -182,63 +156,31 @@ export default function EditLearningObjectPage (props) {
 
     }
 
+    function handleFinalizeThumb (data) {
+        if(data.thumbnail) {
+            setThumbnail(data.thumbnail)
+            setThumbnailStage('done')
+        }
+    }
+
     const finalizeThumb = () => {
         setThumbnailStage('uploading')
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            }
-        }
-        config.headers["access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-        config.headers.client = sessionStorage.getItem('@portalmec/clientToken')
-        config.headers.uid = sessionStorage.getItem('@portalmec/uid')
+
+        const url = `/learning_objects/${learningObject.id}`
 
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', thumbnail)
-        axios.put((`${apiUrl}/learning_objects/` + learningObject.id), fdThumb, config).then(
-            (response) => {
-                setThumbnailStage('done')
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                if(response.data.thumbnail) {
-                    setThumbnail(response.data.thumbnail)
-                    setThumbnailStage('done')
-                }
-            },
-            () => {
-                setThumbnailStage('default')
-            }
-        )
+
+        makeAxiosPutRequest(url, fdThumb, handleFinalizeThumb, (error) => {setThumbnailStage('default')})
     }
 
     const handleDeleteThumbnail = () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            }
-        }
-        config.headers["access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-        config.headers.client = sessionStorage.getItem('@portalmec/clientToken')
-        config.headers.uid = sessionStorage.getItem('@portalmec/uid')
+        const url = `/learning_objects/${learningObject.id}`
 
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', null)
-        axios.put((`${apiUrl}/learning_objects/` + learningObject.id), fdThumb, config).then(
-            (response) => {
-                setThumbnailStage('default')
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+
+        makeAxiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('default')}, (error) => {console.log(error)})
     }
 
     const chooseRenderStageThumbnail = () => {
diff --git a/src/Pages/EditProfilePage.js b/src/Pages/EditProfilePage.js
index b91d0c4d..9dfab8da 100644
--- a/src/Pages/EditProfilePage.js
+++ b/src/Pages/EditProfilePage.js
@@ -10,13 +10,11 @@ import Snackbar from '@material-ui/core/Snackbar';
 import {Alert} from '../Components/LoginModal.js'
 import Grid from '@material-ui/core/Grid'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import axios from 'axios'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
-import {apiUrl} from '../env.js'
+import {makeAxiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
 import {Store} from '../Store.js'
 
 export default function EditProfilePage (props) {
-    const {state} = useContext(Store)
+    const {state, dispatch} = useContext(Store)
     const id = state.currentUser.id
 
     // eslint-disable-next-line
@@ -38,62 +36,42 @@ export default function EditProfilePage (props) {
     }
 
     const updateUserInfo = (newUserInfo) => {
-        console.log(newUserInfo)
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/users/` + id), newUserInfo, config
-        ).then (
-            (res) => {
-                console.log(res)
-                if ( res.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', res.headers['access-token'])
-                }
-
-                props.history.push('/perfil')
-
-            },
-            (err) => {
-                console.log(err)
-            }
+        const url = `/users/${id}`
+
+        makeAxiosPutRequest(url, newUserInfo,
+            (data) => {props.history.push('/perfil')},
+            (error) => {console.log(error)}
         )
     }
 
+    function handleSuccessUpdateEmail (data) {
+        let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+
+        auth_headers['uid'] = data.uid
+
+        sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
+
+        const target = state.currentUser
+        const source = {uid : data.uid}
+        dispatch({
+            type : 'USER_UPDATED_EMAIL',
+            currUser : Object.assign(target, source)
+        })
+    }
+
     const updateUserEmail = (newUserInfo) => {
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/users/` + id), newUserInfo, config
-        ).then (
-            (res) => {
-                console.log(res)
-                if ( res.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', res.headers['access-token'])
-                }
-
-                sessionStorage.setItem('@portalmec/uid', res.headers['uid'])
-            },
-            (err) => {
-                console.log(err)
-            }
+        const url = `/users/${id}`
+
+        makeAxiosPutRequest(url, newUserInfo, handleSuccessUpdateEmail, (error) => {console.log(error)}
         )
     }
 
     const updateUserPassword = (newUserInfo) => {
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/users/` + id), newUserInfo, config
-        ).then (
-            (res) => {
-                console.log(res)
-                if ( res.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', res.headers['access-token'])
-                }
-
-                handleSnackbar(true)
-                
-            },
-            (err) => {
-                console.log(err)
-            }
+        const url = `/users/${id}`
+
+        makeAxiosPutRequest(url, newUserInfo,
+            (data) => {handleSnackbar(true)},
+            (error) => {console.log(error)}
         )
     }
 
diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js
index 6c2f4538..b95221c5 100644
--- a/src/Pages/PageProfessor.js
+++ b/src/Pages/PageProfessor.js
@@ -6,8 +6,7 @@ import PartTwo from '../Components/PageProfessorComponents/PartTwo.js'
 import PartThree from '../Components/PageProfessorComponents/PartThree.js'
 import SuccessfulRequest from '../Components/PageProfessorComponents/SuccessfulRequest.js'
 import ModalConfirmarProfessor from '../Components/PageProfessorComponents/ModalConfirmarProfessor.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PageProfessor (props) {
     const {state} = useContext(Store)
@@ -49,7 +48,6 @@ export default function PageProfessor (props) {
     }
 
     const handleBuscarParteUm = (ufAbbreviation, ufName, nomeMunicipio, inep) => {
-        console.log('handleBuscarParteUm: ', ufAbbreviation, ufName, nomeMunicipio, inep)
         setRegisterInformation({...registerInformation,
             school_uf : {
                 abbreviation: (ufAbbreviation ? ufAbbreviation : ''),
@@ -90,27 +88,24 @@ export default function PageProfessor (props) {
         props.history.push('/perfil/atualizacoes')
     }
 
+    function handleSuccessfulSubmit (data) {
+        toggleModal()
+        toggleStepper(false, false, false, true)
+    }
+
     const handleFinalSubmit = () => {
-        //adicionar headers de accessToken
-        axios.post( `${apiUrl}/users/teacher_request`, {
+        const url = `/users/teacher_request`
+
+        const payload = {
             city : registerInformation.school_city.name,
             cpf : registerInformation.teacher_cpf,
             inep_id : registerInformation.inep_code,
             phone : registerInformation.school_phone,
             school : registerInformation.school_name,
             uf : registerInformation.school_uf.name
-        },
-        { headers : {
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid')
-        }}
-        )
-        .then( (response) => {
-            toggleModal()
-            toggleStepper(false, false, false, true)
-        }, (error) => console.log('deu erro')
-    )
+        }
+
+        makeAxiosPostRequest(url, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
     }
 
     return (
@@ -118,7 +113,6 @@ export default function PageProfessor (props) {
         {
             state.userAgreedToPublicationTerms?
             (
-                [
                     <>
                         <ModalConfirmarProfessor open={modalOpen} handleClose={handleModal}
                          info={registerInformation} confirmar = {() => {handleFinalSubmit()}}
@@ -154,7 +148,6 @@ export default function PageProfessor (props) {
                             </div>
                         </div>
                     </>
-                ]
             )
             :
             (
diff --git a/src/Pages/PasswordRecoveryPage.js b/src/Pages/PasswordRecoveryPage.js
index a2691a50..bb918847 100644
--- a/src/Pages/PasswordRecoveryPage.js
+++ b/src/Pages/PasswordRecoveryPage.js
@@ -2,14 +2,12 @@ import React, {useState} from 'react'
 import {BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
 import Paper from '@material-ui/core/Paper';
 import styled from 'styled-components'
-import ValidateUserInput from '../Components/FormValidationFunction.js'
+import ValidateUserInput from '../Components/HelperFunctions/FormValidationFunction.js'
 import Default from '../Components/PasswordRecoveryComponents/Default.js'
 import Success from '../Components/PasswordRecoveryComponents/Success.js'
 import CaseError from '../Components/PasswordRecoveryComponents/Error.js'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import {apiUrl} from '../env';
-import axios from 'axios'
-
+import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PasswordRecoveryPage (props) {
 
@@ -40,18 +38,21 @@ export default function PasswordRecoveryPage (props) {
         setCase(value)
     };
 
+    function handleSuccessfulSubmit (data) {
+        handleChangeSwitch((data.success ? "success" : "error"))
+    }
     const onSubmit = (e) => {
         e.stopPropagation()
+
+        const url = `/auth/password`
+
         const payload = {
             "email" : formEmail.value,
             "redirect_url" : "https://plataformaintegrada.mec.gov.br/recuperar-senha#/alterar-senha"
         }
-        axios.post((`${apiUrl}/auth/password`), payload).then(
-            (response) => {
-                console.log(response)
-                handleChangeSwitch(response.data.success ? "success" : "error")
-            },
-            (error) => {console.log(error)})
+
+        makeAxiosPostRequest(url, payload, handleSuccessfulSubmit, (error) => {console.log(error)})
+
     }
 
 
diff --git a/src/Pages/ProfilePage.js b/src/Pages/ProfilePage.js
deleted file mode 100644
index 6959ad93..00000000
--- a/src/Pages/ProfilePage.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-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, {Component} from 'react';
-
-
-class ProfilePage extends Component {
-    render() {
-      return (
-        <h1> Página visulizar prefil de usuário</h1>
-      );
-    }
-  }
-
-export default ProfilePage;
diff --git a/src/Pages/PublicUserPage.js b/src/Pages/PublicUserPage.js
index 6ff59cb4..dda8ee1a 100644
--- a/src/Pages/PublicUserPage.js
+++ b/src/Pages/PublicUserPage.js
@@ -18,8 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useEffect, useState} from 'react'
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../env';
+import {apiDomain} from '../env';
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
 import Grid from '@material-ui/core/Grid';
 import FollowButton from '../Components/ContactButtons/FollowButton.js'
@@ -34,6 +33,7 @@ import TabRede from '../Components/TabPanels/PublicUserPageTabs/TabRede.js'
 import CheckDecagram from '../img/check-decagram-blue.svg'
 import ReportButton from '../Components/ReportButton.js'
 import {HeaderContainer, UserProfileContainer, CoverContainer, UserProfileInfoDiv, StyledTabs, CheckTeacherDiv, RodapeDiv, NavBarContentContainer, BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
+import {axiosAllRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 const RenderFollowContainer = (boolUserFollowed, id, followCount) => {
     return (
@@ -121,38 +121,19 @@ export default function PublicUserPage (props) {
     const handleCollections = (data) => {setCollections(data)}
     /*---------------------------------------------------------*/
 
+    function handleSuccess (responseArr) {
+        fillUserInfo(responseArr[0].data)
+
+        handleLearningObjects(responseArr[1].data)
+
+        handleCollections(responseArr[2].data)
+    }
 
     /*Component Will Mount*/
     useEffect( () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                'Uid': sessionStorage.getItem('@portalmec/uid'),
-            }
-        }
-        axios.all([
-            axios.get( (`${apiUrl}/users/` + id ), config ),
-            axios.get( (`${apiUrl}/users/` + id + '/learning_objects'), {'Accept': 'application/json','Content-Type':'application/json'}),
-            axios.get( (`${apiUrl}/users/` + id + '/collections'), {'Accept': 'application/json','Content-Type':'application/json'})
-        ])
-        .then( (responseArr) => {
-
-            console.log(responseArr)
-            fillUserInfo(responseArr[0].data)
-
-            console.log(responseArr[1])
-            handleLearningObjects(responseArr[1].data)
-
-            console.log(responseArr[2])
-            handleCollections(responseArr[2].data)
-            },
-            (error) => {
-                console.log('error while running ComponentDidMout')
-            }
-        )
+        const urls = [`/users/${id}`, `/users/${id}/learning_objects`, `/users/${id}/collections`]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
     /*---------------------------------------------------------*/
 
diff --git a/src/Pages/ResourcePage.js b/src/Pages/ResourcePage.js
index 546cffcd..8e8585df 100644
--- a/src/Pages/ResourcePage.js
+++ b/src/Pages/ResourcePage.js
@@ -19,8 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useEffect, useState, useContext} from 'react'
 import {Store} from '../Store.js'
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../env';
+import {apiDomain} from '../env';
 import Grid from '@material-ui/core/Grid';
 import TextoObjeto from '../Components/ResourcePageComponents/TextoObjeto.js'
 import Footer from '../Components/ResourcePageComponents/Footer.js'
@@ -36,7 +35,7 @@ import AppBar from '@material-ui/core/AppBar';
 import ButtonAvaliarRecurso from '../Components/ButtonAvaliarRecurso'
 import ModalAvaliarRecurso from '../Components/ModalAvaliarRecurso'
 import ModalConfirmarCuradoria from '../Components/ModalConfirmarCuradoria'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
+import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 function urlVerify (url) {
     return (url ? url.indexOf("youtu") !== -1 || url.indexOf("vimeo") !== -1 : false)
@@ -48,29 +47,16 @@ export default function LearningObjectPage (props){
     const [carregando, toggle] = useState(true)
     const [recurso, setRecurso] = useState({})
 
+    function handleSuccessfulGet (data) {
+        setRecurso(data)
+        toggle(false)
+    }
     useEffect( () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            }
-        }
-        if (state.currentUser.id !== "") {
-            config.headers["Access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-            config.headers.Client = sessionStorage.getItem('@portalmec/clientToken')
-            config.headers.Uid = sessionStorage.getItem('@portalmec/uid')
-        }
+        const url = `/learning_objects/${id}`
 
-        axios.get( (`${apiUrl}/learning_objects/` + id), config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            setRecurso(response.data)
-            toggle(false)
-        }, (error) => {console.log(error);})
-    }, [state.currentUser])
+        makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+
+    }, [])
 
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
@@ -118,15 +104,8 @@ export default function LearningObjectPage (props){
 
     const finalizeCuratorshipFlow = () => {
         handleModalConfirmarCuradoria(false)
-        let config = getAxiosConfig()
-        axios.get( (`${apiUrl}/learning_objects/` + id), config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            setRecurso(response.data)
-        }, (error) => {console.log(error);})
+        const url = `/learning_objects/${id}`
+        makeAxiosGetRequest(url, (data) => {setRecurso(data)}, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Pages/UploadPage.js b/src/Pages/UploadPage.js
index 8883bcef..41acd6fc 100644
--- a/src/Pages/UploadPage.js
+++ b/src/Pages/UploadPage.js
@@ -17,14 +17,12 @@ 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, {useState, useEffect, useContext} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Grid from '@material-ui/core/Grid';
 import UploadFileWrapper from '../Components/UploadPageComponents/UploadFileWrapper.js'
 import {Store} from '../Store.js'
 import {InfoBox} from '../Components/UploadPageComponents/StyledComponents.js'
 import Stepper from '../Components/UploadPageComponents/Stepper.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 import PartOne from '../Components/UploadPageComponents/PartOne.js'
 import PartTwo from '../Components/UploadPageComponents/PartTwo.js'
 import PartThree from '../Components/UploadPageComponents/PartThree.js'
@@ -42,19 +40,19 @@ export default function UploadPage (props) {
 
     const [loading, toggleLoading] = useState(true)
     const [draft, setDraft] = useState({})
+    function handleSuccessfulGet (data) {
+        setDraft(data)
+        toggleLoading(false)
+    }
     useEffect( () => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
+
+            const url = `/learning_objects/`
+
             let payload = {}
-            axios.post( (`${apiUrl}/learning_objects/`), payload, config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                setDraft(response.data)
-                toggleLoading(false)
-                console.log(response)
-            }, (error) => {console.log(error)})
+
+            makeAxiosPostRequest(url, payload, handleSuccessfulGet, (error) => {console.log(error)})
+
         }
     }, [])
 
@@ -66,38 +64,33 @@ export default function UploadPage (props) {
 
     const handlePost = () => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
+            const url = `/learning_objects/${draft.id}/publish`
+
             let payload = {}
-            axios.post( (`${apiUrl}/learning_objects/` + draft.id + '/publish'), payload, config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                handleModal(true)
-                console.log(response)
 
-            }, (error) => {console.log(error)})
+            makeAxiosPostRequest(url, payload,
+                (data) => {handleModal(true)},
+                (error) => {console.log(error)}
+            )
+
         }
     }
 
     const handleSubmit = () => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
+            const url = `/submissions/`
+
             let payload = {
                 "submission" : {
                     "learning_object_id" : draft.id
                 }
             }
 
-            axios.post( (`${apiUrl}/submissions/`), payload, config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                handleModal(true)
-                console.log(response)
+            makeAxiosPostRequest(url, payload,
+                (data) => {handleModal(true)},
+                (error) => {console.log(error)}
+            )
 
-            }, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js
index 92d821b5..d023af93 100644
--- a/src/Pages/UserPage.js
+++ b/src/Pages/UserPage.js
@@ -28,8 +28,6 @@ import TabPanelFavoritos from '../Components/TabPanels/UserPageTabs/PanelFavorit
 import TabPanelColecoes from '../Components/TabPanels/UserPageTabs/PanelColecoes.js'
 import TabPanelRede from '../Components/TabPanels/UserPageTabs/PanelRede.js'
 import TabPanelCuradoria from '../Components/TabPanels/UserPageTabs/PanelCuradoria.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Grid from '@material-ui/core/Grid';
 import {HeaderContainer, UserProfileContainer, CheckTeacherDiv, StyledTabs, RodapeDiv, NavBarContentContainer, BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
 
@@ -38,23 +36,7 @@ import ProfileAvatar from '../Components/UserPageComponents/Avatar.js'
 import UserInfo from '../Components/UserPageComponents/UserInfo.js'
 import EditProfileButton from '../Components/UserPageComponents/EditProfileButton.js'
 import SubmitterStatus from '../Components/UserPageComponents/SubmitterStatus.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig.js'
-
-const GetHeaderConfig = () => {
-
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid'),
-        }
-    }
-    // {/*'Host': 'api.portalmec.c3sl.ufpr.br',
-    // 'Cookie': ''*/}
-    return config
-}
+import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function UserPage (props){
     const {state, dispatch} = useContext(Store)
@@ -70,31 +52,25 @@ export default function UserPage (props){
         setTabValue(newValue)
     }
 
+    function handleSuccessfulGet (data) {
+        dispatch ( {
+            type: 'GET_USER',
+            user: data
+            }
+        )
+
+        if((data.role_ids.includes(4))) {
+            setTabs([
+                'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede', 'Curadoria'
+            ])
+        }
+    }
+
     useEffect( () => {
-        let config = getAxiosConfig()
         if (id !== '') {
-            axios.get( (`${apiUrl}/users/` + id), config)
-            .then( (response) => {
-                console.log(response)
-                dispatch ( {
-                    type: 'GET_USER',
-                    user: response.data
-                    }
-                )
-
-                if((response.data.role_ids.includes(4))) {
-                    setTabs([
-                        'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede', 'Curadoria'
-                    ])
-                }
-            }).catch( (error) => {
-                if (error.statusText === 401) {
-                    console.log('erro 401')
-                    //validate Token
-
-                    //retry request
-                }
-            })
+            const url = `/users/${id}`
+
+            makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
         }
     }, [])
 
@@ -115,7 +91,7 @@ export default function UserPage (props){
                         <ModalAlterarAvatar
                             open={modalOpen}
                             handleClose={() => {toggleModal(false)}}
-                            userAvatar={state.currentUser.avatar_file_name}
+                            userAvatar={state.currentUser.avatar}
                         />
 
                     <BackgroundDiv>
@@ -164,17 +140,17 @@ export default function UserPage (props){
 
                                 <Grid item xs={12}>
                                     {tabValue === 0 &&
-                                        <TabPanelAtividades id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelAtividades id={id}/>}
                                     {tabValue === 1 &&
-                                        <TabPanelMeusRecursos id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelMeusRecursos id={id}/>}
                                     {tabValue === 2 &&
-                                        <TabPanelFavoritos id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelFavoritos id={id}/>}
                                     {tabValue === 3 &&
-                                        <TabPanelColecoes id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelColecoes id={id}/>}
                                     {tabValue === 4 &&
-                                        <TabPanelRede id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelRede id={id}/>}
                                     {tabValue === 5 &&
-                                        <TabPanelCuradoria id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelCuradoria id={id}/>}
                                 </Grid>
                             </Grid>
                         </BackgroundDiv>
diff --git a/src/Store.js b/src/Store.js
index d53af64d..6beb65ee 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -39,8 +39,8 @@ const initialState = {
       id : '',
       name : '',
       email : '',
-      avatar_file_name : '',
-      cover_file_name : '',
+      avatar : '',
+      cover : '',
       uid : '',
       follows_count : 0,
       collections_count : 0,
@@ -83,7 +83,19 @@ function reducer(state, action) {
         return {
             ...state,
             userIsLoggedIn:action.userLoggedOut,
-            currentUser:action.login,
+            currentUser:{
+                askTeacherQuestion : false,
+                id : '',
+                name : '',
+                email : '',
+                avatar_file_name : '',
+                cover_file_name : '',
+                uid : '',
+                follows_count : 0,
+                collections_count : 0,
+                submitter_request : 'default',
+                roles : []
+            },
             userAgreedToPublicationTerms: false,
             userAgreedToPublicationPermissions: false
         }
@@ -136,6 +148,11 @@ function reducer(state, action) {
             ...state,
             currentUser:action.user
       }
+    case 'USER_UPDATED_EMAIL':
+        return {
+            ...state,
+            currentUser : action.currUser
+        }
     default:
       return state
   }
-- 
GitLab