summaryrefslogtreecommitdiff
path: root/app/client/auth/auth.gate.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/client/auth/auth.gate.js')
-rw-r--r--app/client/auth/auth.gate.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/app/client/auth/auth.gate.js b/app/client/auth/auth.gate.js
new file mode 100644
index 0000000..087dfc6
--- /dev/null
+++ b/app/client/auth/auth.gate.js
@@ -0,0 +1,63 @@
+import { h, Component } from 'preact';
+// import PropTypes from 'prop-types';
+import { BrowserRouter, Route, Switch, Redirect, withRouter } from 'react-router-dom'
+import { bindActionCreators } from 'redux';
+import { connect } from 'react-redux';
+
+import * as authActions from './auth.actions';
+
+import Login from './login.component';
+import Logout from './logout.component';
+import Signup from './signup.component';
+
+import { randint } from '../util/math'
+
+class AuthRouter extends Component {
+ render(){
+ return (
+ <BrowserRouter>
+ <div>
+ <div className="diamond"></div>
+ <Switch>
+ <Route exact path='/' component={Login} />
+ <Route exact path='/login' component={Login} />
+ <Route exact path='/logout' component={Logout} />
+ <Route exact path='/signup' component={Signup} />
+ <Route component={props => {
+ this.props.actions.setReturnTo(props.location.pathname)
+ return (
+ <Redirect to="/login" />
+ )
+ }} />
+ </Switch>
+ </div>
+ </BrowserRouter>
+ )
+ }
+ componentDidMount(){
+ document.querySelector('.diamond').style.backgroundImage = 'linear-gradient(' + (randint(40)-5) + 'deg, #fde, #ffe)'
+ }
+}
+
+class AuthGate extends Component {
+ render(){
+ if (!this.props.auth.initialized) {
+ return <div className='loading'>Loading</div>
+ }
+ if (this.props.auth.isAuthenticated) return <div>{this.props.children}</div>
+ return <AuthRouter {...this.props} />
+ }
+ componentDidMount(){
+ this.props.actions.checkin()
+ }
+}
+
+const mapStateToProps = (state) => ({
+ auth: state.auth
+});
+
+const mapDispatchToProps = (dispatch) => ({
+ actions: bindActionCreators(authActions, dispatch)
+});
+
+export default connect(mapStateToProps, mapDispatchToProps)(AuthGate);