From 2c4621429100a198ca0eacb9667e6844c16cb4fd Mon Sep 17 00:00:00 2001 From: Kanagaraj Mayilsamy Date: Wed, 5 Sep 2018 01:32:02 +0530 Subject: [PATCH] fix browser hang when listobjects is denied (#6385) When Deny ListObjects policy is set on bucket, the browser is hanging while trying to list the object. This is now fixed by showing appropriate error message and an empty object list. Fixes #6371 --- .../app/js/objects/__tests__/actions.test.js | 77 ++++++++++++++++--- browser/app/js/objects/actions.js | 16 +++- browser/app/js/objects/reducer.js | 7 ++ browser/ui-assets.go | 63 ++++++++------- 4 files changed, 126 insertions(+), 37 deletions(-) diff --git a/browser/app/js/objects/__tests__/actions.test.js b/browser/app/js/objects/__tests__/actions.test.js index eba5a65ab..fb48b1dbc 100644 --- a/browser/app/js/objects/__tests__/actions.test.js +++ b/browser/app/js/objects/__tests__/actions.test.js @@ -19,16 +19,27 @@ import thunk from "redux-thunk" import * as actionsObjects from "../actions" import * as alertActions from "../../alert/actions" import { minioBrowserPrefix } from "../../constants" +import history from "../../history" jest.mock("../../web", () => ({ - LoggedIn: jest.fn(() => true).mockReturnValueOnce(false), - ListObjects: jest.fn(() => { - return Promise.resolve({ - objects: [{ name: "test1" }, { name: "test2" }], - istruncated: false, - nextmarker: "test2", - writable: false - }) + LoggedIn: jest + .fn(() => true) + .mockReturnValueOnce(true) + .mockReturnValueOnce(false) + .mockReturnValueOnce(false), + ListObjects: jest.fn(({ bucketName }) => { + if (bucketName === "test-deny") { + return Promise.reject({ + message: "listobjects is denied" + }) + } else { + return Promise.resolve({ + objects: [{ name: "test1" }, { name: "test2" }], + istruncated: false, + nextmarker: "test2", + writable: false + }) + } }), RemoveObject: jest.fn(({ bucketName, objects }) => { if (!bucketName) { @@ -112,6 +123,9 @@ describe("Objects actions", () => { objects: { currentPrefix: "" } }) const expectedActions = [ + { + type: "alert/CLEAR" + }, { type: "objects/SET_LIST", objects: [{ name: "test1" }, { name: "test2" }], @@ -143,6 +157,9 @@ describe("Objects actions", () => { objects: { currentPrefix: "" } }) const expectedActions = [ + { + type: "alert/CLEAR" + }, { type: "objects/APPEND_LIST", objects: [{ name: "test1" }, { name: "test2" }], @@ -160,6 +177,43 @@ describe("Objects actions", () => { }) }) + it("creates objects/RESET_LIST after failing to fetch the objects from bucket with ListObjects denied for LoggedIn users", () => { + const store = mockStore({ + buckets: { currentBucket: "test-deny" }, + objects: { currentPrefix: "" } + }) + const expectedActions = [ + { + type: "alert/CLEAR" + }, + { + type: "alert/SET", + alert: { + type: "danger", + message: "listobjects is denied", + id: alertActions.alertId + } + }, + { + type: "object/RESET_LIST" + } + ] + return store.dispatch(actionsObjects.fetchObjects()).then(() => { + const actions = store.getActions() + expect(actions).toEqual(expectedActions) + }) + }) + + it("redirect to login after failing to fetch the objects from bucket for non-LoggedIn users", () => { + const store = mockStore({ + buckets: { currentBucket: "test-deny" }, + objects: { currentPrefix: "" } + }) + return store.dispatch(actionsObjects.fetchObjects()).then(() => { + expect(history.location.pathname.endsWith("/login")).toBeTruthy() + }) + }) + it("creates objects/SET_SORT_BY and objects/SET_SORT_ORDER when sortObjects is called", () => { const store = mockStore({ objects: { @@ -198,6 +252,7 @@ describe("Objects actions", () => { }) const expectedActions = [ { type: "objects/SET_CURRENT_PREFIX", prefix: "abc/" }, + { type: "alert/CLEAR" }, { type: "objects/CHECKED_LIST_RESET" } ] store.dispatch(actionsObjects.selectPrefix("abc/")) @@ -244,7 +299,11 @@ describe("Objects actions", () => { const expectedActions = [ { type: "alert/SET", - alert: { type: "danger", message: "Invalid bucket", id: 0 } + alert: { + type: "danger", + message: "Invalid bucket", + id: alertActions.alertId + } } ] return store.dispatch(actionsObjects.deleteObject("obj1")).then(() => { diff --git a/browser/app/js/objects/actions.js b/browser/app/js/objects/actions.js index e24832dcf..c4d2a3e2f 100644 --- a/browser/app/js/objects/actions.js +++ b/browser/app/js/objects/actions.js @@ -24,9 +24,11 @@ import { import { getCurrentBucket } from "../buckets/selectors" import { getCurrentPrefix, getCheckedList } from "./selectors" import * as alertActions from "../alert/actions" +import * as bucketActions from "../buckets/actions" import { minioBrowserPrefix } from "../constants" export const SET_LIST = "objects/SET_LIST" +export const RESET_LIST = "object/RESET_LIST" export const APPEND_LIST = "objects/APPEND_LIST" export const REMOVE = "objects/REMOVE" export const SET_SORT_BY = "objects/SET_SORT_BY" @@ -45,6 +47,10 @@ export const setList = (objects, marker, isTruncated) => ({ isTruncated }) +export const resetList = () => ({ + type: RESET_LIST +}) + export const appendList = (objects, marker, isTruncated) => ({ type: APPEND_LIST, objects, @@ -58,6 +64,7 @@ export const fetchObjects = append => { buckets: { currentBucket }, objects: { currentPrefix, marker } } = getState() + dispatch(alertActions.clear()) if (currentBucket) { return web .ListObjects({ @@ -85,8 +92,13 @@ export const fetchObjects = append => { dispatch(setPrefixWritable(res.writable)) }) .catch(err => { - dispatch(alertActions.set({ type: "danger", message: err.message })) - history.push("/login") + if (web.LoggedIn()) { + dispatch(alertActions.set({ type: "danger", message: err.message })) + dispatch(resetList()) + } + else { + history.push("/login") + } }) } } diff --git a/browser/app/js/objects/reducer.js b/browser/app/js/objects/reducer.js index 1eab6a7b7..8b9888dc3 100644 --- a/browser/app/js/objects/reducer.js +++ b/browser/app/js/objects/reducer.js @@ -50,6 +50,13 @@ export default ( marker: action.marker, isTruncated: action.isTruncated } + case actionsObjects.RESET_LIST: + return { + ...state, + list: [], + marker: "", + isTruncated: false + } case actionsObjects.APPEND_LIST: return { ...state, diff --git a/browser/ui-assets.go b/browser/ui-assets.go index 036d935bf..9c8c6eaae 100644 --- a/browser/ui-assets.go +++ b/browser/ui-assets.go @@ -4,7 +4,7 @@ // production/favicon.ico // production/firefox.png // production/index.html -// production/index_bundle-2018-08-24T02-51-30Z.js +// production/index_bundle-2018-09-03T07-40-35Z.js // production/loader.css // production/logo.svg // production/safari.png @@ -14,6 +14,7 @@ package browser import ( "fmt" + "github.com/elazarl/go-bindata-assetfs" "io/ioutil" "os" "path/filepath" @@ -64,7 +65,7 @@ func productionChromePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "production/chrome.png", size: 3726, mode: os.FileMode(420), modTime: time.Unix(1535079106, 0)} + info := bindataFileInfo{name: "production/chrome.png", size: 3726, mode: os.FileMode(420), modTime: time.Unix(1535960452, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -81,7 +82,7 @@ func productionFaviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "production/favicon.ico", size: 501, mode: os.FileMode(420), modTime: time.Unix(1535079106, 0)} + info := bindataFileInfo{name: "production/favicon.ico", size: 501, mode: os.FileMode(420), modTime: time.Unix(1535960452, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -98,7 +99,7 @@ func productionFirefoxPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "production/firefox.png", size: 4795, mode: os.FileMode(420), modTime: time.Unix(1535079106, 0)} + info := bindataFileInfo{name: "production/firefox.png", size: 4795, mode: os.FileMode(420), modTime: time.Unix(1535960452, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -155,8 +156,8 @@ var _productionIndexHTML = []byte(` - - + + `) @@ -171,25 +172,25 @@ func productionIndexHTML() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "production/index.html", size: 1954, mode: os.FileMode(420), modTime: time.Unix(1535079106, 0)} + info := bindataFileInfo{name: "production/index.html", size: 1954, mode: os.FileMode(420), modTime: time.Unix(1535960452, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _productionIndex_bundle20180824t025130zJs = []byte(`!function(A){function t(e){if(M[e])return M[e].exports;var I=M[e]={i:e,l:!1,exports:{}};return A[e].call(I.exports,I,I.exports,t),I.l=!0,I.exports}var M={};t.m=A,t.c=M,t.d=function(A,M,e){t.o(A,M)||Object.defineProperty(A,M,{configurable:!1,enumerable:!0,get:e})},t.n=function(A){var M=A&&A.__esModule?function(){return A.default}:function(){return A};return t.d(M,"a",M),M},t.o=function(A,t){return Object.prototype.hasOwnProperty.call(A,t)},t.p="",t(t.s=316)}([function(A,t,M){"use strict";A.exports=M(522)},function(A,t,M){var e=M(11),I=M(50),g=M(29),i=M(30),n=M(51),o=function(A,t,M){var E,c,T,N,a=A&o.F,r=A&o.G,C=A&o.S,D=A&o.P,B=A&o.B,s=r?e:C?e[t]||(e[t]={}):(e[t]||{}).prototype,Q=r?I:I[t]||(I[t]={}),u=Q.prototype||(Q.prototype={});r&&(M=t);for(E in M)c=!a&&s&&void 0!==s[E],T=(c?s:M)[E],N=B&&c?n(T,e):D&&"function"==typeof T?n(Function.call,T):T,s&&i(s,E,T,A&o.U),Q[E]!=T&&g(Q,E,N),D&&u[E]!=T&&(u[E]=T)};e.core=I,o.F=1,o.G=2,o.S=4,o.P=8,o.B=16,o.W=32,o.U=64,o.R=128,A.exports=o},function(A,t,M){"use strict";t.__esModule=!0,t.default=function(A,t){if(!(A instanceof t))throw new TypeError("Cannot call a class as a function")}},function(A,t,M){"use strict";t.__esModule=!0;var e=M(185),I=function(A){return A&&A.__esModule?A:{default:A}}(e);t.default=function(A,t){if(!A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,I.default)(t))&&"function"!=typeof t?A:t}},function(A,t,M){"use strict";function e(A){return A&&A.__esModule?A:{default:A}}t.__esModule=!0;var I=M(649),g=e(I),i=M(653),n=e(i),o=M(185),E=e(o);t.default=function(A,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,E.default)(t)));A.prototype=(0,n.default)(t&&t.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}),t&&(g.default?(0,g.default)(A,t):A.__proto__=t)}},function(A,t,M){var e,I;/*! +var _productionIndex_bundle20180903t074035zJs = []byte(`!function(A){function t(e){if(M[e])return M[e].exports;var I=M[e]={i:e,l:!1,exports:{}};return A[e].call(I.exports,I,I.exports,t),I.l=!0,I.exports}var M={};t.m=A,t.c=M,t.d=function(A,M,e){t.o(A,M)||Object.defineProperty(A,M,{configurable:!1,enumerable:!0,get:e})},t.n=function(A){var M=A&&A.__esModule?function(){return A.default}:function(){return A};return t.d(M,"a",M),M},t.o=function(A,t){return Object.prototype.hasOwnProperty.call(A,t)},t.p="",t(t.s=316)}([function(A,t,M){"use strict";A.exports=M(522)},function(A,t,M){var e=M(11),I=M(50),g=M(29),i=M(30),n=M(51),o=function(A,t,M){var E,c,T,N,a=A&o.F,r=A&o.G,C=A&o.S,D=A&o.P,B=A&o.B,s=r?e:C?e[t]||(e[t]={}):(e[t]||{}).prototype,Q=r?I:I[t]||(I[t]={}),u=Q.prototype||(Q.prototype={});r&&(M=t);for(E in M)c=!a&&s&&void 0!==s[E],T=(c?s:M)[E],N=B&&c?n(T,e):D&&"function"==typeof T?n(Function.call,T):T,s&&i(s,E,T,A&o.U),Q[E]!=T&&g(Q,E,N),D&&u[E]!=T&&(u[E]=T)};e.core=I,o.F=1,o.G=2,o.S=4,o.P=8,o.B=16,o.W=32,o.U=64,o.R=128,A.exports=o},function(A,t,M){"use strict";t.__esModule=!0,t.default=function(A,t){if(!(A instanceof t))throw new TypeError("Cannot call a class as a function")}},function(A,t,M){"use strict";t.__esModule=!0;var e=M(185),I=function(A){return A&&A.__esModule?A:{default:A}}(e);t.default=function(A,t){if(!A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,I.default)(t))&&"function"!=typeof t?A:t}},function(A,t,M){"use strict";function e(A){return A&&A.__esModule?A:{default:A}}t.__esModule=!0;var I=M(649),g=e(I),i=M(653),n=e(i),o=M(185),E=e(o);t.default=function(A,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,E.default)(t)));A.prototype=(0,n.default)(t&&t.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}),t&&(g.default?(0,g.default)(A,t):A.__proto__=t)}},function(A,t,M){var e,I;/*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ -!function(){"use strict";function M(){for(var A=[],t=0;t=0||Object.prototype.hasOwnProperty.call(A,e)&&(M[e]=A[e]);return M}},function(A,t,M){A.exports=M(565)()},function(A,t,M){"use strict";function e(A){return function(){for(var t=arguments.length,M=Array(t),e=0;e1?t-1:0),e=1;e0?I(e(A),9007199254740991):0}},function(A,t,M){"use strict";var e=function(A,t,M,e,I,g,i,n){if(!A){var o;if(void 0===t)o=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var E=[M,e,I,g,i,n],c=0;o=new Error(t.replace(/%s/g,function(){return E[c++]})),o.name="Invariant Violation"}throw o.framesToPop=1,o}};A.exports=e},function(A,t,M){var e=M(38);A.exports=function(A){return Object(e(A))}},function(A,t,M){"use strict";M.d(t,"c",function(){return e}),M.d(t,"b",function(){return I}),M.d(t,"a",function(){return g}),M.d(t,"d",function(){return i}),M.d(t,"e",function(){return n});var e={LARGE:"large",SMALL:"small",XSMALL:"xsmall"},I={large:"lg",medium:"md",small:"sm",xsmall:"xs",lg:"lg",md:"md",sm:"sm",xs:"xs"},g=["lg","md","sm","xs"],i={SUCCESS:"success",WARNING:"warning",DANGER:"danger",INFO:"info"},n={DEFAULT:"default",PRIMARY:"primary",LINK:"link",INVERSE:"inverse"}},function(A,t){var M={}.hasOwnProperty;A.exports=function(A,t){return M.call(A,t)}},function(A,t,M){"use strict";function e(A){return A&&A.__esModule?A:{default:A}}function I(A,t){if(!(A instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var g=function(){function A(A,t){for(var M=0;M"+I+""};A.exports=function(A,t){var M={};M[A]=t(n),e(e.P+e.F*I(function(){var t=""[A]('"');return t!==t.toLowerCase()||t.split('"').length>3}),"String",M)}},function(A,t,M){var e=M(92),I=M(54),g=M(32),i=M(41),n=M(26),o=M(206),E=Object.getOwnPropertyDescriptor;t.f=M(18)?E:function(A,t){if(A=g(A),t=i(t,!0),o)try{return E(A,t)}catch(A){}if(n(A,t))return I(!e.f.call(A,t),A[t])}},function(A,t,M){var e=M(26),I=M(24),g=M(137)("IE_PROTO"),i=Object.prototype;A.exports=Object.getPrototypeOf||function(A){return A=I(A),e(A,g)?A[g]:"function"==typeof A.constructor&&A instanceof A.constructor?A.constructor.prototype:A instanceof Object?i:null}},function(A,t,M){"use strict";function e(A){return A&&A.__esModule?A:{default:A}}Object.defineProperty(t,"__esModule",{value:!0}),t.downloadCheckedObjects=t.resetCheckedList=t.uncheckObject=t.checkObject=t.downloadObject=t.hideShareObject=t.showShareObject=t.shareObject=t.deleteCheckedObjects=t.removeObject=t.deleteObject=t.setPrefixWritable=t.setCurrentPrefix=t.selectPrefix=t.setSortOrder=t.setSortBy=t.sortObjects=t.fetchObjects=t.appendList=t.setList=t.CHECKED_LIST_RESET=t.CHECKED_LIST_REMOVE=t.CHECKED_LIST_ADD=t.SET_SHARE_OBJECT=t.SET_PREFIX_WRITABLE=t.SET_CURRENT_PREFIX=t.SET_SORT_ORDER=t.SET_SORT_BY=t.REMOVE=t.APPEND_LIST=t.SET_LIST=void 0;var I=Object.assign||function(A){for(var t=1;t1?"-":"";e.href=g,e.download=t.bucketName+i+t.prefix.slice(0,-1)+".zip",e.click(),window.URL.revokeObjectURL(g),e.remove()}},I.send(JSON.stringify(t))})},function(A,t){var M={}.toString;A.exports=function(A){return M.call(A).slice(8,-1)}},function(A,t){A.exports=function(A){if(void 0==A)throw TypeError("Can't call method on "+A);return A}},function(A,t,M){var e=M(12);A.exports=function(A,t){return!!A&&e(function(){t?A.call(null,function(){},1):A.call(null)})}},function(A,t,M){"use strict";function e(A){return!A||"#"===A.trim()}var I=M(6),g=M.n(I),i=M(7),n=M.n(i),o=M(2),E=M.n(o),c=M(3),T=M.n(c),N=M(4),a=M.n(N),r=M(0),C=M.n(r),D=M(8),B=M.n(D),s=M(15),Q=M.n(s),u=M(21),l={href:B.a.string,onClick:B.a.func,onKeyDown:B.a.func,disabled:B.a.bool,role:B.a.string,tabIndex:B.a.oneOfType([B.a.number,B.a.string]),componentClass:Q.a},y={componentClass:"a"},x=function(A){function t(M,e){E()(this,t);var I=T()(this,A.call(this,M,e));return I.handleClick=I.handleClick.bind(I),I.handleKeyDown=I.handleKeyDown.bind(I),I}return a()(t,A),t.prototype.handleClick=function(A){var t=this.props,M=t.disabled,I=t.href,g=t.onClick;if((M||e(I))&&A.preventDefault(),M)return void A.stopPropagation();g&&g(A)},t.prototype.handleKeyDown=function(A){" "===A.key&&(A.preventDefault(),this.handleClick(A))},t.prototype.render=function(){var A=this.props,t=A.componentClass,M=A.disabled,I=A.onKeyDown,i=n()(A,["componentClass","disabled","onKeyDown"]);return e(i.href)&&(i.role=i.role||"button",i.href=i.href||"#"),M&&(i.tabIndex=-1,i.style=g()({pointerEvents:"none"},i.style)),C.a.createElement(t,g()({},i,{onClick:this.handleClick,onKeyDown:Object(u.a)(this.handleKeyDown,I)}))},t}(C.a.Component);x.propTypes=l,x.defaultProps=y,t.a=x},function(A,t,M){var e=M(16);A.exports=function(A,t){if(!e(A))return A;var M,I;if(t&&"function"==typeof(M=A.toString)&&!e(I=M.call(A)))return I;if("function"==typeof(M=A.valueOf)&&!e(I=M.call(A)))return I;if(!t&&"function"==typeof(M=A.toString)&&!e(I=M.call(A)))return I;throw TypeError("Can't convert object to primitive value")}},function(A,t,M){var e=M(1),I=M(50),g=M(12);A.exports=function(A,t){var M=(I.Object||{})[A]||Object[A],i={};i[A]=t(M),e(e.S+e.F*g(function(){M(1)}),"Object",i)}},function(A,t,M){var e=M(51),I=M(91),g=M(24),i=M(22),n=M(409);A.exports=function(A,t){var M=1==A,o=2==A,E=3==A,c=4==A,T=6==A,N=5==A||T,a=t||n;return function(t,n,r){for(var C,D,B=g(t),s=I(B),Q=e(n,r,3),u=i(s.length),l=0,y=M?a(t,u):o?a(t,0):void 0;u>l;l++)if((N||l in s)&&(C=s[l],D=Q(C,l,B),A))if(M)y[l]=D;else if(D)switch(A){case 3:return!0;case 5:return C;case 6:return l;case 2:y.push(C)}else if(c)return!1;return T?-1:E||c?c:y}}},function(A,t,M){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=window.location.pathname;t.minioBrowserPrefix=e.slice(0,e.indexOf("/",1)),t.READ_ONLY="readonly",t.WRITE_ONLY="writeonly",t.READ_WRITE="readwrite",t.NONE="none",t.SHARE_OBJECT_EXPIRY_DAYS=5,t.SHARE_OBJECT_EXPIRY_HOURS=0,t.SHARE_OBJECT_EXPIRY_MINUTES=0},function(A,t,M){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=t.SET="alert/SET",I=t.CLEAR="alert/CLEAR",g=t.alertId=0;t.set=function(A){var M=(t.alertId=g+=1,g-1);return function(t,g){"danger"!==A.type&&setTimeout(function(){t({type:I,alert:{id:M}})},5e3),t({type:e,alert:Object.assign({},A,{id:M})})}},t.clear=function(){return{type:I}}},function(A,t,M){"use strict";function e(A){if(A&&A.__esModule)return A;var t={};if(null!=A)for(var M in A)Object.prototype.hasOwnProperty.call(A,M)&&(t[M]=A[M]);return t.default=A,t}function I(A){return A&&A.__esModule?A:{default:A}}Object.defineProperty(t,"__esModule",{value:!0}),t.hideBucketPolicy=t.showBucketPolicy=t.setPolicies=t.fetchPolicies=t.hideMakeBucketModal=t.showMakeBucketModal=t.removeBucket=t.addBucket=t.deleteBucket=t.makeBucket=t.setCurrentBucket=t.selectBucket=t.setFilter=t.setList=t.fetchBuckets=t.SET_POLICIES=t.SHOW_BUCKET_POLICY=t.SHOW_MAKE_BUCKET_MODAL=t.SET_CURRENT_BUCKET=t.SET_FILTER=t.REMOVE=t.ADD=t.SET_LIST=void 0;var g=M(27),i=I(g),n=M(96),o=I(n),E=M(45),c=e(E),T=M(36),N=e(T),a=M(174),r=t.SET_LIST="buckets/SET_LIST",C=t.ADD="buckets/ADD",D=t.REMOVE="buckets/REMOVE",B=t.SET_FILTER="buckets/SET_FILTER",s=t.SET_CURRENT_BUCKET="buckets/SET_CURRENT_BUCKET",Q=t.SHOW_MAKE_BUCKET_MODAL="buckets/SHOW_MAKE_BUCKET_MODAL",u=t.SHOW_BUCKET_POLICY="buckets/SHOW_BUCKET_POLICY",l=t.SET_POLICIES="buckets/SET_POLICIES",y=t.fetchBuckets=function(){return function(A){return i.default.ListBuckets().then(function(t){var M=t.buckets?t.buckets.map(function(A){return A.name}):[];if(A(x(M)),M.length>0){var e=(0,a.pathSlice)(o.default.location.pathname),I=e.bucket,g=e.prefix;A(I&&M.indexOf(I)>-1?j(I,g):j(M[0]))}else A(j("")),o.default.replace("/")})}},x=t.setList=function(A){return{type:r,buckets:A}},j=(t.setFilter=function(A){return{type:B,filter:A}},t.selectBucket=function(A,t){return function(M){M(w(A)),M(N.selectPrefix(t||""))}}),w=t.setCurrentBucket=function(A){return{type:s,bucket:A}},d=(t.makeBucket=function(A){return function(t){return i.default.MakeBucket({bucketName:A}).then(function(){t(d(A)),t(j(A))}).catch(function(A){return t(c.set({type:"danger",message:A.message}))})}},t.deleteBucket=function(A){return function(t){return i.default.DeleteBucket({bucketName:A}).then(function(){t(c.set({type:"info",message:"Bucket '"+A+"' has been deleted."})),t(Y(A)),t(y())}).catch(function(A){t(c.set({type:"danger",message:A.message}))})}},t.addBucket=function(A){return{type:C,bucket:A}}),Y=t.removeBucket=function(A){return{type:D,bucket:A}},h=(t.showMakeBucketModal=function(){return{type:Q,show:!0}},t.hideMakeBucketModal=function(){return{type:Q,show:!1}},t.fetchPolicies=function(A){return function(t){return i.default.ListAllBucketPolicies({bucketName:A}).then(function(A){var M=A.policies;t(h(M?M:[]))}).catch(function(A){t(c.set({type:"danger",message:A.message}))})}},t.setPolicies=function(A){return{type:l,policies:A}});t.showBucketPolicy=function(){return{type:u,show:!0}},t.hideBucketPolicy=function(){return{type:u,show:!1}}},function(A,t){var M=A.exports={version:"2.4.0"};"number"==typeof __e&&(__e=M)},function(A,t,M){var e=M(181)("wks"),I=M(125),g=M(59).Symbol,i="function"==typeof g;(A.exports=function(A){return e[A]||(e[A]=i&&g[A]||(i?g:I)("Symbol."+A))}).store=e},function(A,t,M){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=M(704);M.d(t,"Accordion",function(){return e.a});var I=M(705);M.d(t,"Alert",function(){return I.a});var g=M(706);M.d(t,"Badge",function(){return g.a});var i=M(707);M.d(t,"Breadcrumb",function(){return i.a});var n=M(280);M.d(t,"BreadcrumbItem",function(){return n.a});var o=M(109);M.d(t,"Button",function(){return o.a});var E=M(198);M.d(t,"ButtonGroup",function(){return E.a});var c=M(708);M.d(t,"ButtonToolbar",function(){return c.a});var T=M(709);M.d(t,"Carousel",function(){return T.a});var N=M(281);M.d(t,"CarouselItem",function(){return N.a});var a=M(719);M.d(t,"Checkbox",function(){return a.a});var r=M(720);M.d(t,"Clearfix",function(){return r.a});var C=M(197);M.d(t,"CloseButton",function(){return C.a});var D=M(721);M.d(t,"ControlLabel",function(){return D.a});var B=M(722);M.d(t,"Col",function(){return B.a});var s=M(201);M.d(t,"Collapse",function(){return s.a});var Q=M(128);M.d(t,"Dropdown",function(){return Q.a});var u=M(729);M.d(t,"DropdownButton",function(){return u.a});var l=M(130);M.d(t,"Fade",function(){return l.a});var y=M(730);M.d(t,"Form",function(){return y.a});var x=M(731);M.d(t,"FormControl",function(){return x.a});var j=M(734);M.d(t,"FormGroup",function(){return j.a});var w=M(200);M.d(t,"Glyphicon",function(){return w.a});var d=M(288);M.d(t,"Grid",function(){return d.a});var Y=M(735);M.d(t,"HelpBlock",function(){return Y.a});var h=M(736);M.d(t,"Image",function(){return h.a});var L=M(737);M.d(t,"InputGroup",function(){return L.a});var S=M(740);M.d(t,"Jumbotron",function(){return S.a});var z=M(741);M.d(t,"Label",function(){return z.a});var U=M(742);M.d(t,"ListGroup",function(){return U.a});var p=M(289);M.d(t,"ListGroupItem",function(){return p.a});var f=M(131);M.d(t,"Media",function(){return f.a});var F=M(749);M.d(t,"MenuItem",function(){return F.a});var m=M(750);M.d(t,"Modal",function(){return m.a});var O=M(296);M.d(t,"ModalBody",function(){return O.a});var R=M(297);M.d(t,"ModalFooter",function(){return R.a});var k=M(298);M.d(t,"ModalHeader",function(){return k.a});var G=M(299);M.d(t,"ModalTitle",function(){return G.a});var b=M(300);M.d(t,"Nav",function(){return b.a});var J=M(776);M.d(t,"Navbar",function(){return J.a});var H=M(301);M.d(t,"NavbarBrand",function(){return H.a});var v=M(780);M.d(t,"NavDropdown",function(){return v.a});var V=M(302);M.d(t,"NavItem",function(){return V.a});var X=M(303);M.d(t,"Overlay",function(){return X.a});var W=M(787);M.d(t,"OverlayTrigger",function(){return W.a});var P=M(788);M.d(t,"PageHeader",function(){return P.a});var K=M(789);M.d(t,"PageItem",function(){return K.a});var Z=M(791);M.d(t,"Pager",function(){return Z.a});var q=M(792);M.d(t,"Pagination",function(){return q.a});var _=M(794);M.d(t,"Panel",function(){return _.a});var $=M(278);M.d(t,"PanelGroup",function(){return $.a});var AA=M(800);M.d(t,"Popover",function(){return AA.a});var tA=M(801);M.d(t,"ProgressBar",function(){return tA.a});var MA=M(802);M.d(t,"Radio",function(){return MA.a});var eA=M(803);M.d(t,"ResponsiveEmbed",function(){return eA.a});var IA=M(804);M.d(t,"Row",function(){return IA.a});var gA=M(40);M.d(t,"SafeAnchor",function(){return gA.a});var iA=M(805);M.d(t,"SplitButton",function(){return iA.a});var nA=M(807);M.d(t,"Tab",function(){return nA.a});var oA=M(204);M.d(t,"TabContainer",function(){return oA.a});var EA=M(205);M.d(t,"TabContent",function(){return EA.a});var cA=M(808);M.d(t,"Table",function(){return cA.a});var TA=M(309);M.d(t,"TabPane",function(){return TA.a});var NA=M(809);M.d(t,"Tabs",function(){return NA.a});var aA=M(810);M.d(t,"Thumbnail",function(){return aA.a});var rA=M(310);M.d(t,"ToggleButton",function(){return rA.a});var CA=M(811);M.d(t,"ToggleButtonGroup",function(){return CA.a});var DA=M(812);M.d(t,"Tooltip",function(){return DA.a});var BA=M(813);M.d(t,"Well",function(){return BA.a});var sA=M(814);M.d(t,"utils",function(){return sA})},function(A,t){var M=A.exports={version:"2.4.0"};"number"==typeof __e&&(__e=M)},function(A,t,M){var e=M(31);A.exports=function(A,t,M){if(e(A),void 0===t)return A;switch(M){case 1:return function(M){return A.call(t,M)};case 2:return function(M,e){return A.call(t,M,e)};case 3:return function(M,e,I){return A.call(t,M,e,I)}}return function(){return A.apply(t,arguments)}}},function(A,t,M){"use strict";if(M(18)){var e=M(64),I=M(11),g=M(12),i=M(1),n=M(119),o=M(160),E=M(51),c=M(70),T=M(54),N=M(29),a=M(71),r=M(56),C=M(22),D=M(66),B=M(41),s=M(26),Q=M(212),u=M(93),l=M(16),y=M(24),x=M(152),j=M(67),w=M(35),d=M(68).f,Y=M(154),h=M(63),L=M(17),S=M(43),z=M(111),U=M(157),p=M(156),f=M(78),F=M(115),m=M(69),O=M(155),R=M(221),k=M(19),G=M(34),b=k.f,J=G.f,H=I.RangeError,v=I.TypeError,V=I.Uint8Array,X=Array.prototype,W=o.ArrayBuffer,P=o.DataView,K=S(0),Z=S(2),q=S(3),_=S(4),$=S(5),AA=S(6),tA=z(!0),MA=z(!1),eA=p.values,IA=p.keys,gA=p.entries,iA=X.lastIndexOf,nA=X.reduce,oA=X.reduceRight,EA=X.join,cA=X.sort,TA=X.slice,NA=X.toString,aA=X.toLocaleString,rA=L("iterator"),CA=L("toStringTag"),DA=h("typed_constructor"),BA=h("def_constructor"),sA=n.CONSTR,QA=n.TYPED,uA=n.VIEW,lA=S(1,function(A,t){return YA(U(A,A[BA]),t)}),yA=g(function(){return 1===new V(new Uint16Array([1]).buffer)[0]}),xA=!!V&&!!V.prototype.set&&g(function(){new V(1).set({})}),jA=function(A,t){if(void 0===A)throw v("Wrong length!");var M=+A,e=C(A);if(t&&!Q(M,e))throw H("Wrong length!");return e},wA=function(A,t){var M=r(A);if(M<0||M%t)throw H("Wrong offset!");return M},dA=function(A){if(l(A)&&QA in A)return A;throw v(A+" is not a typed array!")},YA=function(A,t){if(!(l(A)&&DA in A))throw v("It is not a typed array constructor!");return new A(t)},hA=function(A,t){return LA(U(A,A[BA]),t)},LA=function(A,t){for(var M=0,e=t.length,I=YA(A,e);e>M;)I[M]=t[M++];return I},SA=function(A,t,M){b(A,t,{get:function(){return this._d[M]}})},zA=function(A){var t,M,e,I,g,i,n=y(A),o=arguments.length,c=o>1?arguments[1]:void 0,T=void 0!==c,N=Y(n);if(void 0!=N&&!x(N)){for(i=N.call(n),e=[],t=0;!(g=i.next()).done;t++)e.push(g.value);n=e}for(T&&o>2&&(c=E(c,arguments[2],2)),t=0,M=C(n.length),I=YA(this,M);M>t;t++)I[t]=T?c(n[t],t):n[t];return I},UA=function(){for(var A=0,t=arguments.length,M=YA(this,t);t>A;)M[A]=arguments[A++];return M},pA=!!V&&g(function(){aA.call(new V(1))}),fA=function(){return aA.apply(pA?TA.call(dA(this)):dA(this),arguments)},FA={copyWithin:function(A,t){return R.call(dA(this),A,t,arguments.length>2?arguments[2]:void 0)},every:function(A){return _(dA(this),A,arguments.length>1?arguments[1]:void 0)},fill:function(A){return O.apply(dA(this),arguments)},filter:function(A){return hA(this,Z(dA(this),A,arguments.length>1?arguments[1]:void 0))},find:function(A){return $(dA(this),A,arguments.length>1?arguments[1]:void 0)},findIndex:function(A){return AA(dA(this),A,arguments.length>1?arguments[1]:void 0)},forEach:function(A){K(dA(this),A,arguments.length>1?arguments[1]:void 0)},indexOf:function(A){return MA(dA(this),A,arguments.length>1?arguments[1]:void 0)},includes:function(A){return tA(dA(this),A,arguments.length>1?arguments[1]:void 0)},join:function(A){return EA.apply(dA(this),arguments)},lastIndexOf:function(A){return iA.apply(dA(this),arguments)},map:function(A){return lA(dA(this),A,arguments.length>1?arguments[1]:void 0)},reduce:function(A){return nA.apply(dA(this),arguments)},reduceRight:function(A){return oA.apply(dA(this),arguments)},reverse:function(){for(var A,t=this,M=dA(t).length,e=Math.floor(M/2),I=0;I1?arguments[1]:void 0)},sort:function(A){return cA.call(dA(this),A)},subarray:function(A,t){var M=dA(this),e=M.length,I=D(A,e);return new(U(M,M[BA]))(M.buffer,M.byteOffset+I*M.BYTES_PER_ELEMENT,C((void 0===t?e:D(t,e))-I))}},mA=function(A,t){return hA(this,TA.call(dA(this),A,t))},OA=function(A){dA(this);var t=wA(arguments[1],1),M=this.length,e=y(A),I=C(e.length),g=0;if(I+t>M)throw H("Wrong length!");for(;g255?255:255&e),I.v[r](M*t+I.o,e,yA)},L=function(A,t){b(A,t,{get:function(){return Y(this,t)},set:function(A){return h(this,t,A)},enumerable:!0})};Q?(D=M(function(A,M,e,I){c(A,D,E,"_d");var g,i,n,o,T=0,a=0;if(l(M)){if(!(M instanceof W||"ArrayBuffer"==(o=u(M))||"SharedArrayBuffer"==o))return QA in M?LA(D,M):zA.call(D,M);g=M,a=wA(e,t);var r=M.byteLength;if(void 0===I){if(r%t)throw H("Wrong length!");if((i=r-a)<0)throw H("Wrong length!")}else if((i=C(I)*t)+a>r)throw H("Wrong length!");n=i/t}else n=jA(M,!0),i=n*t,g=new W(i);for(N(A,"_d",{b:g,o:a,l:i,e:n,v:new P(g)});T0?e:M)(A)}},function(A,t,M){A.exports=M(537)()},function(A,t,M){var e=M(59),I=M(47),g=M(175),i=M(83),n=function(A,t,M){var o,E,c,T=A&n.F,N=A&n.G,a=A&n.S,r=A&n.P,C=A&n.B,D=A&n.W,B=N?I:I[t]||(I[t]={}),s=B.prototype,Q=N?e:a?e[t]:(e[t]||{}).prototype;N&&(M=t);for(o in M)(E=!T&&Q&&void 0!==Q[o])&&o in B||(c=E?Q[o]:M[o],B[o]=N&&"function"!=typeof Q[o]?M[o]:C&&E?g(c,e):D&&Q[o]==c?function(A){var t=function(t,M,e){if(this instanceof A){switch(arguments.length){case 0:return new A;case 1:return new A(t);case 2:return new A(t,M)}return new A(t,M,e)}return A.apply(this,arguments)};return t.prototype=A.prototype,t}(c):r&&"function"==typeof c?g(Function.call,c):c,r&&((B.virtual||(B.virtual={}))[o]=c,A&n.R&&s&&!s[o]&&i(s,o,c)))};n.F=1,n.G=2,n.S=4,n.P=8,n.B=16,n.W=32,n.U=64,n.R=128,A.exports=n},function(A,t){var M=A.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=M)},function(A,t,M){var e=M(262),I=M(178);A.exports=function(A){return e(I(A))}},function(A,t,M){"use strict";function e(A,t,M,e,I){M&&(A._notifying=!0,M.call.apply(M,[A,e].concat(I)),A._notifying=!1),A._values[t]=e,A.unmounted||A.forceUpdate()}t.__esModule=!0;var I=M(656),g=function(A){return A&&A.__esModule?A:{default:A}}(I),i={shouldComponentUpdate:function(){return!this._notifying}};t.default=(0,g.default)(i,e),A.exports=t.default},function(A,t,M){A.exports={default:M(659),__esModule:!0}},function(A,t){var M=0,e=Math.random();A.exports=function(A){return"Symbol(".concat(void 0===A?"":A,")_",(++M+e).toString(36))}},function(A,t){A.exports=!1},function(A,t,M){var e=M(208),I=M(138);A.exports=Object.keys||function(A){return e(A,I)}},function(A,t,M){var e=M(56),I=Math.max,g=Math.min;A.exports=function(A,t){return A=e(A),A<0?I(A+t,0):g(A,t)}},function(A,t,M){var e=M(10),I=M(209),g=M(138),i=M(137)("IE_PROTO"),n=function(){},o=function(){var A,t=M(135)("iframe"),e=g.length;for(t.style.display="none",M(140).appendChild(t),t.src="javascript:",A=t.contentWindow.document,A.open(),A.write("