Files
freeplanet/src/store/Modules/UserStore.ts

541 lines
15 KiB
TypeScript
Raw Normal View History

2018-11-15 19:48:37 +01:00
import Api from '@api'
import { ISignupOptions, ISigninOptions, IUserState } from 'model'
import { ILinkReg, IResult, IIdToken } from 'model/other'
2018-11-17 21:07:07 +01:00
import { storeBuilder } from './Store/Store'
import router from '@router'
import { serv_constants } from '../Modules/serv_constants'
import { rescodes } from '../Modules/rescodes'
import { GlobalStore, UserStore, Todos } from '@store'
import globalroutines from './../../globalroutines/index'
2018-11-15 19:48:37 +01:00
import translate from './../../globalroutines/util'
const bcrypt = require('bcryptjs')
// State
const state: IUserState = {
userId: '',
email: '',
2018-11-15 19:48:37 +01:00
username: '',
idapp: process.env.APP_ID,
password: '',
lang: '',
repeatPassword: '',
idToken: '',
tokens: [],
verified_email: false,
categorySel: 'personal',
servercode: 0,
x_auth_token: ''
2018-11-15 19:48:37 +01:00
}
2018-11-15 19:48:37 +01:00
const b = storeBuilder.module<IUserState>('UserModule', state)
const stateGetter = b.state()
2018-11-15 19:48:37 +01:00
namespace Getters {
const lang = b.read(state => {
2018-11-15 19:48:37 +01:00
if (state.lang !== '') {
return state.lang
} else {
return process.env.LANG_DEFAULT
}
}, 'lang')
const tok = b.read(state => {
2018-11-15 19:48:37 +01:00
if (state.tokens) {
if (typeof state.tokens[0] !== 'undefined') {
return state.tokens[0].token
} else {
return ''
}
} else {
return ''
}
}, 'tok')
2018-11-15 19:48:37 +01:00
const isServerError = b.read(state => {
return (state.servercode === rescodes.ERR_SERVERFETCH)
}, 'isServerError')
const getServerCode = b.read(state => {
return state.servercode
}, 'getServerCode')
2018-11-15 19:48:37 +01:00
export const getters = {
get lang() {
return lang()
},
get tok() {
return tok()
},
get isServerError() {
return isServerError()
},
get getServerCode() {
return getServerCode()
}
2018-11-15 19:48:37 +01:00
}
2018-11-15 19:48:37 +01:00
}
namespace Mutations {
function authUser(state, data: IUserState) {
state.userId = data.userId
state.username = data.username
2018-11-15 19:48:37 +01:00
state.idToken = data.idToken
state.verified_email = data.verified_email
state.category = data.categorySel
2018-11-15 19:48:37 +01:00
// @ts-ignore
state.tokens = [
{ access: 'auth', token: data.idToken }
]
}
2018-11-15 19:48:37 +01:00
function setpassword(state: IUserState, newstr: string) {
state.password = newstr
}
2018-11-15 19:48:37 +01:00
function setemail(state: IUserState, newstr: string) {
state.email = newstr
}
2018-11-15 19:48:37 +01:00
function setlang(state: IUserState, newstr: string) {
state.lang = newstr
localStorage.setItem('lang', state.lang)
}
2018-11-15 19:48:37 +01:00
function UpdatePwd(state: IUserState, data: IIdToken) {
state.idToken = data.idToken
if (!state.tokens) {
state.tokens = []
}
state.tokens.push({ access: 'auth', token: data.idToken })
}
function setServerCode(state: IUserState, num: number) {
state.servercode = num
}
function setAuth(state: IUserState, x_auth_token: string) {
state.x_auth_token = x_auth_token
}
2018-11-15 19:48:37 +01:00
function clearAuthData(state: IUserState) {
state.userId = ''
2018-11-15 19:48:37 +01:00
state.username = ''
state.tokens = []
state.idToken = ''
state.verified_email = false
state.categorySel = 'personal'
}
function setErrorCatch(state: IUserState, err: number) {
if (state.servercode !== rescodes.ERR_SERVERFETCH) {
state.servercode = err
}
}
function getMsgError(state: IUserState, err: number) {
let msgerrore = ''
if (err !== rescodes.OK) {
msgerrore = 'Error [' + state.servercode + ']: '
if (state.servercode === rescodes.ERR_SERVERFETCH) {
msgerrore = translate('fetch.errore_server')
} else {
msgerrore = translate('fetch.errore_generico')
}
if (process.env.DEV) {
console.log('ERROREEEEEEEEE: ', msgerrore, ' (', err, ')')
}
}
// return { code: state.servercode, msg: msgerrore }
return msgerrore
}
2018-11-15 19:48:37 +01:00
export const mutations = {
authUser: b.commit(authUser),
setpassword: b.commit(setpassword),
setemail: b.commit(setemail),
setlang: b.commit(setlang),
UpdatePwd: b.commit(UpdatePwd),
setServerCode: b.commit(setServerCode),
setAuth: b.commit(setAuth),
clearAuthData: b.commit(clearAuthData),
setErrorCatch: b.commit(setErrorCatch),
getMsgError: b.commit(getMsgError)
}
2018-11-15 19:48:37 +01:00
}
namespace Actions {
async function sendUserEdit(context, form: Object) {
try {
const { data } = await Api.postFormData('profile/edit', form)
2018-11-15 19:48:37 +01:00
console.log(data)
// return new ApiSuccess({data})
} catch {
// return new ApiError()
}
}
async function resetpwd(context, paramquery: IUserState) {
let call = process.env.MONGODB_HOST + '/updatepwd'
console.log('CALL ' + call)
let usertosend = {
keyappid: process.env.PAO_APP_ID,
idapp: process.env.APP_ID,
email: paramquery.email,
password: paramquery.password,
tokenforgot: paramquery.tokenforgot
}
console.log(usertosend)
Mutations.mutations.setServerCode(rescodes.CALLING)
return await Api.SendReq(call, state.lang, Getters.getters.tok, 'POST', usertosend)
.then(({ res, body }) => {
return { code: body.code, msg: body.msg }
})
.catch((error) => {
UserStore.mutations.setErrorCatch(error)
return UserStore.getters.getServerCode
})
}
async function requestpwd(context, paramquery: IUserState) {
let call = process.env.MONGODB_HOST + '/requestnewpwd'
console.log('CALL ' + call)
let usertosend = {
keyappid: process.env.PAO_APP_ID,
idapp: process.env.APP_ID,
email: paramquery.email
}
console.log(usertosend)
Mutations.mutations.setServerCode(rescodes.CALLING)
return await Api.SendReq(call, state.lang, Getters.getters.tok, 'POST', usertosend)
.then(({ res, body }) => {
return { code: body.code, msg: body.msg }
}).catch((error) => {
UserStore.mutations.setErrorCatch(error)
return UserStore.getters.getServerCode
})
}
async function vreg(context, paramquery: ILinkReg) {
let call = process.env.MONGODB_HOST + '/vreg'
console.log('CALL ' + call)
let usertosend = {
keyappid: process.env.PAO_APP_ID,
idapp: process.env.APP_ID,
idlink: paramquery.idlink
}
console.log(usertosend)
Mutations.mutations.setServerCode(rescodes.CALLING)
return await Api.SendReq(call, state.lang, Getters.getters.tok, 'POST', usertosend)
.then(({ res, body }) => {
// console.log("RITORNO 2 ");
2018-11-15 19:48:37 +01:00
// mutations.setServerCode(myres);
if (body.code === serv_constants.RIS_CODE_EMAIL_VERIFIED) {
console.log('VERIFICATO !!')
localStorage.setItem(rescodes.localStorage.verifiedEmail, '1')
} else {
console.log('Risultato di vreg: ', body.code)
}
return { code: body.code, msg: body.msg }
}).catch((error) => {
UserStore.mutations.setErrorCatch(error)
return UserStore.getters.getServerCode
})
}
async function signup(context, authData: ISignupOptions) {
let call = process.env.MONGODB_HOST + '/users'
console.log('CALL ' + call)
// console.log("PASSW: " + authData.password);
2018-11-15 19:48:37 +01:00
let mylang = state.lang
console.log('MYLANG: ' + mylang)
return bcrypt.hash(authData.password, bcrypt.genSaltSync(12))
.then((hashedPassword: string) => {
let usertosend = {
keyappid: process.env.PAO_APP_ID,
lang: mylang,
email: authData.email,
password: String(hashedPassword),
username: authData.username,
idapp: process.env.APP_ID
}
console.log(usertosend)
let myres: IResult
Mutations.mutations.setServerCode(rescodes.CALLING)
let x_auth_token: string = ''
2018-11-15 19:48:37 +01:00
return Api.SendReq(call, state.lang, Getters.getters.tok, 'POST', usertosend)
.then(({ res, newuser }) => {
myres = res
2018-11-15 19:48:37 +01:00
Mutations.mutations.setServerCode(myres.status)
if (myres.status === 200) {
let userId = newuser.userId
let username = authData.username
if (process.env.DEV) {
console.log('USERNAME = ' + username)
console.log('IDUSER= ' + userId)
}
2018-11-15 19:48:37 +01:00
Mutations.mutations.authUser({
userId: userId,
username: username,
idToken: x_auth_token,
verified_email: false
})
const now = new Date()
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
const expirationDate = new Date(now.getTime() * 1000)
localStorage.setItem(rescodes.localStorage.userId, userId)
localStorage.setItem(rescodes.localStorage.username, username)
localStorage.setItem(rescodes.localStorage.token, x_auth_token)
localStorage.setItem(rescodes.localStorage.expirationDate, expirationDate.toString())
localStorage.setItem(rescodes.localStorage.verifiedEmail, '0')
state.isLogged = true
// dispatch('storeUser', authData);
// dispatch('setLogoutTimer', myres.data.expiresIn);
return rescodes.OK
} else {
return rescodes.ERR_GENERICO
}
})
.catch((error) => {
UserStore.mutations.setErrorCatch(error)
return UserStore.getters.getServerCode
})
})
}
async function signin(context, authData: ISigninOptions) {
let call = process.env.MONGODB_HOST + '/users/login'
console.log('LOGIN ' + call)
2018-11-15 19:48:37 +01:00
console.log('MYLANG = ' + state.lang)
const usertosend = {
username: authData.username,
password: authData.password,
idapp: process.env.APP_ID,
keyappid: process.env.PAO_APP_ID,
2018-11-15 19:48:37 +01:00
lang: state.lang
}
console.log(usertosend)
let myres: IResult
Mutations.mutations.setServerCode(rescodes.CALLING)
return await Api.SendReq(call, state.lang, Getters.getters.tok, 'POST', usertosend)
.then(({ res, body }) => {
myres = res
if (res.code === serv_constants.RIS_CODE_LOGIN_ERR) {
2018-11-15 19:48:37 +01:00
Mutations.mutations.setServerCode(body.code)
return body.code
}
2018-11-15 19:48:37 +01:00
Mutations.mutations.setServerCode(myres.status)
if (myres.status === 200) {
let myuser: IUserState = body.usertosend
let userId = myuser.userId
let username = authData.username
let verifiedEmail = myuser.verified_email === true
if (process.env.DEV) {
console.log('USERNAME = ' + username)
console.log('IDUSER= ' + userId)
2018-11-15 19:48:37 +01:00
Mutations.mutations.authUser({
userId: userId,
username: username,
idToken: state.x_auth_token,
verified_email: verifiedEmail
})
}
const now = new Date()
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
const expirationDate = new Date(now.getTime() * 1000)
localStorage.setItem(rescodes.localStorage.userId, userId)
localStorage.setItem(rescodes.localStorage.username, username)
localStorage.setItem(rescodes.localStorage.token, state.x_auth_token)
localStorage.setItem(rescodes.localStorage.expirationDate, expirationDate.toString())
localStorage.setItem(rescodes.localStorage.isLogged, String(true))
localStorage.setItem(rescodes.localStorage.verifiedEmail, Number(verifiedEmail).toString())
setGlobal()
// dispatch('storeUser', authData);
// dispatch('setLogoutTimer', myres.data.expiresIn);
return rescodes.OK
} else if (myres.status === 404) {
if (process.env.DEV) {
console.log('CODE = ' + body.code)
}
return body.code
} else {
if (process.env.DEV) {
console.log('CODE = ' + body.code)
}
return body.code
}
})
.catch((error) => {
UserStore.mutations.setErrorCatch(error)
return UserStore.getters.getServerCode
})
}
async function logout(context) {
let call = process.env.MONGODB_HOST + '/users/me/token'
console.log('CALL ' + call)
let usertosend = {
keyappid: process.env.PAO_APP_ID,
idapp: process.env.APP_ID
}
console.log(usertosend)
return await Api.SendReq(call, state.lang, Getters.getters.tok, 'DELETE', usertosend)
.then(({ res, body }) => {
console.log(res)
}).then(() => {
Mutations.mutations.clearAuthData()
}).catch((error) => {
UserStore.mutations.setErrorCatch(error)
return UserStore.getters.getServerCode
})
localStorage.removeItem(rescodes.localStorage.expirationDate)
localStorage.removeItem(rescodes.localStorage.token)
localStorage.removeItem(rescodes.localStorage.userId)
localStorage.removeItem(rescodes.localStorage.username)
localStorage.removeItem(rescodes.localStorage.isLogged)
// localStorage.removeItem(rescodes.localStorage.leftDrawerOpen)
localStorage.removeItem(rescodes.localStorage.verifiedEmail)
localStorage.removeItem(rescodes.localStorage.categorySel)
2018-11-15 19:48:37 +01:00
router.push('/signin')
}
function setGlobal() {
state.isLogged = true
GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem(rescodes.localStorage.leftDrawerOpen) === 'true')
GlobalStore.mutations.setCategorySel(localStorage.getItem(rescodes.localStorage.categorySel))
GlobalStore.actions.loadAfterLogin()
Todos.actions.dbLoadTodo(true)
}
async function autologin(context) {
try {
console.log('*** Autologin ***')
// INIT
UserStore.mutations.setlang(process.env.LANG_DEFAULT)
// ++Todo: Estrai la Lang dal Localstorage
const lang = localStorage.getItem('lang')
if (lang) {
UserStore.mutations.setlang(lang)
}
const token = localStorage.getItem(rescodes.localStorage.token)
if (!token) {
return false
}
const expirationDateStr = localStorage.getItem(rescodes.localStorage.expirationDate)
let expirationDate = new Date(String(expirationDateStr))
const now = new Date()
if (now >= expirationDate) {
console.log('!!! Login Expired')
return false
}
const userId = String(localStorage.getItem(rescodes.localStorage.userId))
const username = String(localStorage.getItem(rescodes.localStorage.username))
const verifiedEmail = localStorage.getItem(rescodes.localStorage.verifiedEmail) === '1'
console.log('autologin userId', userId)
Mutations.mutations.authUser({
userId: userId,
username: username,
idToken: token,
verified_email: verifiedEmail
})
setGlobal()
console.log('autologin userId STATE ', state.userId)
return true
} catch (e) {
console.error('ERR autologin ', e.message)
return false
}
}
2018-11-15 19:48:37 +01:00
export const actions = {
resetpwd: b.dispatch(resetpwd),
requestpwd: b.dispatch(requestpwd),
vreg: b.dispatch(vreg),
signup: b.dispatch(signup),
signin: b.dispatch(signin),
logout: b.dispatch(logout),
autologin: b.dispatch(autologin)
2018-11-15 19:48:37 +01:00
}
}
// Module
const UserModule = {
get state() {
return stateGetter()
},
getters: Getters.getters,
mutations: Mutations.mutations,
actions: Actions.actions
}
2018-11-15 19:48:37 +01:00
export default UserModule