diff --git a/App/app/App.js b/App/app/App.js index 33efa9f0..ccc7ec78 100755 --- a/App/app/App.js +++ b/App/app/App.js @@ -81,7 +81,7 @@ class App extends Component { logged: false, isModalVisible: false, state: { text: "" }, - username: "QR code", + username: "QR code ou", failedAttempt: false, push: 4, UI_loginScannerActive: false, @@ -105,23 +105,13 @@ class App extends Component { componentDidMount() { //this.props.hold(); - this.props.loginInternal(); - NetInfo.isConnected.addEventListener( - "connectionChange", - this.handleConnectivityChange - ); + // this.props.loginInternal(); + this.setState({ isModalVisible: false }); //verifica se o utilizador tem token guardado - this.props.checkUser(this.props.userDetails); - this.keyboardDidShowListener = Keyboard.addListener( - "keyboardDidShow", - this._keyboardDidShow - ); - this.keyboardDidHideListener = Keyboard.addListener( - "keyboardDidHide", - this._keyboardDidHide - ); + this.props.checkUser(this.props.token); + } componentWillUnmount() { NetInfo.isConnected.removeEventListener( @@ -135,7 +125,7 @@ class App extends Component { //faz call _reset=()=>{ //fecha modal - this.props.resetPassword(this.props.userDetails.token,this.state.resetText), + this.props.resetPassword(this.props.token,this.state.resetText), this.setState({modalResetPassword:false}) //faz call } @@ -249,7 +239,7 @@ class App extends Component { style={styles.input} placeholder={this.state.username} onChangeText={searchString => { - this.setState({ searchString }); + this.setState({ username:searchString }); }} maxLength={15} underlineColorAndroid="transparent" diff --git a/App/app/screens/Calendar.js b/App/app/screens/Calendar.js index 6d841d91..6b274962 100644 --- a/App/app/screens/Calendar.js +++ b/App/app/screens/Calendar.js @@ -47,7 +47,7 @@ class Calendar extends React.Component { componentDidMount() { this.props.getEvents(this.props.user); - this.props.getSessions(this.props.userDetails.token); + this.props.getSessions(this.props.token); } _openDetails = () => { @@ -142,7 +142,7 @@ class Calendar extends React.Component { } _refresh=()=>{ this.props.getEvents(this.props.user); - //this.props.getSessions(this.props.userDetails.token); + } render() { diff --git a/App/app/screens/Home.js b/App/app/screens/Home.js index d3e9d4db..27bc234c 100755 --- a/App/app/screens/Home.js +++ b/App/app/screens/Home.js @@ -78,7 +78,7 @@ class Home extends Component { //console.log(this.props.token); - this.props.getUserInfo(this.props.userDetails.token); + this.props.getUserInfo(this.props.token); //console.log('logged:'+this.props.logged); @@ -97,7 +97,7 @@ class Home extends Component { //var navigate = this.props.navigation.navigate } _update = () => { - this.props.getUserInfo(this.props.userDetails.token); + this.props.getUserInfo(this.props.token); }; render() { diff --git a/App/app/screens/Profile.js b/App/app/screens/Profile.js index 0f181648..1c0d425e 100644 --- a/App/app/screens/Profile.js +++ b/App/app/screens/Profile.js @@ -91,7 +91,7 @@ class Profile extends Component { _press=()=>{ this.props.changePassword( - this.props.userDetails.token, + this.props.token, this.state.oldPass, this.state.new1, this.state.new2 @@ -163,7 +163,7 @@ class Profile extends Component { if (formValid) { console.log("data valid"); - this.props.updateUser(this.props.userDetails.token, { + this.props.updateUser(this.props.token, { Name: this.state.name, Company: jobs, LastName: curso, diff --git a/App/app/screens/choosePath.js b/App/app/screens/choosePath.js index 6d015d5e..1049791c 100644 --- a/App/app/screens/choosePath.js +++ b/App/app/screens/choosePath.js @@ -77,8 +77,8 @@ class choosePath extends React.Component { }; componentDidMount() { // this.props.getEvents(this.props.user); - this.props.getAvailableGuestlists(this.props.userDetails.token); - this.props.getSessions(this.props.userDetails.token); + this.props.getAvailableGuestlists(this.props.token); + this.props.getSessions(this.props.token); this._mount(); //console.log('didMount'); @@ -120,10 +120,10 @@ class choosePath extends React.Component { _s() { - this.props.signSession(this.props.userDetails.token, item[index].Id); + this.props.signSession(this.props.token, item[index].Id); } getCareerPaths = () => { - this.props.getAvailableGuestlists(this.props.userDetails.token); + this.props.getAvailableGuestlists(this.props.token); console.log(this.props.calendar); }; _keyExtractor = (item, index) => item.id; @@ -265,13 +265,12 @@ class choosePath extends React.Component { this.props.waitChangeGuest(); this.props.changeGuestList( - this.props.userDetails.token, + this.props.token, itemValue ); // this.props.waitChangeGuest(); - // this.props.getAvailableSessions(this.props.userDetails.token); - + // this.props.waitChangeGuest(); // this.props.getSessionBlocks(this.props.sessions) @@ -328,7 +327,7 @@ class choosePath extends React.Component { this.props.removeSession( this.props.user, - this.props.userDetails.token, + this.props.token, item[index].Id ); }} @@ -350,7 +349,7 @@ class choosePath extends React.Component { //this.props.waitChangeGuest() this.props.signSession( this.props.user, - this.props.userDetails.token, + this.props.token, item[index].Id ); @@ -505,7 +504,8 @@ function mapStateToProps(state, props) { changingGuest: state.apiReducer.changingGuest, sessions: state.apiReducer.sessions, Blocks: state.apiReducer.Blocks, - showAlert: state.apiReducer.showAlert + showAlert: state.apiReducer.showAlert, + token: state.apiReducer.token }; } diff --git a/App/app/store/actions/api.js b/App/app/store/actions/api.js index ab93bb9b..ccc7967a 100644 --- a/App/app/store/actions/api.js +++ b/App/app/store/actions/api.js @@ -35,9 +35,8 @@ import { colors } from "react-native-elements"; const axios = require("axios"); -axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api"; +axios.defaults.baseURL = "https://tickets.enei.pt/internal/api"; -//http://enei2019.uingress.com/internal/api/Attendee/Edit const map = require("lodash/fp/map").convert({ cap: false }); @@ -49,32 +48,118 @@ export function waitLogin() { }; } -export function changePassword(token, old, new1, new2) { - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; - axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api"; +var checkAndRefresh = function(token) { + return new Promise(function(resolve, reject) { + //verificar se já expirou a validade do token + if (token == undefined || token.access_token == undefined) { + reject("user logged out"); + console.log("fds"); + } else if ( + Math.round(new Date().getTime() / 1000) >= token.expirationDateToken + ) { + console.log("vai renovar"); + var obj; - return dispatch => { - if (new1 != new2) { - Alert.alert("ERRO!", "As passords são diferentes..."); - } else { - axios - .post("/User/ChangePassword", { - OldPassword: old, - NewPassword: new1 + var details = { + refresh_token: token.refresh_token, + grant_type: "refresh_token" + }; + + var formBody = []; + + for (var property in details) { + var encodedKey = encodeURIComponent(property); + + var encodedValue = encodeURIComponent(details[property]); + + formBody.push(encodedKey + "=" + encodedValue); + } + + formBody = formBody.join("&"); + + fetch("https://tickets.enei.pt/internal/api/token", { + method: "POST", + + headers: { + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" + }, + + body: formBody + }) + .catch(err => { + console.log(err); + alert("Erro no login!!"); + + alert("error"); + reject("ERRRO"); }) - .then(a => { - Alert.alert("Sucesso!", "Password alterada com sucesso") - }) - .catch(p => { - Alert.alert("ERRO!", "Erro a alterar a password.\nA palavra original é inválida...\nCaso o erro persista verifica a tua conexão à internet e tenta novamente") + .then(res => res.json()) + .then(parsed => { + if (parsed.error == "invalid_grant") { + reject("erro"); + } else { + var obj = { + access_token: parsed.access_token, + refresh_token: parsed.refresh_token, + expirationDateToken: + Math.round(new Date().getTime() / 1000) + 3598 + }; + resolve(obj); + console.log(parsed); + } }); - - dispatch({ - type: OPEN_MODAL - }); + } else { + console.log( + "Tempo restante token: " + + Math.round( + (token.expirationDateToken - + Math.round(new Date().getTime() / 1000)) / + 60 + ) + + " Minutos" + ); + resolve(token); } + }); +}; + +export function changePassword(token, old, new1, new2) { + return dispatch => { + axios.defaults.baseURL = "https://tickets.enei.pt/internal/api"; + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; + if (new1 != new2) { + Alert.alert("ERRO!", "As passords são diferentes..."); + } else { + axios + .post("/User/ChangePassword", { + OldPassword: old, + NewPassword: new1 + }) + .then(a => { + Alert.alert("Sucesso!", "Password alterada com sucesso"); + }) + .catch(p => { + Alert.alert( + "ERRO!", + "Erro a alterar a password.\nA palavra original é inválida...\nCaso o erro persista verifica a tua conexão à internet e tenta novamente" + ); + }); + + dispatch({ + type: OPEN_MODAL + }); + } + }) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); + }); }; } //faz autenticação com API interna @@ -120,29 +205,43 @@ export function closeModal() { } export function updateUser(token, user) { - axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api"; - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; + axios.defaults.baseURL = "https://tickets.enei.pt/internal/api"; return dispatch => { - axios - - .post("/Attendee/Edit", user) - - .then(a => { - - Alert.alert("Sucesso", "As informações pessoais foram guardadas com sucesso.") - - console.log(a.data) - dispatch({ - type: UPDATE_USER, - user:a.data - }); + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; + axios + + .post("/Attendee/Edit", user) + + .then(a => { + Alert.alert( + "Sucesso", + "As informações pessoais foram guardadas com sucesso." + ); + + console.log(a.data); + dispatch({ + type: UPDATE_USER, + user: a.data + }); + }) + .catch(b => { + Alert.alert( + "ERRO!", + "Ocorreu um erro a guardar os dados pessoais." + ); + alert(b); + }); }) - .catch(b => { - Alert.alert("ERRO!","Ocorreu um erro a guardar os dados pessoais.") - alert(b) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); }); }; } @@ -199,17 +298,20 @@ export const connectionState = status => { }; export function removeSession(user, token, idSession) { - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; - var obj = { + var obj = { IdSession: idSession, Direction: 0 }; return dispatch => { //adiciona participante a uma palestra + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; + axios .post("/Session/RemoveAttendee", obj) //se não existir erro na chamada... @@ -273,14 +375,19 @@ export function removeSession(user, token, idSession) { .catch(b => { alert("Erro a inscrever na palestra"); }); + }) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); + }); }; } //inscrição em palestra através de ID export function signSession(user, token, idSession) { - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; + var obj = { IdSession: idSession, @@ -288,6 +395,13 @@ export function signSession(user, token, idSession) { }; return dispatch => { + + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; + //adiciona participante a uma palestra axios .post("/Session/AddAttendee", obj) @@ -318,7 +432,7 @@ export function signSession(user, token, idSession) { "Sucesso", "Inscrição na sessão efectuada com sucesso" ); - console.log("aqui1") + console.log("aqui1"); //obter informações pessoais: axios .get("/Attendee/Detail") @@ -327,7 +441,7 @@ export function signSession(user, token, idSession) { alert(error); }) .then(sucess => { - console.log("aqui2") + console.log("aqui2"); var result = getE(user); dispatch({ type: SIGN_SESSION, @@ -358,16 +472,28 @@ export function signSession(user, token, idSession) { .catch(b => { // alert("Erro a inscrever na palestra"); }); + }) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); + }); }; } export function getSessions(token) { - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; + return dispatch => { - axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api"; + + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; + + axios.defaults.baseURL = "https://tickets.enei.pt/internal/api"; axios.defaults.headers.common = { Authorization: `bearer ${token.access_token}` @@ -405,15 +531,26 @@ export function getSessions(token) { alert("Error a obter sessões disponíveis!!"); console.log(error); }); + }) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); + }); }; } export function getAvailableGuestlists(token) { - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; + return dispatch => { + + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; axios .get("/Attendee/AvailableGuestlists") .then(function(response) { @@ -430,6 +567,12 @@ export function getAvailableGuestlists(token) { }) .then(function() { // always executed + });}) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); }); }; } @@ -444,32 +587,30 @@ export function getAvailableGuestlists(token) { 15 - DS */ export function changeGuestList(token, guestID) { - //http://enei2019.uingress.com/internal/api/Attendee/ChangeGuestlist/ - - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; + + axios.defaults.baseURL = "https://tickets.enei.pt/internal/api"; return dispatch => { + + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; + var full = `/Attendee/ChangeGuestlist/${guestID}`; axios .get(full) .then(function(response) { - axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api"; - - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; axios .get("/Attendee/AvailableSessions") .then(function(response) { - // handle success - + //console.log(response); var cenas = []; @@ -481,14 +622,12 @@ export function changeGuestList(token, guestID) { )(response.data); for (let key in result) { - result[key].option = 0; cenas.push(result[key]); - } - console.log("-.-.-..-.-.-.-.-.-.") + console.log("-.-.-..-.-.-.-.-.-."); console.log(cenas); - console.log("-.-.-..-.-.-.-.-.-.") + console.log("-.-.-..-.-.-.-.-.-."); dispatch({ type: CHANGE_GUEST, sessions: response.data, @@ -511,6 +650,11 @@ export function changeGuestList(token, guestID) { }) .then(function() { // always executed + });}).catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); }); }; } @@ -539,15 +683,19 @@ export function getSessionBlocks(sessions) { } export function getAvailableSessions(token) { - //http://enei2019.uingress.com/internal/api/Attendee/AvailableSessions - axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api"; - axios.defaults.headers.common = { - Authorization: `bearer ${token.access_token}` - }; + axios.defaults.baseURL = "https://tickets.enei.pt/internal/api"; + + return dispatch => { + + checkAndRefresh(token) + .then(newToken => { + axios.defaults.headers.common = { + Authorization: `bearer ${newToken.access_token}` + }; axios .get("/Attendee/AvailableSessions") .then(function(response) { @@ -576,6 +724,12 @@ export function getAvailableSessions(token) { .catch(function(error) { alert("Error a obter sessões disponíveis!!"); console.log(error); + });}) + .catch(err => { + Alert.alert( + "Token ERROR!", + "Parace que houve um erro com o teu token... Reinicia a App. Caso o problema se mantenha, volta e instalar" + ); }); }; } @@ -690,49 +844,6 @@ export function getEvents(user) { }; } -const saveToken = async token => { - try { - await AsyncStorage.setItem("refreshToken", token.refreshToken).catch( - a => {} - ); - await AsyncStorage.setItem("userToken", token.access_token).catch(a => {}); - await AsyncStorage.setItem( - "expirationDateToken", - token.expirationDateToken.toString() - ).catch(a => {}); - } catch (error) { - // Error retrieving data - console.log(error.message); - } -}; - -const getToken = async () => { - obj = {}; - try { - obj.access_token = (await AsyncStorage.getItem("userToken")) || "none"; - obj.expirationDateToken = - (await AsyncStorage.getItem("expirationDateToken")) || "none"; - obj.refreshToken = (await AsyncStorage.getItem("refreshToken")) || "none"; - } catch (error) { - // Error retrieving data - console.log(error.message); - } - return obj; -}; - -const deleteToken = async () => { - try { - await AsyncStorage.removeItem("userToken"); - await AsyncStorage.removeItem("expirationDateToken"); - await AsyncStorage.removeItem("refreshToken"); - } catch (error) { - // Error retrieving data - console.log(error.message); - } -}; - -const renewToken = refresh => {}; - export function login(user, pass) { return dispatch => { console.log("user: " + user + " password: " + pass); @@ -755,7 +866,7 @@ export function login(user, pass) { formBody = formBody.join("&"); - fetch("http://enei2019.uingress.com/internal/api/token", { + fetch("https://tickets.enei.pt/internal/api/token", { method: "POST", headers: { @@ -808,7 +919,7 @@ export function login(user, pass) { var obj = { access_token: parsed.access_token, expirationDateToken: Math.round(new Date().getTime() / 1000) + 3598, - refreshToken: parsed.refresh_token, + refresh_token: parsed.refresh_token, valid: true }; @@ -840,288 +951,76 @@ export function hold() { export function getUserInfo(token) { return dispatch => { //TODO: verificar validade do token + checkAndRefresh(token) + .then(newToken => { + console.log('Chamada "getUserInfo"'); - console.log('Chamada "getUserInfo"'); + var obj = { + method: "GET", + headers: { + Authorization: `Bearer ${newToken.access_token}` + } + }; - var obj = { - method: "GET", - headers: { - Authorization: `Bearer ${token.access_token}` - } - }; + fetch("https://tickets.enei.pt/internal/api/Attendee/Detail", obj) + .then(function(res) { + console.log(res); + let obj = JSON.parse(res._bodyText); - fetch("http://enei2019.uingress.com/internal/api/Attendee/Detail", obj) - .then(function(res) { - console.log(res); - let obj = JSON.parse(res._bodyText); - - dispatch({ type: USER_INFO, user: obj, onHold: false, logged: true }); + dispatch({ + type: USER_INFO, + user: obj, + onHold: false, + logged: true, + token: newToken + }); + }) + .catch(function(res) { + console.log("erro"); + // dispatch({ type: USER_INFO,onHold:false}); + alert("Erro a obter a informação pessoal."); + }); }) - .catch(function(res) { - console.log("erro"); - // dispatch({ type: USER_INFO,onHold:false}); - alert("Erro a obter a informação pessoal."); + .catch(err => { + console.log("cenas da vida"); }); }; } export function logoutUser() { return dispatch => { - deleteToken() - .then(a => { - console.log("token apagado"); + console.log("token apagado"); + dispatch({ + type: LOGOUT_USER, + loggedIn: false, + tokenData: "error", + token: false + }); + }; +} + +export function checkUser(token) { + return dispatch => { + checkAndRefresh(token) + .catch(err => { + Alert("ERRO a fazer login"); + console.log(err); dispatch({ - type: LOGOUT_USER, - loggedIn: false, - tokenData: "error", - token: false + type: CHECK_USER, + logged: true, + onHold: false, + userDetails: u, + token: obj }); }) - .catch(err => { - console.log("errors"); - }); - }; -} - -// -function refreshToken() { - refresh = a.refreshToken; - - //chamar funçao para renovar - console.log("expirou"); - - var details = { - grant_type: "refresh_token", - refresh_token: refresh - }; - - var formBody = []; - - for (var property in details) { - var encodedKey = encodeURIComponent(property); - - var encodedValue = encodeURIComponent(details[property]); - - formBody.push(encodedKey + "=" + encodedValue); - } - - formBody = formBody.join("&"); - - fetch("http://enei2019.uingress.com/internal/api/token", { - method: "POST", - - headers: { - "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" - }, - - body: formBody - }) - .then(res => res.json()) - .then(parsed => { - console.log(parsed); - - if (parsed.error == "invalid_grant") { - console.log(formBody); - dispatch({ type: CHECK_USER, token: "", logged: false, onHold: false }); - } else { - var obj = { - access_token: parsed.access_token, - expirationDateToken: Math.round(new Date().getTime() / 1000) + 3598, - refreshToken: parsed.refresh_token, - valid: true - }; - - // deleteToken(); - saveToken(obj).then(a => { - console.log("Token guardado"); - console.log(obj); - dispatch({ - type: CHECK_USER, - token: obj, - logged: true, - onHold: false - }); - }); - } - }) - .catch(a => { - console.log("erro na api"); - dispatch({ type: CHECK_USER, token: "", logged: false, onHold: false }); - }); -} - -refreshLogin = async (user, pass) => { - console.log("login"); - - console.log("user: " + user + " password: " + pass); - - var details = { - username: user, - password: pass, - grant_type: "password" - }; - - var formBody = []; - - for (var property in details) { - var encodedKey = encodeURIComponent(property); - - var encodedValue = encodeURIComponent(details[property]); - - formBody.push(encodedKey + "=" + encodedValue); - } - - formBody = formBody.join("&"); - - fetch("http://enei2019.uingress.com/internal/api/token", { - method: "POST", - - headers: { - "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" - }, - - body: formBody - }) - .catch(err => { - console.log(err); - - alert("error"); - }) - .then(res => res.json()) - .then(parsed => { - if ( - parsed.error_description == - "Provided username and password is incorrect" - ) { - console.error("cenas da vida"); - } else { - console.log(parsed); - - var obj = { - access_token: parsed.access_token, - expirationDateToken: Math.round(new Date().getTime() / 1000) + 3598, - refreshToken: parsed.refresh_token, - valid: true - }; - - go(); - return obj; - } - }); -}; - -go = t => { - dispatch({ - type: CHECK_USER, - logged: true, - onHold: false, - user: { Name: "Henrique" }, - token: t - }); -}; - -export function checkUser(userDetails) { - var u = userDetails; - - return dispatch => { - //verifica se existe utilizador em memória - if ( - userDetails.username != undefined && - userDetails.username != "" && - userDetails.password != undefined && - userDetails.password != "" - ) { - //verifica a validade do token - if ( - Math.round(new Date().getTime() / 1000) >= - userDetails.token.expirationDateToken - ) { - var details = { - username: userDetails.username, - password: userDetails.password, - grant_type: "password" - }; - - var formBody = []; - - for (var property in details) { - var encodedKey = encodeURIComponent(property); - - var encodedValue = encodeURIComponent(details[property]); - - formBody.push(encodedKey + "=" + encodedValue); - } - - formBody = formBody.join("&"); - - fetch("http://enei2019.uingress.com/internal/api/token", { - method: "POST", - - headers: { - "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" - }, - body: formBody - }) - .catch(err => { - alert("Erro a validar o utilizador"); - }) - .then(res => res.json()) - .then(parsed => { - if ( - parsed.error_description == - "Provided username and password is incorrect" - ) { - alert("Ups, password ou utilizador errada"); - } else { - console.log(parsed); - - var obj = { - access_token: parsed.access_token, - expirationDateToken: - Math.round(new Date().getTime() / 1000) + 3598, - refreshToken: parsed.refresh_token, - valid: true - }; - - dispatch({ - type: CHECK_USER, - logged: true, - onHold: false, - userDetails: u, - token: obj - }); - } - }); - } else { - console.log( - "Tempo restante token: " + - Math.round( - (userDetails.token.expirationDateToken - - Math.round(new Date().getTime() / 1000)) / - 60 - ) + - " Minutos" - ); - - //dispatch home + .then(newToken => { dispatch({ type: CHECK_USER, logged: true, onHold: false, user: { Name: "Henrique" }, - userDetails: u + token: newToken }); - } - } - //utilizador não existe em memória - else { - dispatch({ - type: CHECK_USER, - logged: false, - onHold: false, - userDetails: u }); - //dispatch menu de login - } }; -} \ No newline at end of file +} diff --git a/App/app/store/reducers/api.js b/App/app/store/reducers/api.js index 9dd52be0..08140067 100644 --- a/App/app/store/reducers/api.js +++ b/App/app/store/reducers/api.js @@ -36,7 +36,8 @@ let apiState = { password: "", token: { expirationDateToken: 0, - access_token: "" + access_token: "", + refresh_token:"" } }, calendar: {}, @@ -61,22 +62,31 @@ const apiReducer = (state = apiState, action) => { var expirationDateTokenA = 0; var access_tokenA = ""; + var refresh_tokenA= "puta"; - if (action.payload.apiReducer.userDetails.token != undefined) { + if (action.payload.apiReducer.token != undefined) { if ( - action.payload.apiReducer.userDetails.token.expirationDateToken != + action.payload.apiReducer.token.expirationDateToken != undefined ) { expirationDateTokenA = - action.payload.apiReducer.userDetails.token.expirationDateToken; + action.payload.apiReducer.token.expirationDateToken; } if ( - action.payload.apiReducer.userDetails.token.access_token != + action.payload.apiReducer.token.access_token != undefined ) { access_tokenA = - action.payload.apiReducer.userDetails.token.access_token; + action.payload.apiReducer.token.access_token; + } + if ( + action.payload.apiReducer.token.refresh_token != + undefined + ) { + + refresh_tokenA = + action.payload.apiReducer.token.refresh_token; } } @@ -88,11 +98,13 @@ const apiReducer = (state = apiState, action) => { userDetails: { token: { expirationDateToken: expirationDateTokenA, - access_token: access_tokenA + access_token: access_tokenA, + refresh_token:refresh_tokenA, }, username: action.payload.apiReducer.userDetails.username, password: action.payload.apiReducer.userDetails.password - } + }, + token:action.payload.apiReducer.token }; } @@ -123,19 +135,19 @@ const apiReducer = (state = apiState, action) => { password: action.userDetails.password }, loadingLogin: false, - onHold: action.onHold + onHold: action.onHold, + token:action.token }); return state; case CHECK_USER: - var u = action.userDetails; - if (action.token != undefined) u.token = action.token; - + state = Object.assign({}, state, { logged: action.logged, onHold: action.onHold, - userDetails: u + // userDetails: u, + token:action.token }); return state; @@ -144,16 +156,20 @@ const apiReducer = (state = apiState, action) => { state = Object.assign({}, state, { user: {}, userDetails: {}, + token:{}, logged: false }); return state; case USER_INFO: + state = Object.assign({}, state, { user: action.user, loggedIn: action.loggedIn, - onHold: action.onHold + onHold: action.onHold, + token: action.token + }); return state;