WIP - more work on sign in feature
This commit is contained in:
		| @@ -12,7 +12,7 @@ import WiFiConfiguration from './containers/WiFiConfiguration'; | ||||
| import NTPConfiguration from './containers/NTPConfiguration'; | ||||
| import OTAConfiguration from './containers/OTAConfiguration'; | ||||
| import APConfiguration from './containers/APConfiguration'; | ||||
| import LoginPage from './containers/LoginPage'; | ||||
| import SignInPage from './containers/SignInPage'; | ||||
|  | ||||
| class AppRouting extends Component { | ||||
|  | ||||
| @@ -24,7 +24,7 @@ class AppRouting extends Component { | ||||
|     return ( | ||||
|       <AuthenticationWrapper> | ||||
|         <Switch> | ||||
|           <Route exact path="/" component={LoginPage} /> | ||||
|           <Route exact path="/" component={SignInPage} /> | ||||
|           <AuthenticatedRoute exact path="/wifi-configuration" component={WiFiConfiguration} /> | ||||
|           <AuthenticatedRoute exact path="/ap-configuration" component={APConfiguration} /> | ||||
|           <AuthenticatedRoute exact path="/ntp-configuration" component={NTPConfiguration} /> | ||||
|   | ||||
| @@ -98,7 +98,7 @@ class MenuAppBar extends React.Component { | ||||
|     const drawer = ( | ||||
|       <div> | ||||
|         <Toolbar> | ||||
|             <Typography variant="title" color="primary"> | ||||
|             <Typography variant="h6" color="primary"> | ||||
|               {APP_NAME} | ||||
|             </Typography> | ||||
|           <Divider absolute /> | ||||
| @@ -146,7 +146,7 @@ class MenuAppBar extends React.Component { | ||||
|               > | ||||
|                 <MenuIcon /> | ||||
|               </IconButton> | ||||
|               <Typography variant="title" color="inherit" noWrap> | ||||
|               <Typography variant="h6" color="inherit" noWrap> | ||||
|                 {sectionTitle} | ||||
|               </Typography> | ||||
|             </Toolbar> | ||||
|   | ||||
| @@ -9,3 +9,4 @@ export const LIST_NETWORKS_ENDPOINT = ENDPOINT_ROOT + "listNetworks"; | ||||
| export const WIFI_SETTINGS_ENDPOINT = ENDPOINT_ROOT + "wifiSettings"; | ||||
| export const WIFI_STATUS_ENDPOINT = ENDPOINT_ROOT + "wifiStatus"; | ||||
| export const OTA_SETTINGS_ENDPOINT = ENDPOINT_ROOT + "otaSettings"; | ||||
| export const SIGN_IN_ENDPOINT = ENDPOINT_ROOT + "signIn"; | ||||
| @@ -7,6 +7,9 @@ import Typography from '@material-ui/core/Typography'; | ||||
| import Fab from '@material-ui/core/Fab'; | ||||
| import { APP_NAME } from '../constants/App'; | ||||
| import ForwardIcon from '@material-ui/icons/Forward'; | ||||
| import { withNotifier } from '../components/SnackbarNotification'; | ||||
| import { SIGN_IN_ENDPOINT } from '../constants/Endpoints'; | ||||
| import { withAuthenticationContext } from '../authentication/Context'; | ||||
| 
 | ||||
| const styles = theme => ({ | ||||
|   loginPage: { | ||||
| @@ -20,7 +23,7 @@ const styles = theme => ({ | ||||
|     paddingTop: "200px", | ||||
|     backgroundImage: 'url("/app/icon.png")', | ||||
|     backgroundRepeat: "no-repeat", | ||||
|     backgroundPosition: "50% "+ theme.spacing.unit * 2 +"px", | ||||
|     backgroundPosition: "50% " + theme.spacing.unit * 2 + "px", | ||||
|     backgroundSize: "auto 150px", | ||||
|     textAlign: "center" | ||||
|   }, | ||||
| @@ -49,7 +52,8 @@ class LoginPage extends Component { | ||||
|     super(props); | ||||
|     this.state = { | ||||
|       username: '', | ||||
|       password: '' | ||||
|       password: '', | ||||
|       fetched: false | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
| @@ -57,8 +61,32 @@ class LoginPage extends Component { | ||||
|     this.setState({ [name]: event.target.value }); | ||||
|   }; | ||||
| 
 | ||||
|   onSubmit = event => { | ||||
|     // TODO
 | ||||
|   onSubmit = () => { | ||||
|     const { username, password } = this.state; | ||||
|     const { authenticationContext } = this.props; | ||||
|     this.setState({ fetched: false }); | ||||
|     fetch(SIGN_IN_ENDPOINT, { | ||||
|       method: 'POST', | ||||
|       body: JSON.stringify({ username, password }), | ||||
|       headers: new Headers({ | ||||
|         'Content-Type': 'application/json' | ||||
|       }) | ||||
|     }) | ||||
|       .then(response => { | ||||
|         if (response.status === 200) { | ||||
|           return response.json(); | ||||
|         } else if (response.status === 401) { | ||||
|           throw Error("Login details invalid!"); | ||||
|         } else { | ||||
|           throw Error("Invalid status code: " + response.status); | ||||
|         } | ||||
|       }).then(json =>{ | ||||
|         authenticationContext.signIn(json.access_token); | ||||
|       }) | ||||
|       .catch(error => { | ||||
|         this.props.raiseNotification(error.message); | ||||
|         this.setState({ fetched: true }); | ||||
|       }); | ||||
|   }; | ||||
| 
 | ||||
|   render() { | ||||
| @@ -91,7 +119,7 @@ class LoginPage extends Component { | ||||
|             /> | ||||
|             <Fab variant="extended" color="primary" className={classes.button} type="submit"> | ||||
|               <ForwardIcon className={classes.extendedIcon} /> | ||||
|               Login | ||||
|               Sign In | ||||
|             </Fab> | ||||
|           </ValidatorForm> | ||||
|         </Paper> | ||||
| @@ -101,4 +129,4 @@ class LoginPage extends Component { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export default withStyles(styles)(LoginPage); | ||||
| export default withAuthenticationContext(withNotifier(withStyles(styles)(LoginPage))); | ||||
		Reference in New Issue
	
	Block a user