403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/yandex.market/ui/input/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/yandex.market/ui/input/tokenrefresh.js
(function(BX, window) {

	var constructor;
	var Plugin = BX.namespace('YandexMarket.Plugin');
	var Input = BX.namespace('YandexMarket.Ui.Input');

	Input.TokenRefresh = constructor = Plugin.Base.extend({

		defaults: {
			authUrl: null,
			refreshUrl: null,
			exchangeUrl: null,
			popupWidth: 600,
			popupHeight: 600,

			authMethod: 'yaMarketAuth',
			scope: null,

			oauthClientIdElement: 'input[name="OAUTH_CLIENT_ID"]',
			oauthClientPasswordElement: 'input[name="OAUTH_CLIENT_PASSWORD"]',

			inputElement: 'select',
			optionElement: 'option',

			lang: {},
			langPrefix: 'YANDEX_MARKET_USER_FIELD_TOKEN_'
		},

		initVars: function() {
			this._handledWindowMessage = false;
		},

		initialize: function() {
			this.bind();
		},

		destroy: function() {
			this.unbind()
		},

		bind: function() {
			this.handleClick(true);
			this.handleClientIdChange(true);
		},

		unbind: function() {
			this.handleClick(false);
			this.handleClientIdChange(false);
			this.handleWindowMessage(false);
		},

		handleClick: function(dir) {
			this.$el[dir ? 'on' : 'off']('click', $.proxy(this.onClick, this));
		},

		handleClientIdChange: function(dir) {
			var input = this.getFormInput('oauthClientId');

			if (input) {
				input[dir ? 'on' : 'off']('change', $.proxy(this.onClientIdChange, this));
			}
		},

		handleWindowMessage: function(dir) {
			if (this._handledWindowMessage === dir) { return; }

			this._handledWindowMessage = dir;
			$(window)[dir ? 'on' : 'off']('message', $.proxy(this.onWindowMessage, this));
		},

		onClick: function() {
			this.handleWindowMessage(true);
			this.openAuthWindow();
		},

		onClientIdChange: function() {
			this.refresh();
		},

		onWindowMessage: function(proxyEvent) {
			var evt = proxyEvent.originalEvent;
			var response = evt.data;

			if (typeof response === 'object' && response != null && response.method === this.options.authMethod) {
				if (response.result) {
					this.exchangeCode(response.code);
				}

				this.handleWindowMessage(false);
			}
		},

		openAuthWindow: function() {
			var authUrl = this.getAuthUrl();

			return BX.util.popup(authUrl, this.options.popupWidth, this.options.popupHeight);
		},

		getAuthUrl: function() {
			var url = this.options.authUrl;

			url = url.replace('OAUTH_CLIENT_ID_HOLDER', this.getOauthClientId());
			url = url.replace('OAUTH_SCOPE_HOLDER', this.options.scope);

			return url;
		},

		refresh: function() {
			var clientId = this.getOauthClientId();

			if (clientId == null || clientId === '') {
				this.refreshInput([]);
			} else {
				BX.ajax({
					url: this.options.refreshUrl,
					method: 'POST',
					data: {
						CLIENT_ID: clientId,
						SCOPE: this.options.scope
					},
					dataType: 'json',
					onsuccess: $.proxy(this.refreshEnd, this)
				});
			}
		},

		refreshEnd: function(response) {
			if (!response || response.status !== 'ok') {
				alert(this.getLang('REFRESH_FAIL', { 'MESSAGE': response ? response.message : '' }));
			} else {
				this.refreshInput(response.enum);
			}
		},

		exchangeCode: function(code) {
			BX.ajax({
				url: this.options.exchangeUrl,
				method: 'POST',
				data: {
					CODE: code,
					SCOPE: this.options.scope,
					CLIENT_ID: this.getOauthClientId(),
					CLIENT_PASSWORD: this.getOauthClientPassword()
				},
				dataType: 'json',
				onsuccess: $.proxy(this.exchangeCodeEnd, this),
				onfailure: $.proxy(this.exchangeCodeStop, this)
			});
		},

		exchangeCodeStop: function(status) {
			alert(this.getLang('EXCHANGE_CODE_FAIL', { 'STATUS': status }));
		},

		exchangeCodeEnd: function(response) {
			if (response && response.status === 'ok') {
				this.updateInput(response.token);
			} else {
				alert(response && response.message || this.getLang('UNDEFINED_ERROR'));
			}
		},

		refreshInput: function(values) {
			var input = this.getInput();
			var optionList = this.getElement('option', input);
			var optionIndex;
			var option;
			var valueIndex;
			var value;
			var existValueIds = [];

			// create new

			for (valueIndex = 0; valueIndex < values.length; valueIndex++) {
				value = values[valueIndex];
				option = this.searchTokenOption(optionList, value.ID);

				if (option == null) {
					option = this.createTokenOption(input, value);
				}

				if (valueIndex === 0 && input.val() === '') {
					this.selectOption(input, option);
				}

				existValueIds.push(value.ID);
			}

			// delete non-exists

			for (optionIndex = 0; optionIndex < optionList.length; optionIndex++) {
				option = optionList[optionIndex];

				if (option.value !== '' && existValueIds.indexOf(option.value) === -1) {
					option.parentElement.removeChild(option);
				}
			}
		},

		updateInput: function(token) {
			var input = this.getInput();
			var optionList = this.getElement('option', input);
			var option = this.searchTokenOption(optionList, token.ID);

			if (option == null) {
				option = this.createTokenOption(input, token);
			}

			this.selectOption(input, option);
		},

		searchTokenOption: function(optionList, tokenId) {
			var option;
			var optionValue;
			var i;
			var result = null;

			tokenId = ('' + tokenId);

			for (i = 0; i < optionList.length; i++) {
				option = optionList[i];
				optionValue = ('' + option.value);

				if (optionValue === tokenId) {
					result = option;
					break;
				}
			}

			return result;
		},

		createTokenOption: function(input, token) {
			var option = document.createElement('option');

			option.value = token.ID;
			option.innerText = token.VALUE;

			input.append(option);

			return option;
		},

		selectOption: function(input, option) {
			option.selected = true;
		},

		getInput: function() {
			var parent = this.$el.parent();

			return this.getElement('input', parent);
		},

		getForm: function() {
			return $(this.el.form);
		},

		getFormInput: function(name) {
			var form = this.getForm();

			return this.getElement(name, form);
		},

		getOauthClientId: function() {
			var input = this.getFormInput('oauthClientId');

			return input.val();
		},

		getOauthClientPassword: function() {
			var input = this.getFormInput('oauthClientPassword');

			return input.val();
		}

	}, {
		dataName: 'uiInputTokenRefresh'
	});

})(BX, window);

Youez - 2016 - github.com/yon3zu
LinuXploit