Greasy Fork is available in English.
自动登录srun3000校园网计费系统,关闭登录成功页面并返回跳转前页面
当前为
// ==UserScript==
// @name SRUN3000 helper
// @namespace Kn
// @version 0.31
// @description 自动登录srun3000校园网计费系统,关闭登录成功页面并返回跳转前页面
// @author KevinTan
// @match http://192.0.0.6/*
// @grant none
// ==/UserScript==
/* jshint -W097 */
'use strict';
alert = console.log.bind(console);
var sid = null;
var view = (function() {
var ret = {};
var style = document.createElement('style');
var header = document.createElement('header');
var brand = document.createElement('div');
var board = document.createElement('div');
var info = document.createElement('div');
style.innerHTML = 'header, header *{box-sizing:border-box;font-size:16px;line-height:50px;height:50px;}';
header.style = 'position:fixed;background-color:#303a40;z-index:9999;top:0;left:0;width:100%;color:#fff;' +
'-webkit-box-shadow: 0 2px 5px rgba(0,0,0,.2);-moz-box-shadow: 0 2px 5px rgba(0,0,0,.2);box-shadow: 0 2px 5px rgba(0,0,0,.2)';
brand.style = 'float:left;background-color:#3689b3;padding:0 30px';
board.style = 'width;100%;white-space:nowrap;overflow:hidden;text-align:center;opacity:1';
info.style = 'float:right;color:#ccc;padding:0 20px;cursor:pointer';
brand.innerText = 'SRUN3000认证助手';
board.innerText = '欢迎使用 (\'v\')~';
info.innerText = '@kevinsfork';
ret.load = function() {
document.head.appendChild(style);
document.body.appendChild(header);
header.appendChild(brand);
header.appendChild(info);
header.appendChild(board);
}
ret.print = function(msg, speed) {
speed = speed || 0.1;
if (speed == 1) {
board.innerText = msg;
return;
}
function fadeOut() {
if (board.style.opacity > 0) {
board.style.opacity = 1 * board.style.opacity - speed;
console.log('[Out]', board.style.opacity);
requestAnimationFrame(fadeOut);
} else {
board.innerText = msg;
requestAnimationFrame(fadeIn);
}
}
function fadeIn() {
if (board.style.opacity < 1) {
board.style.opacity = 1 * board.style.opacity + speed;
console.log('[In]', board.style.opacity);
requestAnimationFrame(fadeIn);
}
}
requestAnimationFrame(fadeOut);
}
return ret;
})();
window.dict = {
'user_tab_error': '认证程序未启动',
'username_error': '用户名错误,请在localStorage中修改usernamae字段',
'non_auth_error': '您无须认证,可直接上网',
'password_error': '密码错误,请在localStorage中修改password字段',
'status_error': '用户已欠费,请尽快充值。',
'available_error': '用户已禁用',
'ip_exist_error': '您的IP尚未下线,请等待2分钟再试。',
'usernum_error': '用户数已达上限',
'online_num_error': '该帐号的登录人数已超过限额\n如果怀疑帐号被盗用,请联系管理员。',
'mode_error': '系统已禁止WEB方式登录,请使用客户端',
'time_policy_error': '当前时段不允许连接',
'flux_error': '您的流量已超支',
'minutes_error': '您的时长已超支',
'ip_error': '您的IP地址不合法',
'mac_error': '您的MAC地址不合法',
'sync_error': '您的资料已修改,正在等待同步,请2分钟后再试。',
'logout_ok': '注销成功,请等1分钟后登录。',
'logout_error': '您不在线上'
};
window.AutoLogin = function(loginInfo) {
var loginStr = "username=" + loginInfo.username + "&password=" + hex_md5(loginInfo.password).substr(8, 16) + "&drop=0&type=1&n=1";
view.print('正在使用 ' + loginInfo.username + ' 的用户信息登陆');
console.log('login params:', loginStr);
var req = new XMLHttpRequest();
req.open('POST', '/cgi-bin/do_login');
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(loginStr);
req.addEventListener('load', function(e) {
var status = req.responseText;
console.log(status);
if (/^\d+$/.test(status)) {
view.print('登陆成功,跳转回原页面');
var originUrl = (function() {
var url = window.location.toString().match(/\?(?:url=)?(https?:\/\/.*)$/);
return url ? url[1] || -1 : -1;
})();
if (originUrl !== -1) {
window.location.href = originUrl;
} else {
window.close();
}
} else if (status === 'online_num_error') {
//forcelogout
view.print('登录人数超过限额,尝试强制注销');
req.open('POST', '/cgi-bin/force_logout');
var logoutStr = "username=" + loginInfo.username + "&password=" + loginInfo.password + "&drop=0&type=1&n=1";
console.log('logout params:', logoutStr);
req.send(logoutStr);
} else if (status === 'logout_ok') {
var count = 60;
sid = window.setInterval(function() {
if (count == 0) {
window.AutoLogin(loginInfo);
sid && window.clearInterval(sid);
} else {
var hint = '强制注销成功,等待 ' + count + 's 后自动重试';
view.print(hint, 1);
}
count--;
}, 1000);
} else if (status === 'non_auth_error') {
window.close();
} else {
view.print(window.dict[status]);
}
});
}
view.load();
if (document.title.indexOf('欢迎使用') !== -1) {
if (window.localStorage.username == null) {
view.print('没有可用的登陆信息,请手动登陆');
return;
}
var loginInfo = {
username: window.localStorage.username,
rpassword: window.localStorage.password,
password: window.localStorage.password
}
window.AutoLogin(loginInfo);
} else if (document.title.indexOf('登录成功') !== -1) {
window.onbeforeunload = null;
window.onunload = null;
if (window.opener) {
window.opener.close();
window.close();
}
}