Skip to content

Commit 2d12f4a

Browse files
insert anti-forgery checking in devextreme ajax
1 parent ea86016 commit 2d12f4a

File tree

6 files changed

+51
-9
lines changed

6 files changed

+51
-9
lines changed

apps/demos/Demos/FileUploader/FileUploading/Angular/app/app.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { bootstrapApplication } from '@angular/platform-browser';
2+
import 'anti-forgery';
23
import { Component, enableProdMode, Pipe, PipeTransform, provideZoneChangeDetection } from '@angular/core';
34
import { DxCheckBoxModule, DxFileUploaderModule, DxSelectBoxModule } from 'devextreme-angular';
45

apps/demos/Demos/FileUploader/FileUploading/React/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3+
import 'anti-forgery';
34

45
import App from './App.tsx';
56

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { createApp } from 'vue';
2+
import 'anti-forgery';
23
import App from './App.vue';
34

45
createApp(App).mount('#app');

apps/demos/Demos/FileUploader/FileUploading/jQuery/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script src="../../../../node_modules/jquery/dist/jquery.min.js"></script>
99
<link rel="stylesheet" type="text/css" href="../../../../node_modules/devextreme-dist/css/dx.light.css" />
1010
<script src="../../../../node_modules/devextreme-dist/js/dx.all.js"></script>
11+
<script src="/shared/anti-forgery/jquery.js"></script>
1112
<link rel="stylesheet" type="text/css" href="styles.css" />
1213
<script src="index.js"></script>
1314
</head>

apps/demos/shared/anti-forgery/frameworks.js

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
import ajax from 'devextreme/core/utils/ajax';
2+
import { Deferred } from 'devextreme/core/utils/deferred';
23

34
const sendRequestOrig = ajax.sendRequest;
45
const fetchOrig = fetch;
56
const BASE_PATH = 'https://js.devexpress.com/Demos/NetCore';
67

7-
ajax.sendRequest = (options) => {
8-
options.xhrFields = {
9-
withCredentials: true,
10-
};
11-
12-
return sendRequestOrig(options);
13-
};
14-
158
async function fetchAntiForgeryToken() {
169
try {
1710
const response = await fetchOrig(`${BASE_PATH}/api/Common/GetAntiForgeryToken`, {
@@ -49,6 +42,35 @@ async function getAntiForgeryTokenValue() {
4942
return tokenData;
5043
}
5144

45+
ajax.sendRequest = (options) => {
46+
const deferred = new Deferred();
47+
48+
getAntiForgeryTokenValue().then(({ headerName, token }) => {
49+
options.headers = {
50+
[headerName]: token,
51+
...(options.headers || {})
52+
};
53+
54+
options.xhrFields = {
55+
withCredentials: true,
56+
};
57+
58+
sendRequestOrig(options).then(
59+
(result) => {
60+
deferred.resolve(result);
61+
if (result.success) {
62+
deferred.resolve(result);
63+
} else {
64+
deferred.reject(result);
65+
}
66+
},
67+
(e) => deferred.reject(e),
68+
);
69+
})
70+
71+
return deferred.promise();
72+
};
73+
5274
window.fetch = async (url, options = {}) => {
5375
const { headerName, token } = await getAntiForgeryTokenValue();
5476

apps/demos/shared/anti-forgery/jquery.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
/* global $ */
1+
/* global $, DevExpress */
22
const orig$ = $;
3+
const ajaxSendRequestOrig = DevExpress.utils.ajax.sendRequest;
34

45
function fetchAntiForgeryToken() {
56
const d = orig$.Deferred();
@@ -50,11 +51,26 @@ async function setAntiForgery() {
5051
} else {
5152
options.url = url;
5253
}
54+
5355
options.headers = { [tokenData.headerName]: tokenData.token, ...(options.headers || {}) };
5456
options.xhrFields = { withCredentials: true, ...(options.xhrFields || {}) };
5557

5658
return originalAjax.call(this, options);
5759
};
60+
61+
DevExpress.utils.ajax.sendRequest = (options) => {
62+
options.headers = {
63+
[tokenData.headerName]: tokenData.token,
64+
...(options.headers || {})
65+
};
66+
67+
options.xhrFields = {
68+
withCredentials: true,
69+
...(options.xhrFields || {})
70+
};
71+
72+
return ajaxSendRequestOrig(...args);
73+
}
5874
}
5975

6076
// eslint-disable-next-line no-global-assign

0 commit comments

Comments
 (0)