diff --git a/ui/src/Components/AlertAck/index.js b/ui/src/Components/AlertAck/index.js
index 657682e6b..63bc222e3 100644
--- a/ui/src/Components/AlertAck/index.js
+++ b/ui/src/Components/AlertAck/index.js
@@ -146,6 +146,7 @@ const AlertAck = observer(
body: JSON.stringify(
this.submitState.silencesByCluster[cluster].payload
),
+ credentials: am.corsCredentials,
headers: {
"Content-Type": "application/json",
...am.headers
diff --git a/ui/src/Components/AlertAck/index.test.js b/ui/src/Components/AlertAck/index.test.js
index 03e20c8b0..58155561f 100644
--- a/ui/src/Components/AlertAck/index.test.js
+++ b/ui/src/Components/AlertAck/index.test.js
@@ -37,6 +37,7 @@ beforeEach(() => {
publicURI: "http://example.com",
readonly: false,
headers: { foo: "bar" },
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -265,6 +266,7 @@ describe("", () => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -276,6 +278,7 @@ describe("", () => {
publicURI: "http://am2.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -314,6 +317,7 @@ describe("", () => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.test.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.test.js
index 1c8a122ef..3b633f702 100644
--- a/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.test.js
+++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.test.js
@@ -27,6 +27,7 @@ beforeEach(() => {
publicURI: "http://example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.test.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.test.js
index a1c6df152..221a159b6 100644
--- a/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.test.js
+++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.test.js
@@ -25,6 +25,7 @@ beforeEach(() => {
publicURI: "http://example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
diff --git a/ui/src/Components/ManagedSilence/DeleteSilence.js b/ui/src/Components/ManagedSilence/DeleteSilence.js
index c9caee3f2..60c352965 100644
--- a/ui/src/Components/ManagedSilence/DeleteSilence.js
+++ b/ui/src/Components/ManagedSilence/DeleteSilence.js
@@ -150,7 +150,8 @@ const DeleteSilenceModalContent = observer(
this.deleteState.fetch = FetchDelete(
`${alertmanager.uri}/api/v2/silence/${silence.id}`,
{
- headers: alertmanager.headers
+ headers: alertmanager.headers,
+ credentials: alertmanager.corsCredentials
}
)
.then(result => {
diff --git a/ui/src/Components/ManagedSilence/DeleteSilence.test.js b/ui/src/Components/ManagedSilence/DeleteSilence.test.js
index c30e6000e..b5f47ea77 100644
--- a/ui/src/Components/ManagedSilence/DeleteSilence.test.js
+++ b/ui/src/Components/ManagedSilence/DeleteSilence.test.js
@@ -207,6 +207,18 @@ describe("", () => {
});
});
+ it("uses CORS credentials from alertmanager config", async () => {
+ alertStore.data.upstreams.instances[0].corsCredentials = "omit";
+ await VerifyResponse({ status: "success" });
+ expect(fetch.mock.calls[1][0]).toBe(
+ "http://localhost:9093/api/v2/silence/04d37636-2350-4878-b382-e0b50353230f"
+ );
+ expect(fetch.mock.calls[1][1]).toMatchObject({
+ credentials: "omit",
+ method: "DELETE"
+ });
+ });
+
it("'Confirm' button is no-op after successful DELETE", async () => {
const tree = await VerifyResponse({ status: "success" });
expect(fetch.mock.calls[1][0]).toBe(
diff --git a/ui/src/Components/ManagedSilence/SilenceComment.test.js b/ui/src/Components/ManagedSilence/SilenceComment.test.js
index c9aa463f2..b2de351fa 100644
--- a/ui/src/Components/ManagedSilence/SilenceComment.test.js
+++ b/ui/src/Components/ManagedSilence/SilenceComment.test.js
@@ -46,6 +46,7 @@ const MockMultipleClusters = () => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -57,6 +58,7 @@ const MockMultipleClusters = () => {
publicURI: "http://am2.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -68,6 +70,7 @@ const MockMultipleClusters = () => {
publicURI: "http://am3.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "second",
diff --git a/ui/src/Components/ManagedSilence/SilenceDetails.test.js b/ui/src/Components/ManagedSilence/SilenceDetails.test.js
index c711568ed..731581a16 100644
--- a/ui/src/Components/ManagedSilence/SilenceDetails.test.js
+++ b/ui/src/Components/ManagedSilence/SilenceDetails.test.js
@@ -37,7 +37,8 @@ beforeEach(() => {
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1"] }
diff --git a/ui/src/Components/ManagedSilence/index.stories.js b/ui/src/Components/ManagedSilence/index.stories.js
index e950a95e0..9733bc73f 100644
--- a/ui/src/Components/ManagedSilence/index.stories.js
+++ b/ui/src/Components/ManagedSilence/index.stories.js
@@ -33,7 +33,8 @@ storiesOf("ManagedSilence", module)
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1"] }
@@ -49,6 +50,7 @@ storiesOf("ManagedSilence", module)
publicURI: "http://example.com",
readonly: true,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ro",
diff --git a/ui/src/Components/ManagedSilence/index.test.js b/ui/src/Components/ManagedSilence/index.test.js
index ab299a74e..47b63fee9 100644
--- a/ui/src/Components/ManagedSilence/index.test.js
+++ b/ui/src/Components/ManagedSilence/index.test.js
@@ -36,7 +36,8 @@ beforeEach(() => {
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1"] }
@@ -99,7 +100,8 @@ describe("", () => {
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
});
});
@@ -115,7 +117,8 @@ describe("", () => {
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
},
{
name: "am2",
@@ -126,7 +129,8 @@ describe("", () => {
readonly: true,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1", "am2"] }
@@ -144,7 +148,8 @@ describe("", () => {
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
});
});
diff --git a/ui/src/Components/SilenceModal/AlertManagerInput/index.test.js b/ui/src/Components/SilenceModal/AlertManagerInput/index.test.js
index 71cf47468..e785859e0 100644
--- a/ui/src/Components/SilenceModal/AlertManagerInput/index.test.js
+++ b/ui/src/Components/SilenceModal/AlertManagerInput/index.test.js
@@ -29,6 +29,7 @@ beforeEach(() => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
@@ -40,6 +41,7 @@ beforeEach(() => {
publicURI: "http://am2.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
@@ -51,6 +53,7 @@ beforeEach(() => {
publicURI: "http://am3.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "am3",
diff --git a/ui/src/Components/SilenceModal/Browser/index.test.js b/ui/src/Components/SilenceModal/Browser/index.test.js
index 25ce5a651..b730efe59 100644
--- a/ui/src/Components/SilenceModal/Browser/index.test.js
+++ b/ui/src/Components/SilenceModal/Browser/index.test.js
@@ -39,7 +39,8 @@ beforeEach(() => {
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1"] }
diff --git a/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.js b/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.js
index 8a805db15..fe33d6beb 100644
--- a/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.js
+++ b/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.js
@@ -109,6 +109,7 @@ const SilenceSubmitProgress = observer(
this.submitState.fetch = FetchPost(`${am.uri}/api/v2/silences`, {
body: JSON.stringify(payload),
+ credentials: am.corsCredentials,
headers: {
"Content-Type": "application/json",
...am.headers
diff --git a/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.test.js b/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.test.js
index baf40f331..795020463 100644
--- a/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.test.js
+++ b/ui/src/Components/SilenceModal/SilenceSubmit/SilenceSubmitProgress.test.js
@@ -17,6 +17,7 @@ beforeEach(() => {
publicURI: "http://example.com",
readonly: false,
headers: { foo: "bar" },
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "mockAlertmanager",
@@ -80,6 +81,16 @@ describe("", () => {
});
});
+ it("uses CORS credentials from alertmanager config", async () => {
+ alertStore.data.upstreams.instances[0].corsCredentials = "same-site";
+ MountedSilenceSubmitProgress();
+ expect(fetch.mock.calls[0][0]).toBe("http://localhost/api/v2/silences");
+ expect(fetch.mock.calls[0][1]).toMatchObject({
+ credentials: "same-site",
+ method: "POST"
+ });
+ });
+
it("will retry on another cluster member after fetch failure", async () => {
fetch
.mockRejectOnce(new Error("mock error message"))
@@ -93,6 +104,7 @@ describe("", () => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
@@ -104,6 +116,7 @@ describe("", () => {
publicURI: "http://am2.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
@@ -151,6 +164,7 @@ describe("", () => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
@@ -198,6 +212,7 @@ describe("", () => {
publicURI: "http://am1.example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
@@ -209,6 +224,7 @@ describe("", () => {
publicURI: "http://am2.example.com",
readonly: true,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "ha",
diff --git a/ui/src/Components/SilenceModal/index.stories.js b/ui/src/Components/SilenceModal/index.stories.js
index abc9a6b21..ffe501cbf 100644
--- a/ui/src/Components/SilenceModal/index.stories.js
+++ b/ui/src/Components/SilenceModal/index.stories.js
@@ -49,6 +49,7 @@ storiesOf("SilenceModal", module)
publicURI: "http://example.com",
readonly: false,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -123,6 +124,7 @@ storiesOf("SilenceModal", module)
publicURI: "http://example.com",
readonly: true,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -190,7 +192,8 @@ storiesOf("SilenceModal", module)
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1"] }
@@ -253,7 +256,8 @@ storiesOf("SilenceModal", module)
readonly: false,
error: "",
version: "0.17.0",
- headers: {}
+ headers: {},
+ corsCredentials: "include"
}
],
clusters: { am: ["am1"] }
diff --git a/ui/src/Models/API.js b/ui/src/Models/API.js
index 7f4d5af63..5d7ff6dfd 100644
--- a/ui/src/Models/API.js
+++ b/ui/src/Models/API.js
@@ -71,6 +71,8 @@ const APIAlertmanagerUpstream = PropTypes.exact({
publicURI: PropTypes.string.isRequired,
readonly: PropTypes.bool.isRequired,
headers: PropTypes.object.isRequired,
+ corsCredentials: PropTypes.oneOf(["omit", "same-origin", "include"])
+ .isRequired,
error: PropTypes.string.isRequired,
version: PropTypes.string.isRequired,
clusterMembers: PropTypes.arrayOf(PropTypes.string).isRequired
diff --git a/ui/src/Stores/AlertStore.test.js b/ui/src/Stores/AlertStore.test.js
index f02cd8f62..2d3200567 100644
--- a/ui/src/Stores/AlertStore.test.js
+++ b/ui/src/Stores/AlertStore.test.js
@@ -32,6 +32,7 @@ describe("AlertStore.data", () => {
publicURI: "http://example.com:8080",
readonly: false,
headers: { foo: "bar" },
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -43,6 +44,7 @@ describe("AlertStore.data", () => {
publicURI: "http://example.com",
readonly: true,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -68,6 +70,7 @@ describe("AlertStore.data", () => {
publicURI: "http://example.com:8080",
readonly: true,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
@@ -79,6 +82,7 @@ describe("AlertStore.data", () => {
publicURI: "http://example.com",
readonly: true,
headers: {},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
cluster: "default",
diff --git a/ui/src/__mocks__/Alerts.js b/ui/src/__mocks__/Alerts.js
index 1244a7d4f..3937effda 100644
--- a/ui/src/__mocks__/Alerts.js
+++ b/ui/src/__mocks__/Alerts.js
@@ -74,6 +74,7 @@ const MockAlertmanager = () => ({
headers: {
Authorization: "Basic foo bar"
},
+ corsCredentials: "include",
error: "",
version: "0.17.0",
clusterMembers: ["default"]