client/src/api/APIClient.js
changeset 62 b2514a9bcd49
child 83 76a4e4b11762
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/api/APIClient.js	Tue Jun 20 14:13:15 2017 +0200
@@ -0,0 +1,80 @@
+class APIClient {
+  constructor(baseURL) {
+    this.baseURL = baseURL;
+  }
+
+  setStore = (store) => {
+    this.store = store;
+  }
+
+  createRequest = (method, uri, data, headers) => {
+
+    headers = headers || new Headers();
+    headers.append("Content-Type", "application/json");
+
+    var options = {
+      method: method,
+      headers: headers,
+    };
+
+    if (data) {
+      options.body = JSON.stringify(data);
+    }
+
+    // TODO : use URL-module to build URL
+    return new Request(this.baseURL + uri, options);
+  }
+
+  getToken = () => {
+    const state = this.store.getState();
+    return state['token'];
+  }
+
+  hasToken = () => {
+    const token = this.getToken();
+
+    return token !== null && token !== '';
+  }
+
+  createAuthorizedRequest = (method, uri, data) => {
+
+    var headers = new Headers(),
+        token = this.getToken() || '';
+    headers.append("Authorization", "JWT " + token);
+
+    return this.createRequest(method, uri, data, headers);
+  }
+
+  request = (method, uri, data) => {
+    console.log(method + ' ' + uri);
+    var req = this.hasToken() ? this.createAuthorizedRequest(method, uri, data) : this.createRequest(method, uri, data);
+    return this.fetch(req, { credentials: 'include' });
+  }
+
+  get = (uri, data) => {
+    return this.request('GET', uri, data);
+  }
+
+  post = (uri, data) => {
+    return this.request('POST', uri, data);
+  }
+
+  put = (uri, data) => {
+    return this.request('PUT', uri, data);
+  }
+
+  fetch = (req) => {
+    return new Promise((resolve, reject) => {
+      fetch(req)
+        .then((response) => {
+          if (response.ok) {
+            return response.json().then((data) => resolve(data));
+          } else {
+            return response.json().then((data) => reject(data));
+          }
+        });
+    });
+  }
+}
+
+export default APIClient