api#326 Числовые UTM и новый шум каждого перехода
This commit is contained in:
1 parent
f30742c2fb
commit
81e189ca67
16 files changed
+303
-160
No files matched your search
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/** api#326: новый шум при каждой навигации; recovery хранит выбранные цифры. */
|
||||
return <<<'JS'
|
||||
(function () {
|
||||
const keys = ['indpic','theme','degr','reg','chob','tp','cons','focus'];
|
||||
const enums = {theme:{dark:'1',light:'2'},reg:{before:'1',after:'2'},chob:{b:'1',a:'2'},focus:{face:'1',center:'2'}};
|
||||
const legacy = {reg:'registration',chob:'bchoice'};
|
||||
const valid = (key, value) => /^[1-9]$/.test(value || '') && (!enums[key] || Object.values(enums[key]).includes(value));
|
||||
function restore(meta, defaults) {
|
||||
const query = new URLSearchParams(meta.redirectUtm || '');
|
||||
const digits = {};
|
||||
for (const key of keys) {
|
||||
let value = meta.utmDigits?.[key];
|
||||
if (!valid(key, value)) {
|
||||
// Только сохранённый record: старые enum/открытые цифры не являются raw URL alias.
|
||||
const stored = query.get(legacy[key] || key) ?? query.get(key);
|
||||
value = enums[key]?.[stored] || stored;
|
||||
if (!valid(key, value)) value = Array.from(stored || '')[4];
|
||||
}
|
||||
digits[key] = valid(key, value) ? value : defaults[key];
|
||||
}
|
||||
return digits;
|
||||
}
|
||||
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
function mask(digit) {
|
||||
const bytes = new Uint8Array(10);
|
||||
crypto.getRandomValues(bytes);
|
||||
const chars = Array.from(bytes, value => alphabet[value % alphabet.length]);
|
||||
chars[4] = digit;
|
||||
return chars.join('');
|
||||
}
|
||||
function query(meta, defaults) {
|
||||
const params = new URLSearchParams(meta.redirectUtm || '');
|
||||
const digits = restore(meta, defaults);
|
||||
for (const key of ['registration','bchoice','chb','key','shown_theme',...keys]) params.delete(key);
|
||||
for (const key of keys) params.set(key, mask(digits[key]));
|
||||
return params.toString();
|
||||
}
|
||||
window.ZoomzillaUtmHandoff = {restore, query};
|
||||
})();
|
||||
JS;
|
||||
Reference in new issue
Block a user