add security to all admin endpoints
This commit is contained in:
		| @@ -47,7 +47,7 @@ export function redirectingAuthorizedFetch(url, params) { | ||||
|   return new Promise(function (resolve, reject) { | ||||
|     authorizedFetch(url, params).then(response => { | ||||
|       if (response.status === 401) { | ||||
|         history.go("/");         | ||||
|         history.push("/");         | ||||
|       } else { | ||||
|         resolve(response); | ||||
|       } | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import React from 'react'; | ||||
| import {withNotifier} from '../components/SnackbarNotification'; | ||||
|  | ||||
| import { withNotifier } from '../components/SnackbarNotification'; | ||||
| import { redirectingAuthorizedFetch } from '../authentication/Authentication'; | ||||
| /* | ||||
| * It is unlikely this application will grow complex enough to require redux. | ||||
| * | ||||
| @@ -16,11 +16,11 @@ export const restComponent = (endpointUrl, FormComponent) => { | ||||
|       constructor(props) { | ||||
|         super(props); | ||||
|  | ||||
|         this.state={ | ||||
|                  data:null, | ||||
|                  fetched: false, | ||||
|                  errorMessage:null | ||||
|                }; | ||||
|         this.state = { | ||||
|           data: null, | ||||
|           fetched: false, | ||||
|           errorMessage: null | ||||
|         }; | ||||
|  | ||||
|         this.setState = this.setState.bind(this); | ||||
|         this.loadData = this.loadData.bind(this); | ||||
| @@ -30,78 +30,78 @@ export const restComponent = (endpointUrl, FormComponent) => { | ||||
|  | ||||
|       setData(data) { | ||||
|         this.setState({ | ||||
|                  data:data, | ||||
|                  fetched: true, | ||||
|                  errorMessage:null | ||||
|                }); | ||||
|           data: data, | ||||
|           fetched: true, | ||||
|           errorMessage: null | ||||
|         }); | ||||
|       } | ||||
|  | ||||
|       loadData() { | ||||
|         this.setState({ | ||||
|                  data:null, | ||||
|                  fetched: false, | ||||
|                  errorMessage:null | ||||
|                }); | ||||
|         fetch(endpointUrl) | ||||
|           data: null, | ||||
|           fetched: false, | ||||
|           errorMessage: null | ||||
|         }); | ||||
|         redirectingAuthorizedFetch(endpointUrl) | ||||
|           .then(response => { | ||||
|             if (response.status === 200) { | ||||
|               return response.json(); | ||||
|             } | ||||
|             throw Error("Invalid status code: " + response.status); | ||||
|           }) | ||||
|           .then(json => {this.setState({data: json, fetched:true})}) | ||||
|           .catch(error =>{ | ||||
|           .then(json => { this.setState({ data: json, fetched: true }) }) | ||||
|           .catch(error => { | ||||
|             this.props.raiseNotification("Problem fetching: " + error.message); | ||||
|             this.setState({data: null, fetched:true, errorMessage:error.message}); | ||||
|             this.setState({ data: null, fetched: true, errorMessage: error.message }); | ||||
|           }); | ||||
|       } | ||||
|  | ||||
|       saveData(e) { | ||||
|         this.setState({fetched: false}); | ||||
|         fetch(endpointUrl, { | ||||
|         this.setState({ fetched: false }); | ||||
|         redirectingAuthorizedFetch(endpointUrl, { | ||||
|           method: 'POST', | ||||
|           body: JSON.stringify(this.state.data), | ||||
|           headers: new Headers({ | ||||
|             'Content-Type': 'application/json' | ||||
|           }) | ||||
|         }) | ||||
|         .then(response => { | ||||
|           if (response.status === 200) { | ||||
|             return response.json(); | ||||
|           } | ||||
|           throw Error("Invalid status code: " + response.status); | ||||
|         }) | ||||
|         .then(json => { | ||||
|           this.props.raiseNotification("Changes successfully applied."); | ||||
|           this.setState({data: json, fetched:true}); | ||||
|         }).catch(error => { | ||||
|           this.props.raiseNotification("Problem saving: " + error.message); | ||||
|           this.setState({data: null, fetched:true, errorMessage:error.message}); | ||||
|         }); | ||||
|           .then(response => { | ||||
|             if (response.status === 200) { | ||||
|               return response.json(); | ||||
|             } | ||||
|             throw Error("Invalid status code: " + response.status); | ||||
|           }) | ||||
|           .then(json => { | ||||
|             this.props.raiseNotification("Changes successfully applied."); | ||||
|             this.setState({ data: json, fetched: true }); | ||||
|           }).catch(error => { | ||||
|             this.props.raiseNotification("Problem saving: " + error.message); | ||||
|             this.setState({ data: null, fetched: true, errorMessage: error.message }); | ||||
|           }); | ||||
|       } | ||||
|  | ||||
|       handleValueChange = name => event => { | ||||
|         const { data } = this.state; | ||||
|         data[name] = event.target.value; | ||||
|         this.setState({data}); | ||||
|         this.setState({ data }); | ||||
|       }; | ||||
|  | ||||
|       handleCheckboxChange = name => event => { | ||||
|         const { data } = this.state; | ||||
|         data[name] = event.target.checked; | ||||
|         this.setState({data}); | ||||
|         this.setState({ data }); | ||||
|       } | ||||
|  | ||||
|       render() { | ||||
|         return <FormComponent | ||||
|                   handleValueChange={this.handleValueChange} | ||||
|                   handleCheckboxChange={this.handleCheckboxChange} | ||||
|                   setData={this.setData} | ||||
|                   saveData={this.saveData} | ||||
|                   loadData={this.loadData} | ||||
|                   {...this.state} | ||||
|                   {...this.props} | ||||
|                 />; | ||||
|           handleValueChange={this.handleValueChange} | ||||
|           handleCheckboxChange={this.handleCheckboxChange} | ||||
|           setData={this.setData} | ||||
|           saveData={this.saveData} | ||||
|           loadData={this.loadData} | ||||
|           {...this.state} | ||||
|           {...this.props} | ||||
|         />; | ||||
|       } | ||||
|  | ||||
|     } | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import { SCAN_NETWORKS_ENDPOINT, LIST_NETWORKS_ENDPOINT }  from  '../constants/E | ||||
| import SectionContent from '../components/SectionContent'; | ||||
| import WiFiNetworkSelector from '../forms/WiFiNetworkSelector'; | ||||
| import {withNotifier} from '../components/SnackbarNotification'; | ||||
| import { redirectingAuthorizedFetch } from '../authentication/Authentication'; | ||||
|  | ||||
| const NUM_POLLS = 10 | ||||
| const POLLING_FREQUENCY = 500 | ||||
| @@ -38,7 +39,7 @@ class WiFiNetworkScanner extends Component { | ||||
|   scanNetworks() { | ||||
|     this.pollCount = 0; | ||||
|     this.setState({scanningForNetworks:true, networkList: null, errorMessage:null}); | ||||
|     fetch(SCAN_NETWORKS_ENDPOINT).then(response => { | ||||
|     redirectingAuthorizedFetch(SCAN_NETWORKS_ENDPOINT).then(response => { | ||||
|       if (response.status === 202) { | ||||
|         this.schedulePollTimeout(); | ||||
|         return; | ||||
| @@ -70,7 +71,7 @@ class WiFiNetworkScanner extends Component { | ||||
|   } | ||||
|  | ||||
|   pollNetworkList() { | ||||
|     fetch(LIST_NETWORKS_ENDPOINT) | ||||
|     redirectingAuthorizedFetch(LIST_NETWORKS_ENDPOINT) | ||||
|     .then(response => { | ||||
|       if (response.status === 200) { | ||||
|         return response.json(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user