Функционирует при финансовой поддержке Федерального агентства по печати и массовым коммуникациям (Роспечать)

Наследный скрипт

Ого, похоже, вам досталась часть наследства! Правда, речь о legacy...

Пока все вокруг в 2020 году будет меняться, две вещи останутся — боль от поддержки чужого кода и востребованность крутых программистов. N + 1 предлагает подкованным в JavaScript читателям прямо сейчас попробовать устроиться в «Лабораторию Касперского». И сохранить личную стабильность в эпоху udalenki. Работает это так: читаем задачу, смотрим код, в поле после кода пишем две-три-четырнадцать строчек на js в свободной форме, нажимаем «Отправить». ГО!

Бывает такое, что откуда-то вытаскивают старый проект, который когда-то работал и нужно дать ему вторую жизнь. Но технологии идут вперед, времена изменились, нужно переписать часть, а то и вообще восстановить.

constant.js

Коллега отправил вам файл, но вы нигде не можете найти константу VECTOR_NAME. Нужно восстановить ее, опираясь на этот блок кода.

const getVector = ({x, y}) => {
    if (x > y) {
        if (Math.abs(x / y) < THRESHOLD) return;
        return x > 0 ? 3 : 1;
    } else {
        if (Math.abs(y / x) < THRESHOLD) return;
        return y > 0 ? 2 : 0;
    }
};

let v = getVector({x: _x, y: _y});
if (v && VECTOR_NAME.indexOf(v) !== -1) {
    ev.emit('event.' + VECTOR_NAME[v]);
}

ev.on('event.up', () => {
    console.log('Восхитительно, что-то движется вверх!');
});
xss-filter.js

Каждый программист имеет особую интуицию, которая подсказывает ему, если в коде что-то не так. Как у дайверов из романа Сергея Лукьяненко «Лабиринт отражений», которые видят двери в ошибках кода. Во время разбора легаси интуиция подсказала вам, что где-то тут есть уязвимость.
Какая GET-строка может позволить провести XSS? Объясните свое решение на случай, если мы накосячили с парсером.

const REG_FORBIDDEN = new RegExp("[~!@#$%^&*()_+={}\\[\\]|/\\.,?;:\"'<>]");

let param = new URLSearchParams(window.location.search);
let source = param.get('utm_source');
if (source && !source.match(REG_FORBIDDEN)) {
    source = string.normalize(COMPATIBILITY);
    document.querySelector('span[data-id="utm-source"]')
            .innerHTML = source;
}
notification-center.js

Похоже, в проекте отсутствует еще один файл. Вы нашли блок кода, в котором используется объект Bus, судя по всему, представляющий из себя централизованный Event Emitter. Этакий NotificationCenter или даже DBus.
Реализуйте этот класс.
Здесь множество способов решения, единственно правильного нет. Нам интересно, какой путь выберете вы.

Bus.off('exchange.rate.change');

Bus.on('exchange.rate.change', data => Trading.change(data.type, data))
   .on({
        'exchange.rate.up:usd': data => {
            if (data.value >= SETTINGS.USD.buy) {
                Trading.buy(data.type);
            }            
        },
        'exchange.rate.change:usd': data => {
            messenger.send('USD rate changed to', data.value);
        }
   });

Bus.on(['exchange.rate.change:CHF', 'exchange.rate.change:EUR'], data => {
    if (data.delta >= SETTINGS[data.type].notify) {
        messenger.send(data.type + ' rate changed to', data.value);
    }
});

Bus.send('exchange.rate.update');
Предоставляя адрес электронной почты, вы принимаете условия соглашения о персональных данных.
«Лаборатории Касперского» прямо сейчас нужны классные профессионалы, чтобы строить безопасный мир. Она продолжает нанимать людей, открыто больше 100 вакансий по разработке, тестированию, информационной безопасности, системному анализу, финансам, продажам, маркетингу и не только.

Те, кто присоединяются к компании, могут не переживать за свою стабильность. Трудовой договор подписывается заранее, еще до выхода сотрудников на работу. И им становятся доступны полис ДМС с защитой от критических заболеваний и стопроцентной оплатой больничного, ежемесячный бонус на обеды, оплата мобильной связи и многое другое.

Чтобы уменьшить риски для всех, в разных отделах на работу из дома уже перешли до 95 процентов сотрудников. Тем, кому все же нужно быть в офисе, оплачивают такси, а парковку на территории бизнес-центра сделали бесплатной.

Кроме того, все этапы собеседований теперь проводятся онлайн. Для IT-направлений запустили автоматизированное тестирование: кандидаты выполняют тестовые задания со своего компьютера, не выходя из дома.

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.