redux-security
Version:
70 lines (60 loc) • 2.28 kB
JavaScript
import { error, write } from 'redux-journal'
import { manager } from 'redux-manager'
import { SERVICE, TAGS } from '../config'
import { configAPIPaths } from './api.paths'
const tags = `${TAGS}.api.socket.server`
export const configAPISocketServer = (
{ io, serviceName = SERVICE } =
{ serviceName: SERVICE }
) => {
const api = () => {
const API = manager.api.get(serviceName)
if (!API) {
const ERROR = `manager.api.get('${serviceName}') == undefined`
error(ERROR, `${tags}.api`)
throw new Error(ERROR)
}
return API
}
const paths = configAPIPaths(serviceName)
io.on('connection', (socket) => {
write(`socket.id = ${socket.id}`, `${tags}.connection`)
socket.on(paths.codeEmail, ({ sessionID }) => {
api().codeEmail({ sessionID }).then(() => {
socket.emit(paths.codeEmail, {})
}).catch((error) => {
socket.emit(paths.codeEmail, { error: error.message || error })
})
})
socket.on(paths.codeConfirm, ({ code }) => {
api().codeConfirm({ code }).then(() => {
socket.emit(paths.codeConfirm, {})
}).catch((error) => {
socket.emit(paths.codeConfirm, { error: error.message || error })
})
})
socket.on(paths.login, ({ username, password }) => {
write(`on(${paths.login}) receive ({ username = '${username}', password = '${password}' })`, `${tags}.login`)
api().login({ username, password }).then(({ sessionID }) => {
write(`on(${paths.login}) send ({ sessionID = '${sessionID}')`, `${tags}.login.emit`)
socket.emit(paths.login, { sessionID })
}).catch((error) => {
socket.emit(paths.login, { error: error.message || error })
})
})
socket.on(paths.logout, ({ sessionID }) => {
api().logout({ sessionID }).then(() => {
socket.emit(paths.logout, {})
}).catch((error) => {
socket.emit(paths.logout, { error: error.message || error })
})
})
socket.on(paths.signup, ({ username, password, email }) => {
api().signup({ username, password, email }).then(() => {
socket.emit(paths.signup, {})
}).catch((error) => {
socket.emit(paths.signup, { error: error.message || error })
})
})
})
}