feat(envelope-api.js): append envKey query parameter to all outgoing requests
Added automatic injection of the envKey query parameter into all request URLs within sendRequest. Updated URL handling to use the URL API, ensuring consistent parameter merging and preventing missing envKey issues.
This commit is contained in:
parent
8445757f34
commit
c75c2b1dd5
@ -1,106 +1,111 @@
|
|||||||
//#region parameters
|
//#region parameters
|
||||||
const env = Object.freeze({
|
const env = Object.freeze({
|
||||||
__lazyXsrfToken: new Lazy(() => document.getElementsByName('__RequestVerificationToken')[0].value),
|
__lazyXsrfToken: new Lazy(() => document.getElementsByName('__RequestVerificationToken')[0].value),
|
||||||
get xsrfToken() {
|
get xsrfToken() {
|
||||||
return this.__lazyXsrfToken.value;
|
return this.__lazyXsrfToken.value;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const url = Object.freeze({
|
const url = Object.freeze({
|
||||||
reject: `/api/annotation/reject`,
|
reject: `/api/annotation/reject`,
|
||||||
share: `/api/readonly`
|
share: `/api/readonly`
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region request helper methods
|
//#region request helper methods
|
||||||
function sendRequest(method, url, body = undefined) {
|
function sendRequest(method, url, body = undefined) {
|
||||||
const options = {
|
const urlObj = new URL(url, window.location.origin);
|
||||||
credentials: 'include',
|
if (!urlObj.searchParams.has("envKey")) {
|
||||||
method: method,
|
urlObj.searchParams.set("envKey", ENV_KEY);
|
||||||
headers: {
|
|
||||||
'X-XSRF-TOKEN': env.xsrfToken
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (body !== undefined) {
|
const options = {
|
||||||
options.body = JSON.stringify(body);
|
credentials: 'include',
|
||||||
options.headers['Content-Type'] = 'application/json';
|
method: method,
|
||||||
}
|
headers: {
|
||||||
|
'X-XSRF-TOKEN': env.xsrfToken
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return fetch(url, options);
|
if (body !== undefined) {
|
||||||
|
options.body = JSON.stringify(body);
|
||||||
|
options.headers['Content-Type'] = 'application/json';
|
||||||
|
}
|
||||||
|
|
||||||
|
return fetch(urlObj, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRequest(url) {
|
function getRequest(url) {
|
||||||
return sendRequest('GET', url);
|
return sendRequest('GET', url);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getJson(url) {
|
function getJson(url) {
|
||||||
return sendRequest('GET', url).then(res => {
|
return sendRequest('GET', url).then(res => {
|
||||||
if (res.ok)
|
if (res.ok)
|
||||||
return res.json();
|
return res.json();
|
||||||
throw new Error(`Request failed with status ${res.status}`);
|
throw new Error(`Request failed with status ${res.status}`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function postRequest(url, body = undefined) {
|
function postRequest(url, body = undefined) {
|
||||||
return sendRequest('POST', url, body);
|
return sendRequest('POST', url, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload() {
|
function reload() {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
function redirect(url) {
|
function redirect(url) {
|
||||||
window.location.href = url;
|
window.location.href = url;
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region envelope
|
//#region envelope
|
||||||
function signEnvelope(annotations) {
|
function signEnvelope(annotations) {
|
||||||
return postRequest(`/api/annotation`, annotations)
|
return postRequest(`/api/annotation`, annotations)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getAnnotationParams(leftInInch = 0, topInInch = 0, inchToPointFactor = 72) {
|
async function getAnnotationParams(leftInInch = 0, topInInch = 0, inchToPointFactor = 72) {
|
||||||
const annotParams = await getJson("/api/Config/Annotations");
|
const annotParams = await getJson("/api/Config/Annotations");
|
||||||
|
|
||||||
for (var key in annotParams) {
|
for (var key in annotParams) {
|
||||||
var annot = annotParams[key];
|
var annot = annotParams[key];
|
||||||
annot.width *= inchToPointFactor;
|
annot.width *= inchToPointFactor;
|
||||||
annot.height *= inchToPointFactor;
|
annot.height *= inchToPointFactor;
|
||||||
annot.left += leftInInch - 0.7;
|
annot.left += leftInInch - 0.7;
|
||||||
annot.left *= inchToPointFactor;
|
annot.left *= inchToPointFactor;
|
||||||
annot.top += topInInch - 0.5;
|
annot.top += topInInch - 0.5;
|
||||||
annot.top *= inchToPointFactor;
|
annot.top *= inchToPointFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
return annotParams;
|
return annotParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
function rejectEnvelope(reason) {
|
function rejectEnvelope(reason) {
|
||||||
return postRequest(url.reject, reason);
|
return postRequest(url.reject, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
function shareEnvelope(receiverMail, dateValid) {
|
function shareEnvelope(receiverMail, dateValid) {
|
||||||
return postRequest(url.share, { receiverMail: receiverMail, dateValid: dateValid });
|
return postRequest(url.share, { receiverMail: receiverMail, dateValid: dateValid });
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
async function setLanguage(language) {
|
async function setLanguage(language) {
|
||||||
const hasLang = await getJson('/api/localization/lang')
|
const hasLang = await getJson('/api/localization/lang')
|
||||||
.then(langs => langs.includes(language));
|
.then(langs => langs.includes(language));
|
||||||
|
|
||||||
if (hasLang)
|
if (hasLang)
|
||||||
postRequest(`/api/localization/lang/${language}`)
|
postRequest(`/api/localization/lang/${language}`)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (response.redirected)
|
if (response.redirected)
|
||||||
redirect(response.url);
|
redirect(response.url);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function logout() {
|
function logout() {
|
||||||
return postRequest(`/auth/logout`)
|
return postRequest(`/auth/logout`)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
if (res.ok)
|
if (res.ok)
|
||||||
window.location.href = "/";
|
window.location.href = "/";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1 +1 @@
|
|||||||
function sendRequest(n,t,i=undefined){const r={credentials:"include",method:n,headers:{"X-XSRF-TOKEN":env.xsrfToken}};return i!==undefined&&(r.body=JSON.stringify(i),r.headers["Content-Type"]="application/json"),fetch(t,r)}function getRequest(n){return sendRequest("GET",n)}function getJson(n){return sendRequest("GET",n).then(n=>{if(n.ok)return n.json();throw new Error(`Request failed with status ${n.status}`);})}function postRequest(n,t=undefined){return sendRequest("POST",n,t)}function reload(){window.location.reload()}function redirect(n){window.location.href=n}function signEnvelope(n){return postRequest(`/api/annotation`,n)}async function getAnnotationParams(n=0,t=0,i=72){var f,r;const u=await getJson("/api/Config/Annotations");for(f in u)r=u[f],r.width*=i,r.height*=i,r.left+=n-.7,r.left*=i,r.top+=t-.5,r.top*=i;return u}function rejectEnvelope(n){return postRequest(url.reject,n)}function shareEnvelope(n,t){return postRequest(url.share,{receiverMail:n,dateValid:t})}async function setLanguage(n){const t=await getJson("/api/localization/lang").then(t=>t.includes(n));t&&postRequest(`/api/localization/lang/${n}`).then(n=>{n.redirected&&redirect(n.url)})}function logout(){return postRequest(`/auth/logout`).then(n=>{n.ok&&(window.location.href="/")})}const env=Object.freeze({__lazyXsrfToken:new Lazy(()=>document.getElementsByName("__RequestVerificationToken")[0].value),get xsrfToken(){return this.__lazyXsrfToken.value}}),url=Object.freeze({reject:`/api/annotation/reject`,share:`/api/readonly`});
|
function sendRequest(n,t,i=undefined){const r=new URL(t,window.location.origin);r.searchParams.has("envKey")||r.searchParams.set("envKey",ENV_KEY);const u={credentials:"include",method:n,headers:{"X-XSRF-TOKEN":env.xsrfToken}};return i!==undefined&&(u.body=JSON.stringify(i),u.headers["Content-Type"]="application/json"),fetch(r,u)}function getRequest(n){return sendRequest("GET",n)}function getJson(n){return sendRequest("GET",n).then(n=>{if(n.ok)return n.json();throw new Error(`Request failed with status ${n.status}`);})}function postRequest(n,t=undefined){return sendRequest("POST",n,t)}function reload(){window.location.reload()}function redirect(n){window.location.href=n}function signEnvelope(n){return postRequest(`/api/annotation`,n)}async function getAnnotationParams(n=0,t=0,i=72){var f,r;const u=await getJson("/api/Config/Annotations");for(f in u)r=u[f],r.width*=i,r.height*=i,r.left+=n-.7,r.left*=i,r.top+=t-.5,r.top*=i;return u}function rejectEnvelope(n){return postRequest(url.reject,n)}function shareEnvelope(n,t){return postRequest(url.share,{receiverMail:n,dateValid:t})}async function setLanguage(n){const t=await getJson("/api/localization/lang").then(t=>t.includes(n));t&&postRequest(`/api/localization/lang/${n}`).then(n=>{n.redirected&&redirect(n.url)})}function logout(){return postRequest(`/auth/logout`).then(n=>{n.ok&&(window.location.href="/")})}const env=Object.freeze({__lazyXsrfToken:new Lazy(()=>document.getElementsByName("__RequestVerificationToken")[0].value),get xsrfToken(){return this.__lazyXsrfToken.value}}),url=Object.freeze({reject:`/api/annotation/reject`,share:`/api/readonly`});
|
||||||
Loading…
x
Reference in New Issue
Block a user