novo update

This commit is contained in:
henrydays 2019-02-27 11:22:43 +00:00
parent 603ab626bf
commit 7634f1b659
5 changed files with 261 additions and 120 deletions

View File

@ -84,7 +84,8 @@ class App extends Component {
username:'QR code',
failedAttempt: false,
push:4,
UI_loginScannerActive:false
UI_loginScannerActive:false,
userDetails:{username:'', password:''}
};
@ -107,7 +108,7 @@ class App extends Component {
this.setState({isModalVisible: false})
//verifica se o utilizador tem token guardado
this.props.checkUser();
this.props.checkUser(this.props.userDetails);
this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
@ -143,7 +144,7 @@ class App extends Component {
render() {
if (!this.props.logged) {
if (!this.props.logged && this.props.onHold) {
return (
@ -530,7 +531,8 @@ mapStateToProps = (state, props) => {
onHold: state.apiReducer.onHold,
logged: state.apiReducer.logged,
failedAttempt:state.apiReducer.failedAttempt,
UI_loginScannerActive: state.uiReducer.UI_loginScannerActive
UI_loginScannerActive: state.uiReducer.UI_loginScannerActive,
userDetails: state.apiReducer.userDetails,
}
};

View File

@ -60,7 +60,8 @@ class Home extends Component {
token: {valid: false},
logged: true,
onHold: true,
user: {Name: ''}
user: {Name: ''},
userDetails:{}
};
}
handleConnectivityChange = () => {
@ -74,7 +75,7 @@ class Home extends Component {
//console.log(this.props.token);
this.props.getUserInfo(this.props.token);
this.props.getUserInfo(this.props.userDetails.token);
//console.log('logged:'+this.props.logged);
@ -342,7 +343,8 @@ function mapStateToProps(state, props) {
token: state.apiReducer.token,
user: state.apiReducer.user,
logged: state.apiReducer.logged
logged: state.apiReducer.logged,
userDetails: state.apiReducer.userDetails,
}
}

View File

@ -6,6 +6,7 @@ import { NetInfo } from 'react-native';
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
import moment from 'moment'
import { compose } from 'redux';
export const connectionState = (status) => {
@ -166,7 +167,8 @@ export function login(user, pass){
type: API_LOGIN,
logged:false,
failedAttempt:true,
token: obj
token: obj,
user:{Name:'Henrique'}
});
}
@ -176,39 +178,16 @@ export function login(user, pass){
refreshToken:parsed.refresh_token,
valid:true
};
dispatch({
type: API_LOGIN,
logged:true,
failedAttempt:false,
token:obj,
user:{Name:'Henrique'}
// deviceStorage.saveItem(parsed.access_token);
saveToken(obj).then(a=>{
obj.valid=true;
dispatch({
type: API_LOGIN,
logged:true,
failedAttempt:false,
token: obj
});
}).catch(a=>{
console.log('error saving')
obj.valid=false;
dispatch({
type: API_LOGIN,
logged:false,
failedAttempt:true,
token: obj
});
})
});
}
@ -290,11 +269,209 @@ export function logoutUser(){
}
//
function refreshToken(){
export function checkUser(){
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"){
throw "error";
}
var obj={
access_token:parsed.access_token,
expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
refreshToken:parsed.refresh_token,
valid:true
};
return obj;
}
)
}
export function checkUser(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){
//se tiver expirado
refreshLogin().then(a=>{
console.log("tentativa de relogin")
var u= userDetails;
dispatch({type: CHECK_USER, logged:true, onHold:false, user:{Name:'Henrique'}, userDetails:u});
}).catch(b=>{
console.log("error");
dispatch({type: CHECK_USER,logged:false, onHold:false});
})
}else{
console.log("chegou asui")
//dispatch home
dispatch({type: CHECK_USER, logged:false, onHold:false, user:{Name:'Henrique'}});
}
}
//utilizador não existe em memória
else{
dispatch({type: CHECK_USER,logged:false, onHold:false});
//dispatch menu de login
}
/*
getToken().then(a=>{
@ -316,78 +493,10 @@ export function checkUser(){
//se expirar
if(Math.round(new Date().getTime()/1000) >= a.expirationDateToken){
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(user, pass).then(a=>{
console.log("refreseh")
})
}else{
@ -408,6 +517,5 @@ export function checkUser(){
dispatch({type: CHECK_USER,token:false, logged:false, user:''});
})
}
}
*/
}}

View File

@ -1,7 +1,25 @@
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS } from "../actions/actionTypes" //Import the actions types constant we defined in our actions
import { REHYDRATE } from 'redux-persist';
let apiState= { isConnected:false, token:{valid:false}, tokenData:'error', logged:false, onHold:true,user:{}, events:[], failedAttempt:false}
let apiState= {
isConnected:false,
token:{valid:false},
tokenData:'error',
logged:false,
onHold:true,user:{},
events:[],
failedAttempt:false,
userDetails:{
username:'',
password:'',
token:{
expirationDateToken:0,
access_token:''
}
},
}
const apiReducer = (state = apiState, action) => {
@ -13,7 +31,9 @@ const apiReducer = (state = apiState, action) => {
// logged:false,
//onHold:true,
user: action.payload.apiReducer.user
user: action.payload.apiReducer.user,
userDetails:{token:{expirationDateToken:0, access_token:'',username:"", password:""}}
};
case 'CHANGE_CONNECTION_STATUS':
return Object.assign({}, state, {
@ -26,8 +46,17 @@ const apiReducer = (state = apiState, action) => {
return state;
case API_LOGIN:
state=Object.assign({},state, { logged:action.logged, token:action.token, failedAttempt: action.failedAttempt, user:user});
state=Object.assign({},state, {
logged:action.logged,
token:action.token,
failedAttempt: action.failedAttempt,
user:action.user,
userDetails: {token:action.token},
});
return state;

View File

@ -168,7 +168,7 @@
</div>
</li>
<li>
<a href="#" title="Quando é o programa vai estar disponível?" rel="nofollow" class="toggle">Quando é o programa vai estar disponível?</a>
<a href="#" title="Quando é que o programa vai estar disponível?" rel="nofollow" class="toggle">Quando é que o programa vai estar disponível?</a>
<div class="content-accordion">
<p>O programa vai sendo lançado nas próximas semanas de forma iterativa.</p>