The online learning world just experienced its biggest shakeup yet. Coursera announced today it's acquiring rival platform Udemy in a $2.5 billio…
Google has just released Gemini 3 Flash, and it's obliterating the traditional AI trade-off that has frustrated developers and everyday users for…
The Linux kernel's ambitious experiment with Rust—a language championed for preventing memory bugs—has hit its first security vulnerability, reve…
Image: Google Google Translate is breaking language barriers in real-time with a groundbreaking feature that streams natural-sounding translations di…
Apple and Google have issued emergency security updates after discovering two zero-day vulnerabilities actively exploited in highly targeted attacks …
When bank clerk Nitu Y. realized she'd been scammed out of ₹3 million through a fake investment app, filing her police complaint took just 15 min…
Sophisticated zero-click attack exploited Samsung's image processing library for months before detection Google's Project Zero team has unvei…
A cybersecurity researcher has publicly released a proof-of-concept tool that exposes a fundamental vulnerability in WhatsApp and Signal, enabling si…
Security researchers have uncovered a trio of severe vulnerabilities in FreePBX, an open-source business phone system management platform, that could…
Email is still one of the most common ways for people to talk, work, and send important files. But it has also become one of the easiest things for h…
const config = {
safeID = 'safelink',
safeURL: ['/p/safelink.html'],
timer: 15,
redirect: true,
text: {
wait: 'The link will appear in 0 second',
direct: 'You’ll be redirected to the download link in 0 second',
shifted: 'Redirecting... [link] if you’re not redirected automatically.',
click: 'Click here',
btn: 'Direct to link.'
}
};
(() => {
const randomURL = url => url[Math.floor(Math.random() * url.length)];
const safeLink = () => config.safeURL.some(path => location.pathname.endsWith(path));
const safeMessage = (text, time) => {
const [start, end] = text.split('0');
return `${start} ${time} ${end}.
`;
};
const outboundLinks = () => {
const links = document.querySelectorAll('a.safeurl[href]');
if (!links.length) return;
links.forEach(anchor => {
const encoded = encodeURIComponent(btoa(anchor.href));
Object.assign(anchor, {
href: `${location.origin}${randomURL(config.safeURL)}?go=${encoded}`,
target: '_self',
rel: 'noopener'
})
})
};
const handleLink = () => {
const params = new URLSearchParams(location.search);
const encoded = params.get('go');
if (!encoded) return;
const link = atob(decodeURIComponent(encoded))
params.delete('go');
history.replaceState({}, '', location.pathname + (params.toString() ? '?' + params : ''));
let counter = config.timer;
const label = config.redirect ? config.text.direct : config.text.wait;
const box = document.getElementById(config.safeID);
if (!box) return;
box.removeAttribute('hidden');
box.innerHTML = safeMessage(label, counter);
const countdown = setInterval(() => {
counter--;
box.innerHTML = safeMessage(label, counter);
if (counter > 0) return;
clearInterval(countdown);
if (config.redirect) {
box.innerHTML = `${config.text.shifted.replace('[link]', `${config.text.click}`)}
`;
location.href = link;
} else {
box.innerHTML = '';
const btn = document.createElement('a');
//btn.className = 'btn';
btn.href = link;
btn.target = '_blank';
btn.rel = 'nofollow noopener noreferrer';
btn.innerHTML = `${config.text.btn}`;
box.appendChild(btn);
}
}, 1000)
};
safeLink() ? handleLink() : outboundLinks();
})();