requests.js (3580B)
1 2 3 export default { 4 init, 5 login, 6 logout, 7 getServices, 8 postService, 9 deleteService, 10 getEvents, 11 deleteEvent, 12 } 13 14 /***** Login and authentication *****/ 15 16 var csrfToken; 17 18 function init(successHandler, errorHandler) { 19 request({ 20 url: "/init", 21 success: (data) => { 22 csrfToken = data.csrftoken; 23 if (successHandler) { 24 successHandler(data); 25 } 26 }, 27 error: errorHandler 28 }); 29 } 30 31 function login(passphrase, successHandler, errorHandler) { 32 request({ 33 url: "/login", 34 method: "POST", 35 data: { passphrase: passphrase }, 36 success: successHandler, 37 error: errorHandler 38 }); 39 } 40 41 function logout(successHandler, errorHandler) { 42 request({ 43 url: "/logout", 44 method: "POST", 45 success: successHandler, 46 error: errorHandler 47 }); 48 } 49 50 51 /***** Service management *****/ 52 53 function getServices(successHandler, errorHandler) { 54 request({ 55 url: "/services", 56 success: successHandler, 57 error: errorHandler 58 }); 59 } 60 61 function postService(service, successHandler, errorHandler) { 62 request({ 63 url: "/services", 64 method: "POST", 65 expectedStatus: 201, 66 data: service, 67 success: successHandler, 68 error: errorHandler 69 }); 70 } 71 72 function deleteService(id, successHandler, errorHandler) { 73 request({ 74 url: "/services/" + id, 75 method: "DELETE", 76 success: successHandler, 77 error: errorHandler 78 }); 79 } 80 81 /***** Event management *****/ 82 83 function getEvents(successHandler, errorHandler) { 84 request({ 85 url: "/events", 86 success: successHandler, 87 error: errorHandler 88 }); 89 } 90 91 function deleteEvent(id, successHandler, errorHandler) { 92 request({ 93 url: "/events/" + id, 94 method: "DELETE", 95 success: successHandler, 96 error: errorHandler 97 }); 98 } 99 100 101 102 /***** Request utils *****/ 103 104 // Send a request to server. Takes request description, jsonRequest, 105 // on the following format 106 // { 107 // url: "/services" , 108 // method: "POST", 109 // data: { "newId": 8234 } 110 // expectedStatus: 201, 111 // error: errData => { console.log(errData); }, 112 // success: successData => { console.log(successData); } 113 // } 114 function request(jsonRequest) { 115 if (!jsonRequest.url) { 116 console.error("No URL provided in the request object"); 117 return; 118 } 119 let xhttp = new XMLHttpRequest(); 120 xhttp.onreadystatechange = function() { 121 if (!jsonRequest.expectedStatus) { 122 jsonRequest.expectedStatus = 200 123 } 124 if (this.readyState === XMLHttpRequest.DONE) { 125 const data = this.responseText ? JSON.parse(this.responseText) : {}; 126 if (this.status !== jsonRequest.expectedStatus) { 127 if (jsonRequest.error) { 128 jsonRequest.error(this.status, data); 129 } else { 130 console.error(this.status + ": " + this.responseText); 131 } 132 } else if (jsonRequest.success) { 133 jsonRequest.success(data); 134 } 135 } 136 }; 137 if (jsonRequest.method) { 138 xhttp.open(jsonRequest.method, jsonRequest.url, true); 139 } else { 140 xhttp.open("GET", jsonRequest.url, true); 141 } 142 xhttp.setRequestHeader("X-Csrf-Token", csrfToken); 143 if (jsonRequest.data) { 144 xhttp.setRequestHeader("Content-Type", "application/json"); 145 xhttp.send(JSON.stringify(jsonRequest.data)); 146 } else { 147 xhttp.send(); 148 } 149 } 150