client/src/api/APIClient.js
changeset 129 d48946d164c6
parent 97 69eaef18b01b
child 134 be36eed5e6e0
equal deleted inserted replaced
128:34a75bd8d0b9 129:d48946d164c6
       
     1 import qs from 'qs';
       
     2 
     1 class APIClient {
     3 class APIClient {
     2   constructor(baseURL) {
     4   constructor(baseURL) {
     3     this.baseURL = baseURL;
     5     this.baseURL = baseURL;
     4   }
     6   }
     5 
     7 
    20     var options = {
    22     var options = {
    21       method: method,
    23       method: method,
    22       headers: headers,
    24       headers: headers,
    23     };
    25     };
    24 
    26 
       
    27     let queryparams = '';
    25     if (data) {
    28     if (data) {
    26       options.body = JSON.stringify(data);
    29       if(method !== 'HEAD' && method !== 'GET' && data) {
       
    30         options.body = JSON.stringify(data);
       
    31       }
       
    32       else {
       
    33         queryparams = "?"+qs.stringify(data);
       
    34       }
    27     }
    35     }
    28 
    36 
    29     // TODO : use URL-module to build URL
    37     // TODO : use URL-module to build URL
    30     return new Request(this.baseURL + uri, options);
    38     return new Request(this.baseURL + uri + queryparams, options);
    31   }
    39   }
    32 
    40 
    33   getToken = () => {
    41   getToken = () => {
    34     const state = this.store.getState();
    42     const state = this.store.getState();
    35     return state['token'];
    43     return state.getIn(['authStatus', 'token']);
       
    44   }
       
    45 
       
    46   getClientId = () => {
       
    47     const state = this.store.getState();
       
    48     return state.getIn(['authStatus', 'clientId']);
    36   }
    49   }
    37 
    50 
    38   hasToken = () => {
    51   hasToken = () => {
    39     const token = this.getToken();
    52     const token = this.getToken();
    40 
    53 
    41     return token !== null && token !== '';
    54     return token !== null && token !== '';
    42   }
    55   }
    43 
    56 
    44   createAuthorizedRequest = (method, uri, data) => {
    57   hasClientId = () => {
       
    58     const clientId = this.getClientId();
       
    59     return clientId !== null && clientId !== '';
       
    60   }
    45 
    61 
    46     var headers = new Headers(),
    62   createAuthorizedHeader = (headers) => {
    47         token = this.getToken() || '';
    63     const token = this.getToken() || '';
    48     headers.append("Authorization", "JWT " + token);
    64     headers.append("Authorization", "JWT " + token);
       
    65     return headers;
       
    66   }
    49 
    67 
    50     return this.createRequest(method, uri, data, headers);
    68   createClientIdHeader = (headers) => {
       
    69     const clientId = this.getClientId() || '';
       
    70     headers.append("Auditlog-Client", clientId);
       
    71     return headers;
    51   }
    72   }
    52 
    73 
    53   request = (method, uri, data) => {
    74   request = (method, uri, data) => {
    54     var req = this.hasToken() ? this.createAuthorizedRequest(method, uri, data) : this.createRequest(method, uri, data);
    75     var headers = new Headers();
       
    76     if(this.hasToken()) {
       
    77       headers = this.createAuthorizedHeader(headers);
       
    78     }
       
    79     if(this.hasClientId()) {
       
    80       headers = this.createClientIdHeader(headers);
       
    81     }
       
    82     var req = this.createRequest(method, uri, data, headers);
    55     return this.fetch(req, { credentials: 'include' });
    83     return this.fetch(req, { credentials: 'include' });
    56   }
    84   }
    57 
    85 
    58   get = (uri, data) => {
    86   get = (uri, data) => {
    59     return this.request('GET', uri, data);
    87     return this.request('GET', uri, data);
    63     return this.request('POST', uri, data);
    91     return this.request('POST', uri, data);
    64   }
    92   }
    65 
    93 
    66   put = (uri, data) => {
    94   put = (uri, data) => {
    67     return this.request('PUT', uri, data);
    95     return this.request('PUT', uri, data);
       
    96   }
       
    97 
       
    98   delete = (uri, data) => {
       
    99     return this.request('DELETE', uri, data);
    68   }
   100   }
    69 
   101 
    70   fetch = (req) => {
   102   fetch = (req) => {
    71     return new Promise((resolve, reject) => {
   103     return new Promise((resolve, reject) => {
    72       fetch(req)
   104       fetch(req)
    85               });
   117               });
    86             }
   118             }
    87             return resJsonPromise.then(data => resolve(data));
   119             return resJsonPromise.then(data => resolve(data));
    88 
   120 
    89           } else {
   121           } else {
    90             return response.json().then(data => reject(data));
   122             let errorResp = {
       
   123               status: response.status,
       
   124               statusText: response.statusText
       
   125             }
       
   126             return response.json().then(data => reject({...errorResp,data }));
    91           }
   127           }
    92         })
   128         })
    93         .catch((error) => {
   129         .catch((error) => {
    94           reject({error});
   130           reject({error});
    95         });
   131         });