novo update
This commit is contained in:
parent
603ab626bf
commit
7634f1b659
|
@ -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,
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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:''});
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
*/
|
||||
}}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue