Plugins/HttpsProxy/datajs-https-proxy.js

1       // it is depending on Datajs.js and httpsproxy.js
2       /*
3        * Sybase Hybrid App version 2.3.4
4        * Sybase datajs integration with PhoneGap HTTPS proxy
5        *
6        * datajs-https-proxy.js
7        * This file will not be regenerated, so it is possible to modify it, but it
8        * is not recommended.
9        *
10       * Copyright (c) 2013 Sybase Inc. All rights reserved.
11       */
12       
13      
14      /** 
15       * The namespace for HTTP(S) proxy 
16       * @namespace 
17       */
18      HttpsConnection = (typeof HttpsConnection === "undefined" || !HttpsConnection) ? {} : HttpsConnection;      // 'namespace'
19      
20      (function(HttpsConnection, window, undefined) {
21      
22         /**
23           * Generate an OData HttpClient object over https proxy of native platform.
24           * 
25           * This object will re-direct all odata request to the http proxy because even with HTTP connection, there are
26           * are some known issue by default setting since the application in device is cross server accessing the odata service.
27           * See: http://datajs.codeplex.com/discussions/396112 for details of the issue.
28           *
29           * Call this method normally on HTML page load event to replace the default odata HTTP client.
30           * @memberOf HttpsConnection
31           * @public
32           * @example
33           *  // Call datajs api without certificate, users could call just as normal by passing 
34           *  // URL as first argument
35           *  var length = 0;
36           *  var updateUri = server + "/example.svc/Categories(1)";
37           *  
38           *  OData.read(server + "/example.svc/Categories",
39           *  function (data, response) {
40           *      alert("length " + data.results.length);
41           *      length = data.results.length;
42           *      if ( length > 0 ) 
43           * {
44           *          var updateRequest = {
45           *              requestUri: updateUri,
46           *              method: "PUT",
47           *              data: 
48           * { 
49           *                  Picture: new Date().getTime(),
50           *                  Description: "Update Record",
51           *                  CategoryName: "Updated Category",
52           *                  CategoryID: 1
53           *              }
54           *          };
55           *  
56           *          OData.request(updateRequest, 
57           *              function (data, response) {
58           *                  alert("Response " + JSON.stringify(response));
59           *              },
60           *              function (err) {
61           *                  alert("Error occurred " + err.message);
62           *              }
63           *          );
64           *      };     
65           *  },
66           *  function (err) {
67           *      alert("Error occurred " + err.message);
68           *  });
69           *
70           *  // However, to specify certificate source in the method call, users need to pass in 
71           *  // the request object instead of URL,
72           *  // and add the field "certificateSource" to the request object.
73            *  var length = 0;
74           *  var updateUri = server + "/example.svc/Categories(1)";
75           *  
76           *  OData.read({ requestUri: server + "/example.svc/Categories", certificateSource : cert},
77           *  function (data, response) {
78           *      alert("length " + data.results.length);
79           *      length = data.results.length;
80           *      if ( length > 0 ) 
81           * {
82           *          var updateRequest = {
83           *              requestUri: updateUri,
84           *              certificateSource : cert,
85           *              method: "PUT",
86           *              data: 
87           * { 
88           *                  Picture: new Date().getTime(),
89           *                  Description: "Update Record",
90           *                  CategoryName: "Updated Category",
91           *                  CategoryID: 1
92           *              }
93           *          };
94           *  
95           *          OData.request(updateRequest, 
96           *              function (data, response) {
97           *                  alert("Response " + JSON.stringify(response));
98           *              },
99           *              function (err) {
100          *                  alert("Error occurred " + err.message);
101          *              }
102          *          );
103          *      };     
104          *  },
105          *  function (err) {
106          *      alert("Error occurred " + err.message);
107          *  });
108           */
109         HttpsConnection.generateODataHttpClient = function () {
110             if ( HttpsConnection.sendRequest && !OData.defaultHttpClient.HttpsConnectionWrapper) {
111                 OData.defaultHttpClient = {
112                     HttpsConnectionWrapper: true,
113                     request: function (request, success, error) {
114                         var url, requestHeaders, requestBody, statusCode, statusText, responseHeaders;
115                         var responseBody, requestTimeout, requestUserName, requestPassword, requestCertificate;
116                         var client, result;
117     
118                         url = request.requestUri;
119                         requestHeaders = request.headers;
120                         requestBody = request.body;
121                         
122                         var successCB = function( data ) {
123                             var response = { 
124                                 requestUri: url, 
125                                 statusCode: data.status, 
126                                 statusText: data.status, 
127                                 headers: data.headers, 
128                                 body: (data.responseText ? data.responseText : data.responseBase64)
129                             };
130                             
131                             if (response.statusCode >= 200 && response.statusCode <= 299) {
132                                 if ( success ) {
133                                    success(response);
134                                 }
135                             } else {
136                                 if ( error ) {
137                                    error({ message: "HTTP request failed", request: request, response: response });
138                                 }
139                             }
140                         };
141     
142                         var errorCB = function( data ) {    
143                             if ( error ) {
144                                 error({message: data});
145                             }
146                         };
147                         
148                         if ( request.timeoutMS ) {
149                            requestTimeout = request.timeoutMS / 1000;
150                         }
151                         
152                         if ( request.certificateSource ) {
153                            requestCertificate = request.certificateSource;
154                         }
155                         
156                         if ( request.user ) {
157                            requestUserName = request.user;
158                         }
159                         
160                         if ( request.password ) {
161                            requestPassword = request.password;
162                         }
163                         
164                         client = HttpsConnection.sendRequest(request.method || "GET", url, requestHeaders, requestBody, successCB, errorCB, requestUserName, requestPassword, requestTimeout, requestCertificate );
165     
166                         result = {};                    
167                         result.abort = function () {
168                             client.abort();   
169                             
170                             if ( error )    {
171                                 error({ message: "Request aborted" });
172                             }
173                         };
174                         return result;
175                     }
176                 };
177             }
178         };
179             
180     })(HttpsConnection, window);
181