0.0.15 • Published 8 years ago

redux-security v0.0.15

Weekly downloads
18
License
MIT
Repository
github
Last release
8 years ago

redux-security

Redux security subsystem with user, group and access management

NPM version Discord

alt tag

INSTALL

Stable

npm i -S redux-security

Development

npm i -S lokhmakov/redux-security

FEATURES

  • Service architecture (redux-manager powered)
  • Journaling (redux-journal powered)
  • Persist state (PouchDB powered)
  • Dynamic service configuration (state.config):
    • docsMax = 2 - maximum docs in state.docs
    • docsMaxOverRemove: true - remove old images over docsMax
  • User management
  • Session management
  • Auth
    • signup
    • login
    • logout
    • email confirmation
  • API
    • local
    • express
    • pouch
    • socket (SocketIO)

EXAMPLES

USERS: NODE-API

require('redux-journal').enable()

const tags = 'redux-security.examples.users.node-api'

import { write, error }   from 'redux-journal'
import { manager }        from 'redux-manager'
import { usersLocal }     from 'redux-security'

const api = usersLocal()

manager.enableLogger(require('redux-node-logger')())
manager.getStore()

api.create({ username: 'user1', password: 'password1' }).then(({ userID }) => {
  write(`USER _id = ${userID} CREATED`, `${tags}.api.create`)
  return api.update({ _id: userID, username: 'user2' }).then((result) => {
    write(`SUCCESS result = ${result}`, `${tags}.api.update`)
    return api.remove({ _id: userID })
  })
}).then((result) => {
  write(`SUCCESS result = ${result}`, `${tags}.api.remove`)
}).catch((e) => {
  error(e)
})

AUTH: NODE-API

require('redux-journal').enable()

const tags = 'redux-security.examples.auth.node-api'

import { write, error }     from 'redux-journal'
import { manager }          from 'redux-manager'

const serviceAuth     = 'auth'
const serviceSessions = 'sessions'
const serviceUsers    = 'users'

import { sessionsLocal }    from 'redux-security'

const apiSessions = sessionsLocal({ serviceName: serviceSessions })

import { usersLocal }       from 'redux-security'

const apiUsers = usersLocal({ serviceName: serviceUsers })

import { authLocal }        from 'redux-security'

const apiAuth = authLocal({ serviceName: serviceAuth, serviceSessions, serviceUsers })

manager.enableLogger(require('redux-node-logger')())
manager.getStore()

const username = 'root'
const password = 'toor'

apiUsers.create({ username, password }).then(() => {
  return apiAuth.login({ username, password})
}).then((result) => {
  write(`({ username = '${username}', password = '${password}'}) SUCCESS`, `${tags}.login`)
}).catch((e) => {
  error(e)
})

AUTH: NODE-REDUX

require('redux-journal').enable()

const tags = 'redux-security.examples.auth.node-redux'

import { write, error }     from 'redux-journal'
import { manager }          from 'redux-manager'

const serviceAuth     = 'auth'
const serviceSessions = 'sessions'
const serviceUsers    = 'users'

import { sessionsLocal }    from 'redux-security'

const apiSessions = sessionsLocal({ serviceName: serviceSessions })

import { usersLocal }       from 'redux-security'

const apiUsers = usersLocal({ serviceName: serviceUsers })

import { authLocal }        from 'redux-security'
import { authActions }      from 'redux-security'

const apiAuth = authLocal({ serviceName: serviceAuth, serviceSessions, serviceUsers })

manager.enableLogger(require('redux-node-logger')())
manager.getStore()

const username = 'root'
const password = 'toor'

apiUsers.create({ username, password }).then(() => {
  manager.dispatch(authActions.login({ username, password }), serviceAuth)
}).catch((e) => {
  error(e)
})

AUTH: NODE-SOCKET

server.js

require('redux-journal').enable()

const tags = 'redux-security.examples.auth.node-socket.server'

import { write, error }     from 'redux-journal'
import { manager }          from 'redux-manager'

const serviceAuth     = 'auth'
const serviceSessions = 'sessions'
const serviceUsers    = 'users'

import { sessionsLocal }    from 'redux-security'

sessionsLocal({ serviceName: serviceSessions })

import { usersLocal }       from 'redux-security'

const apiUsers = usersLocal({ serviceName: serviceUsers })

import { authLocal }        from 'redux-security'
import { authActions }      from 'redux-security'

authLocal({ serviceName: serviceAuth, serviceSessions, serviceUsers })

manager.enableLogger(require('redux-node-logger')())
manager.getStore()

const username = 'root'
const password = 'toor'

apiUsers.create({ username, password })

import Express              from 'express'
import { Server }           from 'http'
import SocketIO             from 'socket.io'

const PORT = 3000
const app = new Express()
const server = Server(app)
const io = SocketIO(server)

server.listen(PORT, (e) => {
  if (e) return error(e)
  write(`==> 🌎  0.0.0.0:${ PORT }`)
})

import { authConfigAPISocketServer } from 'redux-security'

authConfigAPISocketServer({ io })

client.js

require('redux-journal').enable()

const tags = 'redux-security.examples.auth.node-socket'

import { write, error }     from 'redux-journal'
import { manager }          from 'redux-manager'

const serviceAuth     = 'auth'
const serverServiceName = 'auth'

import { authSocket }        from 'redux-security'
import { authActions }      from 'redux-security'

const socket = require('socket.io-client')('http://localhost:3000')
authSocket({ serviceName: serviceAuth, serverServiceName, socket })

manager.enableLogger(require('redux-node-logger')())
manager.getStore()

const username = 'root'
const password = 'toor'

manager.dispatch(authActions.login({ username, password }), serviceAuth)

REACT

server.js

require('redux-journal').enable()

import { error, write }     from 'redux-journal'

import webpack              from 'webpack'
import webpackDevMiddleware from 'webpack-dev-middleware'
import webpackHotMiddleware from 'webpack-hot-middleware'
import webpackConfig        from '../webpack.config'

const PORT = 3000
const app = require('express')()
const server = require('http').Server(app)
const io = require('socket.io')(server)

const compiler = webpack(webpackConfig)
app.use(webpackDevMiddleware(compiler, { noInfo: false, publicPath: webpackConfig.output.publicPath }))
app.use(webpackHotMiddleware(compiler))

app.use((req, res) => { res.sendFile(__dirname + '/static/index.html') })

server.listen(PORT, (e) => {
  if (e) return error(e)
  write(`==> 🌎  0.0.0.0:${ PORT }`)
})

const tags = 'redux-security.examples.auth.react.server'

import { manager }          from 'redux-manager'

const serviceAuth     = 'auth'
const serviceSessions = 'sessions'
const serviceUsers    = 'users'

import { sessionsLocal }    from 'redux-security'

sessionsLocal({ serviceName: serviceSessions })

import { usersLocal }       from 'redux-security'

const apiUsers = usersLocal({ serviceName: serviceUsers })

import { authLocal }        from 'redux-security'
import { authActions }      from 'redux-security'

authLocal({ serviceName: serviceAuth, serviceSessions, serviceUsers })

manager.enableLogger(require('redux-node-logger')())
manager.getStore()

const username = 'root'
const password = 'toor'

apiUsers.create({ username, password })

import { authConfigAPISocketServer } from 'redux-security'

authConfigAPISocketServer({ io })

client.js

require('redux-journal').enable()

import injectTapEventPlugin from 'react-tap-event-plugin'

injectTapEventPlugin()

import { manager }          from 'redux-manager'
import { authSocket }       from 'redux-security'

const serviceAuth = 'auth'

const socket = require('socket.io-client')('http://localhost:3000')
authSocket({ serviceName: serviceAuth, socket })

manager.enableLogger(require('redux-logger')())
const store = manager.getStore()

import React                from 'react'
import ReactDOM             from 'react-dom'
import { Provider }         from 'react-redux'
import { connect }          from 'react-redux'

import MuiThemeProvider     from 'material-ui/styles/MuiThemeProvider'
import getMuiTheme          from 'material-ui/styles/getMuiTheme'
import AppBar               from 'material-ui/AppBar'

import { AuthAvatar }       from 'redux-security'
import { AuthFormTabs }     from 'redux-security'

const AuthAvatar1         = connect(state => ({ auth: state[serviceAuth] }))(AuthAvatar)
const AuthFormTabs1       = connect(state => ({ auth: state[serviceAuth] }))(AuthFormTabs)

const muiTheme = getMuiTheme({ palette: { accent1Color: require('material-ui/styles/colors').deepOrange500 }})

const render = () => ReactDOM.render(
  <Provider store={ store }>
    <MuiThemeProvider muiTheme={ muiTheme }>
      <div>
        <AppBar
          title='redux-security'
          iconElementLeft={ <div/> }
          iconElementRight={ <AuthAvatar1/> }
        />
        <AuthFormTabs1/>
      </div>
    </MuiThemeProvider>
  </Provider>,
  document.getElementById('app')
)

render()
0.0.15

8 years ago

0.0.14

8 years ago

0.0.13

8 years ago

0.0.12

8 years ago

0.0.11

8 years ago

0.0.10

8 years ago

0.0.9

8 years ago

0.0.8

8 years ago

0.0.7

8 years ago

0.0.6

8 years ago

0.0.5

8 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago