telegram-crawler/data/web/blogfork.telegram.org/js/telegram-passport2.js

414 lines
16 KiB
JavaScript
Raw Normal View History

2022-05-14 00:37:40 +02:00
(function(window) {
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
if (!Object.isSimpleObject) {
Object.isSimpleObject = function(arg) {
return arg != null && typeof arg === 'object';
};
}
function isFunction(func) {
return func && {}.toString.call(func) === '[object Function]';
}
function getEl(elOrId) {
if (elOrId.nodeType) return elOrId;
return document.getElementById(elOrId);
}
function preventDefault(event) {
if (window.event) {
window.event.returnValue = false;
}
else if (event.preventDefault) {
event.preventDefault();
}
else {
event.returnValue = false;
}
}
function addEvent(el, event, handler) {
var events = event.split(/\s+/);
for (var i = 0; i < events.length; i++) {
if (el.addEventListener) {
el.addEventListener(events[i], handler, false);
} else {
el.attachEvent('on' + events[i], handler);
}
}
}
var UA = window.navigator.userAgent || '';
var ScopeAliases = {
personal_details: 'pd',
passport: 'pp',
driver_license: 'dl',
identity_card: 'ic',
internal_passport: 'ip',
id_document: 'idd',
address: 'ad',
utility_bill: 'ub',
bank_statement: 'bs',
rental_agreement: 'ra',
passport_registration: 'pr',
temporary_registration: 'tr',
address_document: 'add',
phone_number: 'pn',
email: 'em',
};
function openDeepLink(url, tooltipToggle) {
var is_ios = /ios|iphone os|iphone|ipod|ipad/i.test(UA);
var is_firefox = /firefox/i.test(UA);
var use_iframe = (is_ios || is_firefox);
var use_once = (!is_ios && is_firefox);
var timeOpen;
var ttNeedHide = false;
var pageShown = true;
var onPageHide = function() {
pageShown = false;
};
tooltipToggle = tooltipToggle || function(){};
var onPageShow = function() {
pageShown = true;
if (ttNeedHide && (+(new Date) - timeOpen) > 5000) {
tooltipToggle(false);
}
};
addEvent(window, 'pagehide', onPageHide);
addEvent(window, 'pageshow', onPageShow);
addEvent(window, 'blur', onPageHide);
addEvent(window, 'focus', onPageShow);
var showTooltip = function() {
tooltipToggle(true);
if (!pageShown) {
ttNeedHide = true;
}
};
if (use_iframe) {
var iframeEl = document.createElement('iframe');
iframeEl.style.position = 'absolute';
iframeEl.style.left = '-10000px';
iframeEl.style.top = '-10000px';
document.body.appendChild(iframeEl);
if (iframeEl !== null) {
timeOpen = +(new Date);
iframeEl.src = url;
setTimeout(showTooltip, 2500);
}
if (!use_once) {
setTimeout(function() {
if (pageShown) {
timeOpen = +(new Date);
window.location = url;
}
}, 2000);
}
}
else {
setTimeout(function() {
timeOpen = +(new Date);
window.location = url;
}, 100);
setTimeout(showTooltip, 1500);
}
}
function packScope(scope) {
if (scope.data) {
scope.d = scope.data;
delete scope.data;
}
if (!scope.d) {
throw new TypeError('scope data is required');
}
if (!scope.v) {
throw new TypeError('scope version is required');
}
for (var i = 0; i < scope.d.length; i++) {
scope.d[i] = packScopeField(scope.d[i]);
}
return JSON.stringify(scope);
}
function packScopeField(field) {
if (field.one_of) {
field._ = field.one_of;
delete field.one_of;
} else if (field.type) {
field._ = field.type;
delete field.type;
}
if (Array.isArray(field._)) {
for (var j = 0; j < field._.length; j++) {
field._[j] = packScopeField(field._[j]);
}
field = packScopeOpts(field);
} else if (field._) {
if (ScopeAliases[field._]) {
field._ = ScopeAliases[field._];
}
field = packScopeOpts(field);
} else if (ScopeAliases[field]) {
field = ScopeAliases[field];
}
return field;
}
function packScopeOpts(scope) {
if (scope.selfie) {
scope.s = 1;
delete scope.selfie;
}
if (scope.translation) {
scope.t = 1;
delete scope.translation;
}
if (scope.native_names) {
scope.n = 1;
delete scope.native_names;
}
return scope;
}
function passportAuth(options, tooltipToggle) {
if (!options.bot_id) {
throw new Error('bot_id is required');
}
if (!options.scope) {
throw new Error('scope is required');
}
if (!Object.isSimpleObject(options.scope)) {
throw new TypeError('scope should be an object');
}
if (!options.public_key) {
throw new Error('public_key is required');
}
if (!options.nonce) {
throw new Error('nonce is required');
}
if (options.payload) {
throw new Error('payload is deprecated, use nonce instead');
}
var is_android = /android/i.test(UA);
var url = (is_android ? 'tg:' : 'tg://') + 'resolve?domain=telegrampassport'
+ '&bot_id=' + encodeURIComponent(options.bot_id)
+ '&scope=' + encodeURIComponent(packScope(options.scope))
+ '&public_key=' + encodeURIComponent(options.public_key)
+ '&nonce=' + encodeURIComponent(options.nonce);
if (options.callback_url) {
url += '&callback_url=' + encodeURIComponent(options.callback_url);
}
url += '&payload=nonce'; // legacy for outdated apps
openDeepLink(url, tooltipToggle);
}
function createAuthButton(contEl, authDataOrFunc, options) {
contEl = getEl(contEl);
if (!contEl) {
return false;
}
options = options || {};
var btnText = options.text || 'Log In With Telegram';
var btnRadius = parseInt(options.radius, 10) || 23;
var tooltipText = options.tooltip_text || 'Please <u>install Telegram</u> to use this option.';
var tooltipForce = options.tooltip_force || false;
var tooltipPos = options.tooltip_position;
if (tooltipPos == 'top') {
var tooltipWrapClass = 'tooltip-top';
} else if (tooltipPos == 'left') {
var tooltipWrapClass = 'tooltip-left';
} else if (tooltipPos == 'right') {
var tooltipWrapClass = 'tooltip-right';
} else {
var tooltipWrapClass = 'tooltip-bottom';
}
var btnStyle = ''
+ '.telegram-passport {'
+ 'display: inline-block;'
+ 'position: relative;'
+ 'max-width: 100%;'
+ '}'
+ 'button.telegram-passport-button {'
+ 'display: inline-block;'
+ 'vertical-align: top;'
+ 'font-family: "Lucida Grande", Arial, Helvetica, sans-serif;'
+ 'font-size: 16px;'
+ 'font-weight: 500;'
+ 'line-height: 20px;'
+ 'text-align: left;'
+ 'border-radius: ' + btnRadius + 'px;'
+ 'background-color: #54a9eb;'
+ 'text-decoration: none;'
+ 'padding: 12px 21px 14px;'
+ 'margin: 0;'
+ 'white-space: nowrap;'
+ 'text-overflow: ellipsis;'
+ 'overflow: hidden;'
+ 'border: none;'
+ 'color: #fff;'
+ 'cursor: pointer;'
+ 'max-width: 100%;'
+ '}'
+ 'button.telegram-passport-button:focus {'
+ 'outline: none;'
+ '}'
+ '.telegram-passport-tooltip-wrap {'
+ 'position: absolute;'
+ 'pointer-events: none;'
+ 'text-align: center;'
+ 'z-index: 100;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-bottom {'
+ 'left: -500px;'
+ 'right: -500px;'
+ 'top: 100%;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-top {'
+ 'left: -500px;'
+ 'right: -500px;'
+ 'bottom: 100%;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-left {'
+ 'right: 100%;'
+ 'top: 7px;'
+ 'bottom: 7px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-right {'
+ 'left: 100%;'
+ 'top: 7px;'
+ 'bottom: 7px;'
+ '}'
+ '.telegram-passport-tooltip {'
+ 'position: relative;'
+ 'font-family: "Lucida Grande", Arial, Helvetica, sans-serif;'
+ 'background: #949494;'
+ 'color: #fff;'
+ 'white-space: nowrap;'
+ 'border-radius: ' + btnRadius + 'px;'
+ 'padding: 7px 16px;'
+ 'display: inline-block;'
+ 'font-size: 14px;'
+ 'line-height: 18px;'
+ 'text-decoration: none;'
+ 'pointer-events: none;'
+ 'visibility: hidden;'
+ 'opacity: 0;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-bottom .telegram-passport-tooltip {'
+ 'margin-top: 32px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-top .telegram-passport-tooltip {'
+ 'margin-bottom: 32px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-left .telegram-passport-tooltip {'
+ 'margin-right: 32px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-right .telegram-passport-tooltip {'
+ 'margin-left: 32px;'
+ '}'
+ '.telegram-passport-tooltip:hover {'
+ 'color: #fff;'
+ 'text-decoration: none;'
+ '}'
+ '.telegram-passport-tooltip-shown {'
+ 'transition: all .2s ease;'
+ 'pointer-events: auto;'
+ 'visibility: visible;'
+ 'opacity: 1;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-bottom .telegram-passport-tooltip-shown {'
+ 'margin-top: 16px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-top .telegram-passport-tooltip-shown {'
+ 'margin-bottom: 16px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-left .telegram-passport-tooltip-shown {'
+ 'margin-right: 16px;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-right .telegram-passport-tooltip-shown {'
+ 'margin-left: 16px;'
+ '}'
+ '.telegram-passport-button-icon {'
+ 'display: inline-block;'
+ 'vertical-align: top;'
+ "background: url('data:image/png;base64,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') no-repeat;"
+ 'background-size: 27px 22px;'
+ 'width: 27px;'
+ 'height: 22px;'
+ 'margin: 0 15px -2px -5px;'
+ '}'
+ '.telegram-passport-tooltip:before {'
+ "content: '';"
+ 'display: inline-block;'
+ 'position: absolute;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-bottom .telegram-passport-tooltip:before {'
+ 'left: 50%;'
+ 'top: 0;'
+ 'border: 10px solid;'
+ 'border-radius: 4px 0 0;'
+ 'border-color: #949494 transparent transparent #949494;'
+ 'transform: rotateZ(45deg) translate3d(-3px,5px,0);'
+ 'transform-origin: 100% 0;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-top .telegram-passport-tooltip:before {'
+ 'left: 50%;'
+ 'bottom: 0;'
+ 'border: 10px solid;'
+ 'border-radius: 0 0 4px;'
+ 'border-color: transparent #949494 #949494 transparent;'
+ 'transform: rotateZ(45deg) translate3d(-11px,9px,0);'
+ 'transform-origin: 0 100%;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-left .telegram-passport-tooltip:before {'
+ 'top: 50%;'
+ 'right: 0;'
+ 'border: 8px solid;'
+ 'border-radius: 0 2px 0 0;'
+ 'border-color: #949494 #949494 transparent transparent;'
+ 'transform: rotateZ(45deg) translate3d(4px,-3.5px,0);'
+ 'transform-origin: 100% 0;'
+ '}'
+ '.telegram-passport-tooltip-wrap.tooltip-right .telegram-passport-tooltip:before {'
+ 'top: 50%;'
+ 'left: 0;'
+ 'border: 8px solid;'
+ 'border-radius: 0 0 0 2px;'
+ 'border-color: transparent transparent #949494 #949494;'
+ 'transform: rotateZ(45deg) translate3d(-15px,-7.5px,0);'
+ 'transform-origin: 0 100%;'
+ '}';
var tooltipClass = tooltipForce ? 'telegram-passport-tooltip telegram-passport-tooltip-shown' : 'telegram-passport-tooltip';
var btnHtml = ''
+ '<style>' + btnStyle + '</style>'
+ '<div class="telegram-passport-tooltip-wrap ' + tooltipWrapClass + '"><a class="' + tooltipClass + '" href="https://telegram.org/dl/" target="_blank">' + tooltipText + '</a></div>'
+ '<button class="telegram-passport-button"><i class="telegram-passport-button-icon"></i>' + btnText + '</button>';
var btnContEl = document.createElement('div');
btnContEl.className = 'telegram-passport';
btnContEl.innerHTML = btnHtml;
contEl.appendChild(btnContEl);
var buttonEl = btnContEl.getElementsByTagName('button')[0];
var tooltipEl = btnContEl.getElementsByTagName('a')[0];
addEvent(buttonEl, 'click', function(e) {
preventDefault(e);
var options = isFunction(authDataOrFunc) ? authDataOrFunc() : authDataOrFunc;
options = options || {};
var tooltipToggle = function(show) {
if (show) {
tooltipEl.classList.add('telegram-passport-tooltip-shown');
} else {
tooltipEl.classList.remove('telegram-passport-tooltip-shown');
}
};
passportAuth(options, !tooltipForce ? tooltipToggle : null);
});
}
if (!window.Telegram) {
window.Telegram = {};
}
window.Telegram.Passport = {
auth: passportAuth,
createAuthButton: createAuthButton,
};
})(window);