mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2024-11-24 16:29:45 +01:00
413 lines
16 KiB
JavaScript
413 lines
16 KiB
JavaScript
(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);
|