Escape From WebVPN

避免WebVPN劫持CC98站外链接

目前為 2022-02-13 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Escape From WebVPN
// @version      0.0.1
// @description  避免WebVPN劫持CC98站外链接
// @icon         https://www.cc98.org/static/98icon.ico

// @author       ml98
// @namespace    http://tampermonkey.net/
// @license      MIT

// @match        http://www-cc98-org-s.webvpn.zju.edu.cn:8001/*
// @run-at       document-idle
// @grant        none
// ==/UserScript==

/* eslint-env jquery */

function decodeWebVPNURL(url) {
    try {
        var urlObj = new URL(url);
    } catch(e) {
        return '';
    }
    let host = urlObj.host;
    let suffix = '.webvpn.zju.edu.cn:8001';
    if (host.endsWith(suffix)) {
        host = host.slice(0, host.length - suffix.length);
    } else {
        return url;
    }
    if (host.endsWith('-s')) {
        urlObj.protocol = 'https:';
        host = host.slice(0, host.length - 2);
    }
    if (host.endsWith('-p')) {
        host = host.slice(0, host.length - 2);
        urlObj.port = host.slice(host.lastIndexOf('-') + 1);
        host = host.slice(0, host.lastIndexOf('-'));
    } else {
        urlObj.port = '';
    }
    urlObj.host = host.replaceAll('-', '.').replaceAll('..', '-');
    return urlObj + '';
}

$(document).on('click', 'a', function(e) {
    if(this.href && new URL(this.href).host !== 'www.cc98.org') {
        e.preventDefault();
        window.open().location = decodeWebVPNURL(this.href);
        return false;
    }
})