ENEI2019-Public/App/app/store/actions/api.js

413 lines
10 KiB
JavaScript
Raw Normal View History

2019-01-31 00:46:49 +00:00
import { AsyncStorage } from 'react-native';
2019-02-22 23:38:34 +00:00
const axios = require('axios');
import { NetInfo } from 'react-native';
2019-01-31 00:46:49 +00:00
2019-02-12 23:07:19 +00:00
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS } from "./actionTypes" //Import the actions types constant we defined in our actions
2019-02-08 18:56:38 +00:00
import moment from 'moment'
2019-01-31 00:46:49 +00:00
2019-02-22 23:38:34 +00:00
export const connectionState = (status) => {
console.log(status);
return { type: 'CHANGE_CONNECTION_STATUS', isConnected: status };
};
2019-02-06 23:24:00 +00:00
export function getEvents(user){
return (dispatch)=>{
2019-02-08 18:56:38 +00:00
let events = [];
2019-02-06 23:24:00 +00:00
console.log("chegou aqui")
2019-02-08 18:56:38 +00:00
for(let key in user.Sessions){
events.push({
time: moment(user.Sessions[key].SessionStart).format('h:mm'),
timeEnd: moment(user.Sessions[key].SessionEnd).format('h:mm'),
2019-02-18 19:55:53 +00:00
//lineColor:'#009688',
2019-02-06 23:24:00 +00:00
imageUrl: 'https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/Vjkyj2hBg/welcome-white-sign-with-falling-colorful-confetti-animation-on-white-background_sglmmh3qm__F0013.png',
description:user.Sessions[key].Description,
name:user.Sessions[key].Name,
Enrolled:user.Sessions[key].Enrolled,
MaxAttendees:user.Sessions[key].MaxAttendees
})
}
dispatch({
type: GET_EVENTS,
2019-02-08 18:56:38 +00:00
events: events
2019-02-06 23:24:00 +00:00
});
}
}
2019-01-31 00:46:49 +00:00
const saveToken = async token => {
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
try {
2019-02-03 20:54:27 +00:00
await AsyncStorage.setItem('refreshToken', token.refreshToken).catch(a=>{
})
await AsyncStorage.setItem('userToken', token.access_token).catch(a=>{
2019-01-31 00:46:49 +00:00
2019-02-03 20:54:27 +00:00
})
await AsyncStorage.setItem('expirationDateToken', token.expirationDateToken.toString()).catch(a=>{
})
2019-01-31 00:46:49 +00:00
} catch (error) {
2019-02-03 20:54:27 +00:00
// Error retrieving data
console.log(error.message);
2019-01-31 00:46:49 +00:00
}
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
};
const getToken = async () => {
2019-02-03 20:54:27 +00:00
obj={}
2019-01-31 00:46:49 +00:00
try {
2019-02-03 20:54:27 +00:00
obj.access_token = await AsyncStorage.getItem('userToken') || 'none';
obj.expirationDateToken = await AsyncStorage.getItem('expirationDateToken') || 'none';
obj.refreshToken = await AsyncStorage.getItem('refreshToken') || 'none';
2019-02-22 23:38:34 +00:00
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
} catch (error) {
// Error retrieving data
console.log(error.message);
}
2019-02-03 20:54:27 +00:00
return obj;
2019-01-31 00:46:49 +00:00
}
const deleteToken = async () => {
try {
await AsyncStorage.removeItem('userToken');
2019-02-03 20:54:27 +00:00
await AsyncStorage.removeItem('expirationDateToken');
await AsyncStorage.removeItem('refreshToken');
2019-01-31 00:46:49 +00:00
} catch (error) {
// Error retrieving data
console.log(error.message);
}
}
2019-02-06 23:24:00 +00:00
const renewToken=(refresh)=>{
2019-02-17 00:46:36 +00:00
2019-02-06 23:24:00 +00:00
}
2019-01-31 00:46:49 +00:00
export function login(user, pass){
return (dispatch)=>{
console.log('user: ' +user + ' password: '+pass );
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
var details = {
'username': user,
'password': pass,
'grant_type': 'password'
};
var formBody = [];
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
for (var property in details) {
2019-02-11 18:14:17 +00:00
2019-01-31 00:46:49 +00:00
var encodedKey = encodeURIComponent(property);
2019-02-11 18:14:17 +00:00
2019-01-31 00:46:49 +00:00
var encodedValue = encodeURIComponent(details[property]);
2019-02-11 18:14:17 +00:00
2019-01-31 00:46:49 +00:00
formBody.push(encodedKey + "=" + encodedValue);
2019-02-11 18:14:17 +00:00
2019-01-31 00:46:49 +00:00
}
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
formBody = formBody.join("&");
fetch('http://enei2019.uingress.com/internal/api/token', {
2019-02-03 20:54:27 +00:00
method: 'POST',
2019-01-31 00:46:49 +00:00
2019-02-03 20:54:27 +00:00
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formBody
2019-01-31 00:46:49 +00:00
}).catch(err=>{
console.log(err);
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
alert("error");
2019-02-11 19:47:52 +00:00
co
2019-01-31 00:46:49 +00:00
dispatch({
type: API_LOGIN,
2019-02-11 19:47:52 +00:00
logged:false,
failedAttempt:true,
2019-01-31 00:46:49 +00:00
tokenData:'error'
});
2019-01-31 00:46:49 +00:00
}).then(res=>res.json()).then(parsed=>{
2019-02-11 19:47:52 +00:00
if(parsed.error_description=="Provided username and password is incorrect"){
dispatch({
type: API_LOGIN,
logged:false,
failedAttempt:true,
token: obj
});
}
2019-02-03 20:54:27 +00:00
var obj={
access_token:parsed.access_token,
2019-02-22 23:38:34 +00:00
expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
2019-02-03 20:54:27 +00:00
refreshToken:parsed.refresh_token,
valid:true
};
// deviceStorage.saveItem(parsed.access_token);
saveToken(obj).then(a=>{
obj.valid=true;
2019-02-11 19:47:52 +00:00
2019-02-03 20:54:27 +00:00
dispatch({
type: API_LOGIN,
logged:true,
2019-02-11 19:47:52 +00:00
failedAttempt:false,
2019-02-03 20:54:27 +00:00
token: obj
});
2019-01-31 00:46:49 +00:00
}).catch(a=>{
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
console.log('error saving')
2019-02-03 20:54:27 +00:00
obj.valid=false;
dispatch({
type: API_LOGIN,
2019-02-11 19:47:52 +00:00
logged:false,
failedAttempt:true,
2019-02-03 20:54:27 +00:00
token: obj
2019-01-31 00:46:49 +00:00
2019-02-03 20:54:27 +00:00
});
})
}
2019-02-11 19:47:52 +00:00
)
2019-01-31 00:46:49 +00:00
}
}
2019-02-03 20:54:27 +00:00
export function hold(){
return (dispatch)=>{
dispatch({
type: HOLD,
onHold:true
});
}
}
2019-02-06 23:24:00 +00:00
2019-02-03 20:54:27 +00:00
export function getUserInfo(token){
2019-01-31 00:46:49 +00:00
return (dispatch)=>{
2019-02-03 20:54:27 +00:00
//TODO: verificar validade do token
console.log('Chamada "getUserInfo"');
var obj = {
2019-01-31 00:46:49 +00:00
method: 'GET',
headers: {
2019-02-08 14:37:45 +00:00
'Authorization': `Bearer ${token.access_token}`,
2019-01-31 00:46:49 +00:00
},
}
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
fetch('http://enei2019.uingress.com/internal/api/Attendee/Detail', obj)
.then(function(res) {
2019-02-22 23:38:34 +00:00
console.log(res);
2019-02-08 14:23:56 +00:00
let obj = JSON.parse(res._bodyText);
2019-01-31 00:46:49 +00:00
2019-02-03 20:54:27 +00:00
dispatch({ type: USER_INFO, user: obj,onHold:false, logged:true });
2019-01-31 00:46:49 +00:00
2019-02-06 23:24:00 +00:00
}).catch(function(res){
2019-02-22 23:38:34 +00:00
console.log("erro")
// dispatch({ type: USER_INFO,onHold:false});
2019-01-31 00:46:49 +00:00
})
2019-02-05 15:47:19 +00:00
2019-01-31 00:46:49 +00:00
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
}
}
export function logoutUser(){
return (dispatch)=>{
deleteToken().then(a=>{
console.log('token apagado');
dispatch({
type: LOGOUT_USER,
loggedIn:false,
tokenData:'error',
token:false
});
}).catch(err=>{
console.log('errors');
})
}
}
2019-02-03 20:54:27 +00:00
//
2019-01-31 00:46:49 +00:00
export function checkUser(){
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
return (dispatch)=>{
getToken().then(a=>{
2019-02-03 20:54:27 +00:00
if(a.access_token=='none'){
a.valid=false;
2019-02-22 23:38:34 +00:00
console.log('token não existe em memória')
2019-02-03 20:54:27 +00:00
dispatch({type: CHECK_USER,token:a,logged:false, onHold:false});
2019-01-31 00:46:49 +00:00
}
else{
2019-02-03 20:54:27 +00:00
a.valid=true;
2019-02-22 23:38:34 +00:00
console.log('Existe Token em memória :'+ a.refreshToken )
2019-02-03 20:54:27 +00:00
//se expirar
if(Math.round(new Date().getTime()/1000) >= a.expirationDateToken){
2019-02-17 00:46:36 +00:00
refresh=a.refreshToken
2019-02-22 23:38:34 +00:00
2019-02-03 20:54:27 +00:00
//chamar funçao para renovar
2019-02-06 23:24:00 +00:00
console.log("expirou")
2019-02-17 00:46:36 +00:00
var details = {
'grant_type': 'refresh_token',
'refresh_token':refresh
};
2019-02-22 23:38:34 +00:00
2019-02-17 00:46:36 +00:00
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'){
2019-02-22 23:38:34 +00:00
2019-02-17 00:46:36 +00:00
console.log(formBody);
2019-02-22 23:38:34 +00:00
dispatch({type: CHECK_USER, token:'', logged:false, onHold:false});
2019-02-17 00:46:36 +00:00
}else{
2019-02-22 23:38:34 +00:00
2019-02-17 00:46:36 +00:00
var obj={
access_token:parsed.access_token,
2019-02-22 23:38:34 +00:00
expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
2019-02-17 00:46:36 +00:00
refreshToken:parsed.refresh_token,
valid:true
};
// deleteToken();
saveToken(obj).then(a=>{
2019-02-22 23:38:34 +00:00
console.log("Token guardado" )
2019-02-17 00:46:36 +00:00
console.log(obj)
dispatch({type: CHECK_USER, token:obj, logged:true, onHold:false});
})
}
}).catch(a=>{
2019-02-22 23:38:34 +00:00
console.log("erro na api")
2019-02-17 00:46:36 +00:00
dispatch({type: CHECK_USER, token:'', logged:false, onHold:false});
2019-02-06 23:24:00 +00:00
})
2019-02-03 20:54:27 +00:00
2019-02-17 00:46:36 +00:00
2019-02-03 20:54:27 +00:00
2019-02-17 00:46:36 +00:00
}else{
2019-02-03 20:54:27 +00:00
2019-02-17 00:46:36 +00:00
console.log("Tempo restante token: "+ Math.round((a.expirationDateToken-Math.round(new Date().getTime()/1000) )/60) +" Minutos");
2019-02-03 20:54:27 +00:00
2019-02-17 00:46:36 +00:00
//fazer validação da data e renovar o token
2019-02-22 23:38:34 +00:00
dispatch({type: CHECK_USER, token:a, logged:true, onHold:false, user:{Name:'Henrique'}});
2019-02-17 00:46:36 +00:00
}
2019-02-03 20:54:27 +00:00
2019-01-31 00:46:49 +00:00
}
}).catch(a=>{
2019-02-03 20:54:27 +00:00
2019-02-22 23:38:34 +00:00
console.log('erro a ler o token'+ a);
dispatch({type: CHECK_USER,token:false, logged:false, user:''});
2019-01-31 00:46:49 +00:00
})
}
2019-02-12 23:07:19 +00:00
}