aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/ducks
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-06-17 22:11:16 -0700
committerGitHub <noreply@github.com>2016-06-17 22:11:16 -0700
commit23b976a999f41439e83c1010474ec9dc680b8486 (patch)
treee6e6d5ac969710292833662d5f1f85e1caed86ab /web/src/js/ducks
parent9c6199db9be34fad18eaedb86463333671ae190a (diff)
parentf203936fbf51b04f424666f9d2dd63bce8c84404 (diff)
downloadmitmproxy-23b976a999f41439e83c1010474ec9dc680b8486.tar.gz
mitmproxy-23b976a999f41439e83c1010474ec9dc680b8486.tar.bz2
mitmproxy-23b976a999f41439e83c1010474ec9dc680b8486.zip
Merge pull request #1270 from mitmproxy/settings
[web] Settings Ducks 2
Diffstat (limited to 'web/src/js/ducks')
-rw-r--r--web/src/js/ducks/index.js2
-rw-r--r--web/src/js/ducks/settings.js77
2 files changed, 79 insertions, 0 deletions
diff --git a/web/src/js/ducks/index.js b/web/src/js/ducks/index.js
index fee4d792..ffde1a64 100644
--- a/web/src/js/ducks/index.js
+++ b/web/src/js/ducks/index.js
@@ -2,12 +2,14 @@ import {combineReducers} from 'redux'
import eventLog from './eventLog'
import websocket from './websocket'
import flows from './flows'
+import settings from './settings'
import ui from './ui'
const rootReducer = combineReducers({
eventLog,
websocket,
flows,
+ settings,
ui
})
diff --git a/web/src/js/ducks/settings.js b/web/src/js/ducks/settings.js
new file mode 100644
index 00000000..73c62120
--- /dev/null
+++ b/web/src/js/ducks/settings.js
@@ -0,0 +1,77 @@
+import {fetchApi} from "../utils";
+
+export const REQUEST_SETTINGS = "REQUEST_SETTINGS"
+export const RECEIVE_SETTINGS = "RECEIVE_SETTINGS"
+export const UPDATE_SETTINGS = "UPDATE_SETTINGS"
+
+const defaultState = {
+ settings: {},
+ isFetching: false,
+ actionsDuringFetch: [],
+}
+
+export default function reducer(state = defaultState, action) {
+ switch (action.type) {
+
+ case REQUEST_SETTINGS:
+ return {
+ ...state,
+ isFetching: true
+ }
+
+ case RECEIVE_SETTINGS:
+ let s = {
+ settings: action.settings,
+ isFetching: false,
+ actionsDuringFetch: [],
+ }
+ for (action of state.actionsDuringFetch) {
+ s = reducer(s, action)
+ }
+ return s
+
+ case UPDATE_SETTINGS:
+ if (state.isFetching) {
+ return {
+ ...state,
+ actionsDuringFetch: [...state.actionsDuringFetch, action]
+ }
+ }
+ return {
+ ...state,
+ settings: {...state.settings, ...action.settings}
+ }
+
+ default:
+ return state
+ }
+}
+
+export function updateSettings(event) {
+ /* This action creator takes all WebSocket events */
+ if (event.cmd === "update") {
+ return {
+ type: UPDATE_SETTINGS,
+ settings: event.data
+ }
+ }
+ console.error("unknown settings update", event)
+}
+
+export function fetchSettings() {
+ return dispatch => {
+ dispatch({type: REQUEST_SETTINGS})
+
+ return fetchApi("/settings")
+ .then(response => response.json())
+ .then(json =>
+ dispatch({type: RECEIVE_SETTINGS, settings: json.data})
+ )
+ // TODO: Error handling
+ }
+}
+
+export function setInterceptPattern(intercept) {
+ return dispatch =>
+ fetchApi.put("/settings", {intercept})
+}