Advertisement
Guest User

Untitled

a guest
Jun 30th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Util
  3.  *
  4.  * @constructor
  5.  */
  6. var APIClient = function($http, UserManager)
  7. {
  8.     this.userManager = UserManager;
  9.  
  10.     this.tokenUrl = AppSettings.baseApiUrl + '/oauth/v2/token';
  11.     this.clientId = AppSettings.clientId;
  12.     this.clientSecret = AppSettings.clientSecret;
  13.  
  14.     this.accessTokenKey = 'access_token';
  15.     this.refreshTokenKey = 'refresh_token';
  16.     this.expireTokenKey = 'expires_in';
  17.  
  18.     var that = this;
  19.  
  20.     /**
  21.      *
  22.      * @param {{method:{string}, url:{string}, headers:{}, data:{}, success:function({}, int), error:function({}, int), oauth:{boolean}}} customerData
  23.      */
  24.     this.send = function(customerData)
  25.     {
  26.         var data = {
  27.             method: 'GET',
  28.             url: null,
  29.             headers: {
  30.                 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  31.             },
  32.             data: {},
  33.             file: null,
  34.             success: function(){},
  35.             error: function(){},
  36.             oauth: false
  37.         };
  38.  
  39.         for (var attrName in customerData) {
  40.             if (customerData.hasOwnProperty(attrName)) {
  41.                 data[attrName] = customerData[attrName];
  42.             }
  43.         }
  44.  
  45.         var successCallback = data.success;
  46.         var errorCallback = data.error;
  47.  
  48.         var oAuthStatus = 1;
  49.  
  50.         if (data.oauth) {
  51.             oAuthStatus = 0;
  52.             this.getToken(function(success, message){
  53.                 if (success) {
  54.                     data.url = that.setGetParameter(
  55.                         data.url,
  56.                         that.accessTokenKey,
  57.                         message
  58.                     );
  59.                     oAuthStatus = 1;
  60.                 } else {
  61.                     errorCallback(message);
  62.                     oAuthStatus = 2;
  63.                 }
  64.             });
  65.         }
  66.  
  67.         var intvl = setInterval(function() {
  68.             if (oAuthStatus != 0) {
  69.                 clearInterval(intvl);
  70.  
  71.                 if (oAuthStatus == 1) {
  72.                     if (data.file !== null) {
  73.                         sendFile(data, successCallback, errorCallback);
  74.                     } else {
  75.  
  76.                         var tmpData = '';
  77.                         for (var key in data.data) {
  78.                             if (data.data.hasOwnProperty(key)) {
  79.                                 data.url = that.setGetParameter(data.url, key, data.data[key]);
  80.                             }
  81.                         }
  82.  
  83.                         if (data.method !== 'GET') {
  84.                             data.data = tmpData.substring(1);
  85.                         } else {
  86.                             data.data = {};
  87.                         }
  88.  
  89.                         sendRequest(data, successCallback, errorCallback);
  90.                     }
  91.                 }
  92.             }
  93.         }, 100);
  94.     };
  95.  
  96.     /**
  97.      *
  98.      * @param {function(boolean, {})} callback
  99.      */
  100.     this.getToken = function(callback)
  101.     {
  102.         if (!this.isToken()) {
  103.             this.loadToken(function(success, data){
  104.                 if (success) {
  105.                     callback(true, that.getAccessToken());
  106.                 } else {
  107.                     callback(false, data);
  108.                 }
  109.             });
  110.         }else if (this.isTokenExpired()) {
  111.             this.refreshToken(function(success, data){
  112.                 if (success) {
  113.                     callback(true, this.getAccessToken());
  114.                 } else {
  115.                     callback(false, data);
  116.                 }
  117.             });
  118.         } else {
  119.             callback(true, this.getAccessToken());
  120.         }
  121.     };
  122.  
  123.     /**
  124.      *
  125.      * @param {function(boolean, data)} callback
  126.      */
  127.     this.loadToken = function(callback)
  128.     {
  129.         if (!this.userManager.isCurrent()) {
  130.             throw {
  131.                 key: 'api_client_user_not_found',
  132.                 message: 'User not found'
  133.             }
  134.         }
  135.  
  136.         var user = this.userManager.getCurrent();
  137.  
  138.         this.send({
  139.             method: 'GET',
  140.             url: this.tokenUrl,
  141.             data: {
  142.                 client_id: this.clientId,
  143.                 client_secret: this.clientSecret,
  144.                 username: user.getUsername(),
  145.                 password: user.getPassword(),
  146.                 grant_type: 'password'
  147.             },
  148.             success: function (data) {
  149.                 that.updateToken(data);
  150.                 callback(true, data);
  151.             },
  152.             error: function (data) {
  153.                 callback(false, data)
  154.             }
  155.         });
  156.     };
  157.  
  158.     /**
  159.      *
  160.      * @param {function(boolean, {})} callback
  161.      */
  162.     this.refreshToken = function(callback)
  163.     {
  164.         if (!this.userManager.isCurrent()) {
  165.             throw {
  166.                 key: 'api_client_user_not_found',
  167.                 message: 'User not found'
  168.             }
  169.         }
  170.  
  171.         this.send({
  172.             method: 'GET',
  173.             url: this.tokenUrl,
  174.             data: {
  175.                 client_id: this.clientId,
  176.                 client_secret: this.clientSecret,
  177.                 refresh_token: this.getRefreshToken(),
  178.                 grant_type: 'refresh_token'
  179.             },
  180.             success: function (data) {
  181.                 that.updateToken(data);
  182.                 callback(true, data)
  183.             },
  184.             error: function (data) {
  185.                 callback(false, data)
  186.             }
  187.         });
  188.     };
  189.  
  190.     /**
  191.      *
  192.      * @param {{access_token:{string}, refresh_token:{string}, expires_in:{string}}} data
  193.      */
  194.     this.updateToken = function(data)
  195.     {
  196.         window.localStorage.setItem(this.accessTokenKey, data[this.accessTokenKey]);
  197.         window.localStorage.setItem(this.refreshTokenKey, data[this.refreshTokenKey]);
  198.  
  199.         var t = new Date();
  200.         t.setSeconds(t.getSeconds() + data[this.expireTokenKey]);
  201.  
  202.         window.localStorage.setItem(this.expireTokenKey, t.getTime());
  203.     };
  204.  
  205.     /**
  206.      * Clear api tokens
  207.      */
  208.     this.clearToken = function()
  209.     {
  210.         window.localStorage.removeItem(this.accessTokenKey);
  211.         window.localStorage.removeItem(this.refreshTokenKey);
  212.         window.localStorage.removeItem(this.expireTokenKey);
  213.     };
  214.  
  215.     /**
  216.      *
  217.      * @returns string
  218.      */
  219.     this.getAccessToken = function()
  220.     {
  221.         return window.localStorage.getItem(this.accessTokenKey);
  222.     };
  223.  
  224.     /**
  225.      *
  226.      * @returns string
  227.      */
  228.     this.getRefreshToken = function()
  229.     {
  230.         return window.localStorage.getItem(this.refreshToken);
  231.     };
  232.  
  233.     /**
  234.      *
  235.      * @returns string
  236.      */
  237.     this.getTokenExpiration = function()
  238.     {
  239.         return window.localStorage.getItem(this.expireTokenKey);
  240.     };
  241.  
  242.     /**
  243.      *
  244.      * @returns {boolean}
  245.      */
  246.     this.isToken = function()
  247.     {
  248.         return null !== this.getAccessToken();
  249.     };
  250.  
  251.     /**
  252.      *
  253.      * @returns {boolean}
  254.      */
  255.     this.isTokenExpired = function()
  256.     {
  257.         var t = new Date;
  258.  
  259.         return t.getTime() > this.getTokenExpiration()
  260.     };
  261.  
  262.     /**
  263.      *
  264.      * @param {string} url
  265.      * @param {string} paramName
  266.      * @param {string} paramValue
  267.      * @returns {string}
  268.      */
  269.     this.setGetParameter = function(url, paramName, paramValue)
  270.     {
  271.         if (url.indexOf(paramName + "=") >= 0)
  272.         {
  273.             var prefix = url.substring(0, url.indexOf(paramName));
  274.             var suffix = url.substring(url.indexOf(paramName));
  275.             suffix = suffix.substring(suffix.indexOf("=") + 1);
  276.             suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
  277.             url = prefix + paramName + "=" + paramValue + suffix;
  278.         }
  279.         else
  280.         {
  281.             if (url.indexOf("?") < 0)
  282.                 url += "?" + paramName + "=" + paramValue;
  283.             else
  284.                 url += "&" + paramName + "=" + paramValue;
  285.         }
  286.         return url;
  287.     };
  288.  
  289.     function sendRequest(data, successCallback, errorCallback) {
  290.         $http({
  291.             method: data.method,
  292.             url: data.url,
  293.             headers: data.headers,
  294.             data: data.data
  295.         }).success(function(data, status){
  296.             successCallback(data, status);
  297.         }).error(function(data, status){
  298.             errorCallback(data, status);
  299.         });
  300.     }
  301.  
  302.     function sendFile(data, successCallback, errorCallback) {
  303.  
  304.         var options = new FileUploadOptions();
  305.         options.fileKey="file";
  306.         options.fileName="file";
  307.         options.params = data.data;
  308.  
  309.         var ft = new FileTransfer();
  310.         ft.upload(data.file, data.url, uploadSuccess, uploadError, options);
  311.         function uploadSuccess(r) {
  312.             result = JSON.parse(r.response);
  313.             successCallback(result, true);
  314.         }
  315.         function uploadError(error) {
  316.             errorCallback(error, true)
  317.         }
  318.     }
  319.  
  320. };
  321.  
  322. angular.module('api.client', []).factory('APIClient', ['$http', 'UserManager', function($http, UserManager)
  323. {
  324.     var client = new APIClient($http, UserManager);
  325.  
  326.     return {
  327.         send: function(data)
  328.         {
  329.             return client.send(data);
  330.         },
  331.         clearToken: function()
  332.         {
  333.             client.clearToken();
  334.         }
  335.     }
  336.  
  337. }]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement