Skip to content

Commit b9f0ccf

Browse files
authored
Use swagger api for delete single and multiple Service Accounts (#3199)
1 parent 2474232 commit b9f0ccf

File tree

7 files changed

+125
-42
lines changed

7 files changed

+125
-42
lines changed

api/embedded_spec.go

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

api/operations/service_account/delete_multiple_service_accounts_parameters.go

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

models/selected_s_as.go

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

swagger.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,9 +1425,7 @@ paths:
14251425
in: body
14261426
required: true
14271427
schema:
1428-
type: array
1429-
items:
1430-
type: string
1428+
$ref: "#/definitions/selectedSAs"
14311429
responses:
14321430
204:
14331431
description: A successful response.
@@ -6196,3 +6194,8 @@ definitions:
61966194
format: int64
61976195
required:
61986196
- exp
6197+
6198+
selectedSAs:
6199+
type: array
6200+
items:
6201+
type: string

web-app/src/api/consoleApi.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,6 +1537,8 @@ export interface MaxShareLinkExpResponse {
15371537
exp: number;
15381538
}
15391539

1540+
export type SelectedSAs = string[];
1541+
15401542
export type QueryParamsType = Record<string | number, any>;
15411543
export type ResponseFormat = keyof Omit<Body, "body" | "bodyUsed">;
15421544

@@ -2177,14 +2179,15 @@ export class Api<
21772179
*/
21782180
downloadMultipleObjects: (
21792181
bucketName: string,
2180-
objectList: string[],
2182+
objectList: SelectedUsers,
21812183
params: RequestParams = {},
21822184
) =>
21832185
this.request<File, ApiError>({
21842186
path: `/buckets/${bucketName}/objects/download-multiple`,
21852187
method: "POST",
21862188
body: objectList,
21872189
secure: true,
2190+
type: ContentType.Json,
21882191
...params,
21892192
}),
21902193

@@ -3088,14 +3091,15 @@ export class Api<
30883091
* @secure
30893092
*/
30903093
deleteMultipleServiceAccounts: (
3091-
selectedSA: string[],
3094+
selectedSA: SelectedSAs,
30923095
params: RequestParams = {},
30933096
) =>
30943097
this.request<void, ApiError>({
30953098
path: `/service-accounts/delete-multi`,
30963099
method: "DELETE",
30973100
body: selectedSA,
30983101
secure: true,
3102+
type: ContentType.Json,
30993103
...params,
31003104
}),
31013105

web-app/src/screens/Console/Account/DeleteServiceAccount.tsx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@
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, { Fragment } from "react";
18-
import { ErrorResponseHandler } from "../../../common/types";
19-
import useApi from "../Common/Hooks/useApi";
17+
import React, { Fragment, useState } from "react";
2018
import ConfirmDialog from "../Common/ModalWrapper/ConfirmDialog";
2119
import { ConfirmDeleteIcon } from "mds";
2220
import { encodeURLString } from "../../../common/utils";
2321
import { setErrorSnackMessage } from "../../../systemSlice";
2422
import { useAppDispatch } from "../../../store";
23+
import { api } from "api";
24+
import { ApiError, HttpResponse } from "api/consoleApi";
25+
import { errorToHandler } from "api/errors";
2526

2627
interface IDeleteServiceAccountProps {
2728
closeDeleteModalAndRefresh: (refresh: boolean) => void;
@@ -35,22 +36,27 @@ const DeleteServiceAccount = ({
3536
selectedServiceAccount,
3637
}: IDeleteServiceAccountProps) => {
3738
const dispatch = useAppDispatch();
38-
const onDelSuccess = () => closeDeleteModalAndRefresh(true);
39-
const onDelError = (err: ErrorResponseHandler) =>
40-
dispatch(setErrorSnackMessage(err));
4139
const onClose = () => closeDeleteModalAndRefresh(false);
4240

43-
const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);
41+
const [loadingDelete, setLoadingDelete] = useState<boolean>(false);
4442

4543
if (!selectedServiceAccount) {
4644
return null;
4745
}
4846

4947
const onConfirmDelete = () => {
50-
invokeDeleteApi(
51-
"DELETE",
52-
`/api/v1/service-accounts/${encodeURLString(selectedServiceAccount)}`,
53-
);
48+
setLoadingDelete(true);
49+
api.serviceAccounts
50+
.deleteServiceAccount(encodeURLString(selectedServiceAccount))
51+
.then((_) => {
52+
closeDeleteModalAndRefresh(true);
53+
})
54+
.catch(async (res: HttpResponse<void, ApiError>) => {
55+
const err = (await res.json()) as ApiError;
56+
dispatch(setErrorSnackMessage(errorToHandler(err)));
57+
closeDeleteModalAndRefresh(false);
58+
})
59+
.finally(() => setLoadingDelete(false));
5460
};
5561

5662
return (
@@ -59,7 +65,7 @@ const DeleteServiceAccount = ({
5965
confirmText={"Delete"}
6066
isOpen={deleteOpen}
6167
titleIcon={<ConfirmDeleteIcon />}
62-
isLoading={deleteLoading}
68+
isLoading={loadingDelete}
6369
onConfirm={onConfirmDelete}
6470
onClose={onClose}
6571
confirmationContent={

web-app/src/screens/Console/Users/DeleteMultipleServiceAccounts.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
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, { Fragment } from "react";
17+
import React, { Fragment, useState } from "react";
1818
import { ConfirmDeleteIcon } from "mds";
19-
import { ErrorResponseHandler } from "../../../common/types";
20-
import useApi from "../../../screens/Console/Common/Hooks/useApi";
2119
import ConfirmDialog from "../../../screens/Console/Common/ModalWrapper/ConfirmDialog";
2220
import { setErrorSnackMessage } from "../../../systemSlice";
2321
import { useAppDispatch } from "../../../store";
22+
import { api } from "api";
23+
import { ApiError, HttpResponse } from "api/consoleApi";
24+
import { errorToHandler } from "api/errors";
2425

2526
interface IDeleteMultiSAsProps {
2627
closeDeleteModalAndRefresh: (refresh: boolean) => void;
@@ -34,28 +35,33 @@ const DeleteMultipleSAs = ({
3435
selectedSAs,
3536
}: IDeleteMultiSAsProps) => {
3637
const dispatch = useAppDispatch();
37-
const onDelSuccess = () => closeDeleteModalAndRefresh(true);
38-
const onDelError = (err: ErrorResponseHandler) =>
39-
dispatch(setErrorSnackMessage(err));
4038
const onClose = () => closeDeleteModalAndRefresh(false);
41-
const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);
39+
const [loadingDelete, setLoadingDelete] = useState<boolean>(false);
40+
4241
if (!selectedSAs) {
4342
return null;
4443
}
4544
const onConfirmDelete = () => {
46-
invokeDeleteApi(
47-
"DELETE",
48-
`/api/v1/service-accounts/delete-multi`,
49-
selectedSAs,
50-
);
45+
setLoadingDelete(true);
46+
api.serviceAccounts
47+
.deleteMultipleServiceAccounts(selectedSAs)
48+
.then((_) => {
49+
closeDeleteModalAndRefresh(true);
50+
})
51+
.catch(async (res: HttpResponse<void, ApiError>) => {
52+
const err = (await res.json()) as ApiError;
53+
dispatch(setErrorSnackMessage(errorToHandler(err)));
54+
closeDeleteModalAndRefresh(false);
55+
})
56+
.finally(() => setLoadingDelete(false));
5157
};
5258
return (
5359
<ConfirmDialog
5460
title={`Delete Access Keys`}
5561
confirmText={"Delete"}
5662
isOpen={deleteOpen}
5763
titleIcon={<ConfirmDeleteIcon />}
58-
isLoading={deleteLoading}
64+
isLoading={loadingDelete}
5965
onConfirm={onConfirmDelete}
6066
onClose={onClose}
6167
confirmationContent={

0 commit comments

Comments
 (0)