/** * Copyright© 2016, Oracle and/or its affiliates. All rights reserved. */ var KEY_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var HEADERS = { ORACLE_MOBILE_DIAGNOSTIC_SESSION_ID: "Oracle-Mobile-DIAGNOSTIC-SESSION-ID", ORACLE_MOBILE_DEVICE_ID: "Oracle-Mobile-DEVICE-ID", ORACLE_MOBILE_CLIENT_REQUEST_TIME: "Oracle-Mobile-CLIENT-REQUEST-TIME", ORACLE_MOBILE_NAME: "Oracle-Mobile-Name", ORACLE_MOBILE_CREATED_BY: "Oracle-Mobile-Created-By", ORACLE_MOBILE_CREATED_ON: "Oracle-Mobile-Created-On", ORACLE_MOBILE_MODIFIED_BY: "Oracle-Mobile-Modified-By", ORACLE_MOBILE_MODIFIED_ON: "Oracle-Mobile-Modified-On", ORACLE_MOBILE_SYNC_RESOURCE_TYPE: 'Oracle-Mobile-Sync-Resource-Type', ORACLE_MOBILE_SYNC_AGENT: "Oracle-Mobile-Sync-Agent", LOCATION: "Location", ORACLE_MOBILE_APPLICATION_KEY: "Oracle-Mobile-Application-Key", ORACLE_MOBILE_BACKEND_ID: "Oracle-Mobile-Backend-Id", ORACLE_MOBILE_SOCIAL_IDENTITY_PROVIDER: "Oracle-Mobile-Social-Identity-Provider", ORACLE_MOBILE_SOCIAL_ACCESS_TOKEN: "Oracle-Mobile-Social-Access-Token", ORACLE_MOBILE_CLIENT_SDK_INFO: "Oracle-Mobile-Client-SDK-Info", ACCEPT: "Accept", CONTENT_TYPE: "Content-Type", E_TAG: "ETag", IF_MATCH: "If-Match", AUTHORIZATION: "Authorization", X_USER_IDENTITY_DOMAIN_NAME: "X-USER-IDENTITY-DOMAIN-NAME" }; var ACCEPT_TYPES = { APPLICATION_JSON: "application/json", TEXT_PLAIN: "text/plain" }; var HTTP_METHODS = { GET: 'GET', PUT: 'PUT', PATCH: 'PATCH', POST: 'POST', DELETE: 'DELETE', HEAD: 'HEAD' }; var RESOURCE_TYPES = { ITEM: 'item', COLLECTION: 'collection', FILE: 'file' }; var AUTHENTICATION_TYPES = { BASIC: 'basicAuth', OAUTH: 'oAuth', SSO: 'ssoAuth', FACEBOOK: 'facebookAuth', TOKEN: 'tokenAuth' }; var MODULE_NAMES = { STORAGE: 'Storage', AUTHORIZATION: 'Authorization', USER_MANAGEMENT: 'UserManagement', APP_POLICES: 'AppPolicies', LOCATION: 'Location', SYNC: 'Sync', SYNC_EXPRESS: 'SyncExpress', NOTIFICATIONS: 'Notifications', MCS_ANALYTICS: 'MCSAnalytics',//Original Analytics API, since v1 of MCS ANALYTICS: 'Analytics',//CxA Analytics, new API in the Mobile Suite CUSTOM_CODE: 'CustomCode', APP_CONFIG: 'AppConfig' }; var PLATFORM_NAMES = { JAVASCRIPT: 'Javascript', CORDOVA: 'Cordova' }; function removeSpace(input) { return input.replace(/ /g, ''); } function Utils(){ this.HEADERS = HEADERS; this.RESOURCE_TYPES = RESOURCE_TYPES; this.HTTP_METHODS = HTTP_METHODS; this.ACCEPT_TYPES = ACCEPT_TYPES; this.AUTHENTICATION_TYPES = AUTHENTICATION_TYPES; this.MODULE_NAMES = MODULE_NAMES; this.PLATFORM_NAMES = PLATFORM_NAMES; } Utils.prototype.uuid = function() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); }; Utils.prototype.validateConfiguration = function (input) { var prop = input; if (/\s/.test(prop) && prop != undefined) { prop = removeSpace(input); } return prop; }; Utils.prototype.encodeBase64 = function (input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; do { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4); chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return output; }; Utils.prototype.decodeBase64 = function (input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = var base64test = /[^A-Za-z0-9\+\/\=]/g; if (base64test.exec(input)) { return null; } input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = KEY_STR.indexOf(input.charAt(i++)); enc2 = KEY_STR.indexOf(input.charAt(i++)); enc3 = KEY_STR.indexOf(input.charAt(i++)); enc4 = KEY_STR.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return output; }; Utils.prototype.hasValue = function (obj, key, value) { return obj.hasOwnProperty(key) && obj[key] === value; }; Utils.prototype.isEquivalentURL = function (url1, url2){ if(url1.indexOf("https") === 0 && url2.indexOf("https") === 0){ url1 = this.getPort(url1) === 443 ? url1.replace(':443', '') : url1; url2 = this.getPort(url2) === 443 ? url2.replace(':443', '') : url2; } else if(url1.indexOf("https") === -1 && url2.indexOf("https") === -1) { url1 = this.getPort(url1) === 80 ? url1.replace(':80', '') : url1; url2 = this.getPort(url2) === 80 ? url2.replace(':80', '') : url2; } return url1.indexOf(url2) === 0; }; Utils.prototype.getPort = function (url){ var colonIdx = url.indexOf(':', 7); var slashIdx = url.indexOf('/', colonIdx); if(colonIdx > 0 && slashIdx == -1){ slashIdx = url.length; } var port = url.substr(colonIdx + 1, slashIdx - colonIdx - 1); if(port && !isNaN(port*1)){ return port * 1; } else{ return -1; } }; Utils.prototype.parseHeaders = function (headerStr) { var headers = {}; if (!headerStr) { return headers; } var headerPairs = headerStr.split('\u000d\u000a'); for (var i = 0, ilen = headerPairs.length; i < ilen; i++) { var headerPair = headerPairs[i]; var index = headerPair.indexOf('\u003a\u0020'); if (index > 0) { headers[headerPair.substring(0, index).toLowerCase()] = headerPair.substring(index + 2); } } return headers; }; Utils.prototype.normalizeHeaderKeys = function (responseHeaders) { var headers = {}; // jasmin headers if(this.isArray(responseHeaders)){ for(var i = 0; i < responseHeaders.length; i++){ headers[responseHeaders[i].name.toLowerCase()] = responseHeaders[i].value; } } else { for (var key in responseHeaders) { if (responseHeaders.hasOwnProperty(key)) { headers[key.toLowerCase()] = responseHeaders[key]; } } } return headers; }; Utils.prototype.isArray = function (arg) { return Object.prototype.toString.call(arg) === '[object Array]'; };