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-02-08 14:58:51 +00:00
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
2019-02-08 14:58:51 +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
}