Skip to content

Commit 2001ab6

Browse files
authored
Logout on Unauthorized. Fix all UI warnings. (#35)
1 parent 31f0655 commit 2001ab6

File tree

18 files changed

+215
-232
lines changed

18 files changed

+215
-232
lines changed

portal-ui/bindata_assetfs.go

Lines changed: 75 additions & 75 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

portal-ui/src/common/api/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ export class API {
2424
.set("Authorization", `Bearer ${token}`)
2525
.send(data)
2626
.then(res => res.body)
27-
.catch(err => this.onError(err));
27+
.catch(err => {
28+
// if we get unauthorized, kick out the user
29+
if (err.status === 401) {
30+
storage.removeItem("token");
31+
window.location.href = "/";
32+
}
33+
this.onError(err);
34+
});
2835
}
2936

3037
onError(err: any) {
@@ -38,5 +45,6 @@ export class API {
3845
}
3946
}
4047
}
48+
4149
const api = new API();
4250
export default api;

portal-ui/src/screens/Console/Buckets/Buckets.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ import { AppState } from "../../../store";
3535
import { setMenuOpen } from "../../../actions";
3636
import { ThemedComponentProps } from "@material-ui/core/styles/withTheme";
3737
import NotFoundPage from "../../NotFoundPage";
38-
import BucketList from "./ListBuckets/ListBuckets";
39-
import ViewBucket from "./ViewBucket/ViewBucket";
4038
import ListBuckets from "./ListBuckets/ListBuckets";
39+
import ViewBucket from "./ViewBucket/ViewBucket";
4140

4241
const styles = (theme: Theme) =>
4342
createStyles({

portal-ui/src/screens/Console/Buckets/ViewBucket/AddEvent.tsx

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import TableCell from "@material-ui/core/TableCell";
3838
import TableBody from "@material-ui/core/TableBody";
3939
import Checkbox from "@material-ui/core/Checkbox";
4040
import Table from "@material-ui/core/Table";
41-
import { ArnList, BucketEventList } from "../types";
41+
import { ArnList } from "../types";
4242

4343
const styles = (theme: Theme) =>
4444
createStyles({
@@ -156,26 +156,6 @@ class AddEvent extends React.Component<IAddEventProps, IAddEventState> {
156156
{ label: "DELETE - Object Deleted", value: "delete" }
157157
];
158158

159-
const selectionChanged = (e: React.ChangeEvent<HTMLInputElement>) => {
160-
const targetD = e.target;
161-
const value = targetD.value;
162-
const checked = targetD.checked;
163-
164-
let elements: string[] = [...selectedEvents]; // We clone the selectedGroups array
165-
166-
if (checked) {
167-
// If the user has checked this field we need to push this to selectedGroupsList
168-
elements.push(value);
169-
} else {
170-
// User has unchecked this field, we need to remove it from the list
171-
elements = elements.filter(element => element !== value);
172-
}
173-
174-
this.setState({ selectedEvents: selectedEvents });
175-
176-
return elements;
177-
};
178-
179159
const handleClick = (
180160
event: React.MouseEvent<unknown> | ChangeEvent<unknown>,
181161
name: string

portal-ui/src/screens/Console/Buckets/ViewBucket/DeleteEvent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class DeleteEvent extends React.Component<
9797
}
9898

9999
render() {
100-
const { classes, deleteOpen, selectedBucket } = this.props;
100+
const { classes, deleteOpen } = this.props;
101101
const { deleteLoading, deleteError } = this.state;
102102

103103
return (

portal-ui/src/screens/Console/Buckets/ViewBucket/SetAccessPolicy.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ import {
2626
InputLabel,
2727
LinearProgress,
2828
MenuItem,
29-
Select,
30-
TextField
29+
Select
3130
} from "@material-ui/core";
3231
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
3332
import api from "../../../../common/api";

portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import {
3535
import Typography from "@material-ui/core/Typography";
3636
import DeleteIcon from "@material-ui/icons/Delete";
3737
import SetAccessPolicy from "./SetAccessPolicy";
38-
import DeleteBucket from "../ListBuckets/DeleteBucket";
3938
import { MinTablePaginationActions } from "../../../../common/MinTablePaginationActions";
4039
import { CreateIcon } from "../../../../icons";
4140
import AddEvent from "./AddEvent";
@@ -130,7 +129,7 @@ class ViewBucket extends React.Component<IViewBucketProps, IViewBucketState> {
130129

131130
fetchEvents() {
132131
this.setState({ loading: true }, () => {
133-
const { page, rowsPerPage } = this.state;
132+
const { page } = this.state;
134133
const { match } = this.props;
135134
const bucketName = match.params["bucketName"];
136135
api
@@ -205,7 +204,6 @@ class ViewBucket extends React.Component<IViewBucketProps, IViewBucketState> {
205204
rowsPerPage,
206205
deleteOpen,
207206
addScreenOpen,
208-
selectedBucket,
209207
selectedEvent
210208
} = this.state;
211209

portal-ui/src/screens/Console/Console.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ class Console extends React.Component<
170170
ConsoleProps & RouteComponentProps & StyledProps & ThemedComponentProps
171171
> {
172172
componentDidMount(): void {
173-
//TODO: verify the session is still valid
174173
api
175174
.invoke("GET", `/api/v1/session`)
176175
.then(res => {

portal-ui/src/screens/Console/Dashboard/Dashboard.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ const Dashboard = ({ classes }: IDashboardProps) => {
137137
});
138138
};
139139
const prettyUsage = (usage: string | undefined) => {
140-
if (usage == undefined) {
140+
if (usage === undefined) {
141141
return "0";
142142
}
143143
return niceBytes(usage);
@@ -156,7 +156,7 @@ const Dashboard = ({ classes }: IDashboardProps) => {
156156
return n.toFixed(n < 10 && l > 0 ? 1 : 0) + " " + units[l];
157157
};
158158
const prettyNumber = (usage: number | undefined) => {
159-
if (usage == undefined) {
159+
if (usage === undefined) {
160160
return 0;
161161
}
162162

@@ -165,11 +165,12 @@ const Dashboard = ({ classes }: IDashboardProps) => {
165165

166166
return (
167167
<React.Fragment>
168-
<Grid container xs={12}>
169-
<Grid container xs={12} spacing={3} className={classes.container}>
170-
<Grid container xs={12}>
168+
<Grid container>
169+
<Grid container spacing={3} className={classes.container}>
170+
<Grid container>
171171
<Typography variant="h2">MinIO Console</Typography>
172172
</Grid>
173+
{error !== "" && <Grid container>{error}</Grid>}
173174
<Grid item xs={12} md={4} lg={4}>
174175
<Paper className={fixedHeightPaper}>
175176
<Grid container direction="row" alignItems="center">

portal-ui/src/screens/Console/Groups/AddGroup.tsx

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// You should have received a copy of the GNU Affero General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17-
import React, { useState, useEffect } from "react";
17+
import React, { useEffect, useState } from "react";
1818
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
1919
import {
2020
Button,
@@ -31,8 +31,6 @@ import Grid from "@material-ui/core/Grid";
3131
import Typography from "@material-ui/core/Typography";
3232
import api from "../../../common/api";
3333
import UsersSelectors from "./UsersSelectors";
34-
import { GroupsList } from "./types";
35-
import { groupsSort } from "../../../utils/sortFunctions";
3634
import Title from "../../../common/Title";
3735

3836
interface IGroupProps {
@@ -87,15 +85,69 @@ const AddGroup = ({
8785

8886
useEffect(() => {
8987
if (saving) {
88+
const saveRecord = () => {
89+
if (selectedGroup !== null) {
90+
api
91+
.invoke("PUT", `/api/v1/groups/${groupName}`, {
92+
group: groupName,
93+
members: selectedUsers,
94+
status: groupEnabled
95+
})
96+
.then(res => {
97+
isSaving(false);
98+
setError("");
99+
closeModalAndRefresh();
100+
})
101+
.catch(err => {
102+
isSaving(false);
103+
setError(err);
104+
});
105+
} else {
106+
api
107+
.invoke("POST", "/api/v1/groups", {
108+
group: groupName,
109+
members: selectedUsers
110+
})
111+
.then(res => {
112+
isSaving(false);
113+
setError("");
114+
closeModalAndRefresh();
115+
})
116+
.catch(err => {
117+
isSaving(false);
118+
setError(err);
119+
});
120+
}
121+
};
90122
saveRecord();
91123
}
92-
}, [saving]);
124+
}, [
125+
saving,
126+
groupName,
127+
selectedUsers,
128+
groupEnabled,
129+
selectedGroup,
130+
closeModalAndRefresh
131+
]);
93132

94133
useEffect(() => {
95134
if (selectedGroup && loadingGroup) {
135+
const fetchGroupInfo = () => {
136+
api
137+
.invoke("GET", `/api/v1/groups/${selectedGroup}`)
138+
.then((res: MainGroupProps) => {
139+
setGroupEnabled(res.status);
140+
setGroupName(res.name);
141+
setSelectedUsers(res.members);
142+
})
143+
.catch(err => {
144+
setError(err);
145+
isLoadingGroup(false);
146+
});
147+
};
96148
fetchGroupInfo();
97149
}
98-
}, [loadingGroup]);
150+
}, [loadingGroup, selectedGroup]);
99151

100152
//Fetch Actions
101153
const setSaving = (event: React.FormEvent) => {
@@ -104,55 +156,6 @@ const AddGroup = ({
104156
isSaving(true);
105157
};
106158

107-
const saveRecord = () => {
108-
if (selectedGroup !== null) {
109-
api
110-
.invoke("PUT", `/api/v1/groups/${groupName}`, {
111-
group: groupName,
112-
members: selectedUsers,
113-
status: groupEnabled
114-
})
115-
.then(res => {
116-
isSaving(false);
117-
setError("");
118-
closeModalAndRefresh();
119-
})
120-
.catch(err => {
121-
isSaving(false);
122-
setError(err);
123-
});
124-
} else {
125-
api
126-
.invoke("POST", "/api/v1/groups", {
127-
group: groupName,
128-
members: selectedUsers
129-
})
130-
.then(res => {
131-
isSaving(false);
132-
setError("");
133-
closeModalAndRefresh();
134-
})
135-
.catch(err => {
136-
isSaving(false);
137-
setError(err);
138-
});
139-
}
140-
};
141-
142-
const fetchGroupInfo = () => {
143-
api
144-
.invoke("GET", `/api/v1/groups/${selectedGroup}`)
145-
.then((res: MainGroupProps) => {
146-
setGroupEnabled(res.status);
147-
setGroupName(res.name);
148-
setSelectedUsers(res.members);
149-
})
150-
.catch(err => {
151-
setError(err);
152-
isLoadingGroup(false);
153-
});
154-
};
155-
156159
return (
157160
<Dialog
158161
open={open}

0 commit comments

Comments
 (0)