Greasy Fork is available in English.
面向个人的网盘提取码管家
// ==UserScript== // @name 提取码管家 // @namespace http://go.newday.me/s/pwd-home // @version 0.1.1 // @icon http://cdn.newday.me/addon/pwd/favicon.ico // @author 哩呵 // @description 面向个人的网盘提取码管家 // @match *://pan.baidu.com/* // @match *://yun.baidu.com/* // @match *://*.weiyun.com/* // @match *://*.lanzous.com/* // @match *://*.lanzoux.com/* // @match *://cloud.189.cn/* // @match *://*.newday.me/* // @match *://*.likestyle.cn/* // @connect newday.me // @connect likestyle.cn // @require https://cdn.staticfile.org/jquery/3.5.0/jquery.min.js // @require https://cdn.staticfile.org/dompurify/2.0.10/purify.min.js // @run-at document-start // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues // @grant GM_openInTab // @grant GM_notification // @grant GM_xmlhttpRequest // ==/UserScript== (function () { 'use strict'; var manifest = { "name": "mpwd", "title": "提取码管家", "urls": {}, "apis": { "version": "https://disk.newday.me/disk/pwd/version", "query": "https://disk.newday.me/disk/pwd/query", "store": "https://disk.newday.me/disk/pwd/store" }, "logger_level": 3, "options_page": "http://go.newday.me/s/pwd-option" }; var container = (function () { var obj = { defines: {}, modules: {} }; obj.define = function (name, requires, callback) { name = obj.processName(name); obj.defines[name] = { requires: requires, callback: callback }; }; obj.require = function (name, cache) { if (typeof cache == "undefined") { cache = true; } name = obj.processName(name); if (cache && obj.modules.hasOwnProperty(name)) { return obj.modules[name]; } else if (obj.defines.hasOwnProperty(name)) { var requires = obj.defines[name].requires; var callback = obj.defines[name].callback; var module = obj.use(requires, callback); cache && obj.register(name, module); return module; } }; obj.use = function (requires, callback) { var module = { exports: undefined }; var params = obj.buildParams(requires, module); var r###lt = callback.apply(this, params); if (typeof r###lt != "undefined") { return r###lt; } else { return module.exports; } }; obj.register = function (name, module) { name = obj.processName(name); obj.modules[name] = module; }; obj.buildParams = function (requires, module) { var params = []; requires.forEach(function (name) { params.push(obj.require(name)); }); params.push(obj.require); params.push(module.exports); params.push(module); return params; }; obj.processName = function (name) { return name.toLowerCase(); }; return { define: obj.define, use: obj.use, register: obj.register, modules: obj.modules }; })(); container.define("gm", [], function () { var obj = {}; obj.ready = function (callback) { if (typeof GM_getValue != "undefined") { callback && callback(); } else { setTimeout(function () { obj.ready(callback); }, 100); } }; return obj; }); /** common **/ container.define("gmDao", [], function () { var obj = { items: {} }; obj.get = function (name) { return GM_getValue(name); }; obj.getBatch = function (names) { var items = {}; names.forEach(function (name) { items[name] = obj.get(name); }); return items; }; obj.getAll = function () { return obj.getBatch(GM_listValues()); }; obj.set = function (name, item) { GM_setValue(name, item); }; obj.setBatch = function (items) { for (var name in items) { obj.set(name, items[name]); } }; obj.setAll = function (items) { var names = GM_listValues(); names.forEach(function (name) { if (!items.hasOwnProperty(name)) { obj.remove(name); } }); obj.setBatch(items); }; obj.remove = function (name) { GM_deleteValue(name); }; obj.removeBatch = function (names) { names.forEach(function (name) { obj.remove(name); }); }; obj.removeAll = function () { obj.removeBatch(GM_listValues()); }; return obj; }); container.define("ScopeDao", [], function () { return function (dao, scope) { var obj = { items: {} }; obj.get = function (name) { return obj.items[name]; }; obj.getBatch = function (names) { var items = {}; names.forEach(function (name) { if (obj.items.hasOwnProperty(name)) { items[name] = obj.items[name]; } }); return items; }; obj.getAll = function () { return obj.items; }; obj.set = function (name, item) { obj.items[name] = item; obj.sync(); }; obj.setBatch = function (items) { obj.items = Object.assign(obj.items, items); obj.sync(); }; obj.setAll = function (items) { obj.items = Object.assign({}, items); obj.sync(); }; obj.remove = function (name) { delete obj.items[name]; obj.sync(); }; obj.removeBatch = function (names) { names.forEach(function (name) { delete obj.items[name]; }); obj.sync(); }; obj.removeAll = function () { obj.items = {}; obj.getDao().remove(obj.getScope()); }; obj.init = function () { var items = obj.getDao().get(obj.getScope()); if (items instanceof Object) { obj.items = items; } }; obj.sync = function () { obj.getDao().set(obj.getScope(), obj.items); }; obj.getDao = function () { return dao; }; obj.getScope = function () { return scope; }; return obj.init(), obj; }; }); container.define("config", ["factory"], function (factory) { var obj = {}; obj.getConfig = function (name) { return obj.getDao().get(name); }; obj.setConfig = function (name, value) { obj.getDao().set(name, value); }; obj.getAll = function () { return obj.getDao().getAll(); }; obj.getDao = function () { return factory.getConfigDao(); }; return obj; }); container.define("storage", ["factory"], function (factory) { var obj = {}; obj.getValue = function (name) { return obj.getDao().get(name); }; obj.setValue = function (name, value) { obj.getDao().set(name, value); }; obj.getAll = function () { return obj.getDao().getAll(); }; obj.getDao = function () { return factory.getStorageDao(); }; return obj; }); container.define("option", ["config", "constant"], function (config, constant) { var obj = { name: "option", constant: constant.option }; obj.isOptionActive = function (item) { var name = item.name; var option = obj.getOption(); return option.indexOf(name) >= 0 ? true : false; }; obj.setOptionActive = function (item) { var name = item.name; var option = obj.getOption(); if (option.indexOf(name) < 0) { option.push(name); obj.setOption(option); } }; obj.setOptionUnActive = function (item) { var name = item.name; var option = obj.getOption(); var index = option.indexOf(name); if (index >= 0) { delete option[index]; obj.setOption(option); } }; obj.getOption = function () { var option = []; var optionList = obj.getOptionList(); Object.values(obj.constant).forEach(function (item) { var name = item.name; if (optionList.hasOwnProperty(name)) { if (optionList[name] != "no") { option.push(name); } } else if (item.value != "no") { option.push(name); } }); return option; }; obj.setOption = function (option) { var optionList = {}; Object.values(obj.constant).forEach(function (item) { var name = item.name; if (option.indexOf(name) >= 0) { optionList[name] = "yes"; } else { optionList[name] = "no"; } }); obj.setOptionList(optionList); }; obj.getOptionList = function () { var optionList = config.getConfig(obj.name); return optionList ? optionList : {}; }; obj.setOptionList = function (optionList) { config.setConfig(obj.name, optionList); }; return obj; }); container.define("manifest", [], function () { var obj = { manifest: manifest }; obj.getItem = function (name) { return obj.manifest[name]; }; obj.getManifest = function () { return obj.manifest; }; obj.getName = function () { return obj.getItem("name"); }; obj.getTitle = function () { return obj.getItem("title"); }; obj.getUrl = function (name) { var urls = obj.getItem("urls"); (urls instanceof Object) || (urls = {}); return urls[name]; }; obj.getApi = function (name) { var apis = obj.getItem("apis"); (apis instanceof Object) || (apis = {}); return apis[name]; }; obj.getOptionsPage = function () { if (GM_info.script.optionUrl) { return GM_info.script.optionUrl; } else { return obj.getItem("options_page"); } }; return obj; }); container.define("env", ["config", "manifest"], function (config, manifest) { var obj = { modes: { ADDON: "addon", SCRIPT: "script" }, browsers: { FIREFOX: "firefox", EDG: "edg", EDGE: "edge", BAIDU: "baidu", LIEBAO: "liebao", UC: "uc", QQ: "qq", SOGOU: "sogou", OPERA: "opera", MAXTHON: "maxthon", IE2345: "2345", SE360: "360", CHROME: "chrome", SAFIRI: "safari", OTHER: "other" } }; obj.getName = function () { return manifest.getName(); }; obj.getMode = function () { if (GM_info.mode) { return GM_info.mode; } else { return obj.modes.SCRIPT; } }; obj.getAid = function () { if (GM_info.scriptHandler) { return GM_info.scriptHandler.toLowerCase(); } else { return "unknown"; } }; obj.getUid = function () { var uid = config.getConfig("uid"); if (!uid) { uid = obj.randString(32); config.setConfig("uid", uid); } return uid; }; obj.getBrowser = function () { if (!obj._browser) { obj._browser = obj.matchBrowserType(navigator.userAgent); } return obj._browser; }; obj.getVersion = function () { return GM_info.script.version; }; obj.getEdition = function () { return GM_info.version; }; obj.getInfo = function () { return { mode: obj.getMode(), aid: obj.getAid(), uid: obj.getUid(), browser: obj.getBrowser(), version: obj.getVersion(), edition: obj.getEdition() }; }; obj.matchBrowserType = function (userAgent) { var browser = obj.browsers.OTHER; userAgent = userAgent.toLowerCase(); if (userAgent.match(/firefox/) != null) { browser = obj.browsers.FIREFOX; } else if (userAgent.match(/edge/) != null) { browser = obj.browsers.EDGE; } else if (userAgent.match(/edg/) != null) { browser = obj.browsers.EDG; } else if (userAgent.match(/bidubrowser/) != null) { browser = obj.browsers.BAIDU; } else if (userAgent.match(/lbbrowser/) != null) { browser = obj.browsers.LIEBAO; } else if (userAgent.match(/ubrowser/) != null) { browser = obj.browsers.UC; } else if (userAgent.match(/qqbrowse/) != null) { browser = obj.browsers.QQ; } else if (userAgent.match(/metasr/) != null) { browser = obj.browsers.SOGOU; } else if (userAgent.match(/opr/) != null) { browser = obj.browsers.OPERA; } else if (userAgent.match(/maxthon/) != null) { browser = obj.browsers.MAXTHON; } else if (userAgent.match(/2345explorer/) != null) { browser = obj.browsers.IE2345; } else if (userAgent.match(/chrome/) != null) { if (navigator.mimeTypes.length > 10) { browser = obj.browsers.SE360; } else { browser = obj.browsers.CHROME; } } else if (userAgent.match(/safari/) != null) { browser = obj.browsers.SAFIRI; } return browser; }; obj.randString = function (length) { var possible = "abcdefghijklmnopqrstuvwxyz0123456789"; var text = ""; for (var i = 0; i < length; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; }; return obj; }); container.define("http", [], function () { var obj = {}; obj.ajax = function (option) { var details = { method: option.type, url: option.url, responseType: option.dataType, onload: function (r###lt) { if (!r###lt.status || parseInt(r###lt.status / 100) == 2) { option.success && option.success(r###lt.response); } else { option.error && option.error(""); } }, onerror: function (r###lt) { option.error && option.error(r###lt.error); } }; // 提交数据 if (option.data instanceof Object) { if (option.data instanceof FormData) { details.data = option.data; } else { var formData = new FormData(); for (var i in option.data) { formData.append(i, option.data[i]); } details.data = formData; } } // 自定义头 if (option.headers) { details.headers = option.headers; } // 超时 if (option.timeout) { details.timeout = option.timeout; } GM_xmlhttpRequest(details); }; return obj; }); container.define("notify", [], function () { var obj = {}; obj.showNotify = function (text, title, image, onclick) { GM_notification(text, title, image, onclick); }; return obj; }); container.define("router", [], function () { var obj = {}; obj.getUrl = function () { return location.href; }; obj.goUrl = function (url) { location.href = url; }; obj.openUrl = function (url) { window.open(url); }; obj.openTab = function (url, active) { GM_openInTab(url, !active); }; obj.jumpLink = function (jumpUrl, jumpMode) { switch (jumpMode) { case 9: // self obj.goUrl(jumpUrl); break; case 6: // new obj.openUrl(jumpUrl); break; case 3: // new & not active obj.openTab(jumpUrl, false); break; case 1: // new & active obj.openTab(jumpUrl, true); break; } }; obj.getUrlParam = function (name) { var param = obj.parseUrlParam(obj.getUrl()); if (name) { return param.hasOwnProperty(name) ? param[name] : null; } else { return param; } }; obj.parseUrlParam = function (url) { if (url.indexOf("?")) { url = url.split("?")[1]; } var reg = /([^=&\s]+)[=\s]*([^=&\s]*)/g; var obj = {}; while (reg.exec(url)) { obj[RegExp.$1] = RegExp.$2; } return obj; }; return obj; }); container.define("logger", ["env", "manifest"], function (env, manifest) { var obj = { constant: { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, NONE: 4 } }; obj.debug = function (message) { obj.log(message, obj.constant.DEBUG); }; obj.info = function (message) { obj.log(message, obj.constant.INFO); }; obj.warn = function (message) { obj.log(message, obj.constant.WARN); }; obj.error = function (message) { obj.log(message, obj.constant.ERROR); }; obj.log = function (message, level) { if (level < manifest.getItem("logger_level")) { return false; } console.group("[" + env.getName() + "]" + env.getMode()); console.log(message); console.groupEnd(); }; return obj; }); container.define("meta", ["env", "$"], function (env, $) { var obj = {}; obj.existMeta = function (name) { name = obj.processName(name); if ($("meta[name='" + name + "']").length) { return true; } else { return false; } }; obj.appendMeta = function (name, content) { name = obj.processName(name); content || (content = "on"); $('<meta name="' + name + '" content="on">').appendTo($("head")); }; obj.processName = function (name) { return env.getName() + "::" + name; }; return obj; }); container.define("unsafeWindow", [], function () { if (typeof unsafeWindow == "undefined") { return window; } else { return unsafeWindow; } }); container.define("calendar", [], function () { var obj = {}; obj.getTime = function () { return (new Date()).getTime(); }; obj.formatTime = function (format, timestamp) { format || (format = "Y-m-d H:i:s"); timestamp || (timestamp = obj.getTime()); var date = new Date(timestamp); var year = 1900 + date.getYear(); var month = "0" + (date.getMonth() + 1); var day = "0" + date.getDate(); var hour = "0" + date.getHours(); var minute = "0" + date.getMinutes(); var second = "0" + date.getSeconds(); var vars = { "Y": year, "m": month.substring(month.length - 2, month.length), "d": day.substring(day.length - 2, day.length), "H": hour.substring(hour.length - 2, hour.length), "i": minute.substring(minute.length - 2, minute.length), "s": second.substring(second.length - 2, second.length) }; return obj.replaceVars(vars, format); }; obj.replaceVars = function (vars, value) { Object.keys(vars).forEach(function (key) { value = value.replace(key, vars[key]); }); return value; }; return obj; }); container.define("oneData", ["env", "http"], function (env, http) { var obj = {}; obj.requestOneApi = function (url, data, callback) { http.ajax({ type: "post", url: url, dataType: "json", data: Object.assign(env.getInfo(), data), success: function (response) { callback && callback(response); }, error: function () { callback && callback(""); } }); }; return obj; }); container.define("$extend", ["$", "DOMPurify", "logger"], function ($, DOMPurify, logger) { var obj = {}; obj.init = function () { if (DOMPurify && DOMPurify instanceof Function) { var domPurify = DOMPurify(window); $.fn.safeHtml = function (html) { try { this.html(domPurify.sanitize(html)); } catch (err) { logger.error(err); } }; } else { $.fn.safeHtml = function (html) { this.html(html); }; } }; return obj.init(), obj; }); container.define("appRunner", ["router", "logger", "meta", "$"], function (router, logger, meta, $, require) { var obj = {}; obj.run = function (appList) { var metaName = "status"; if (meta.existMeta(metaName)) { logger.info("setup already"); } else { // 添加meta meta.appendMeta(metaName); // 运行应用 $(function () { obj.runAppList(appList); }); } }; obj.runAppList = function (appList) { var url = router.getUrl(); for (var i in appList) { var app = appList[i]; var match = obj.matchApp(url, app); if (match == false) { continue; } if (require(app.name).run() == true) { break; } } }; obj.matchApp = function (url, app) { var match = false; app.matchs.forEach(function (item) { if (url.indexOf(item) > 0 || item == "*") { match = true; } }); return match; }; return obj; }); /** custom **/ container.define("factory", ["gmDao", "ScopeDao"], function (gmDao, ScopeDao) { var obj = { daos: {} }; obj.getConfigDao = function () { return obj.getDao("config", function () { return ScopeDao(gmDao, "$config"); }); }; obj.getStorageDao = function () { return obj.getDao("storage", function () { return ScopeDao(gmDao, "$storage"); }); }; obj.getDao = function (key, createFunc) { if (!obj.daos.hasOwnProperty(key)) { obj.daos[key] = createFunc(); } return obj.daos[key]; }; return obj; }); container.define("constant", [], function () { return { source: { baidu: "baidu", weiyun: "weiyun", lanzous: "lanzous", ty189: "ty189" }, option: { baidu_page_verify: { name: "baidu_page_verify", value: "yes" }, baidu_share_status: { name: "baidu_share_status", value: "yes" }, weiyun_page_verify: { name: "weiyun_page_verify", value: "yes" }, weiyun_share_status: { name: "weiyun_share_status", value: "yes" }, lanzous_page_verify: { name: "lanzous_page_verify", value: "yes" }, lanzous_share_status: { name: "lanzous_share_status", value: "yes" }, ty189_page_verify: { name: "189_page_verify", value: "yes" }, ty189_share_status: { name: "189_share_status", value: "yes" } } }; }); container.define("setting", ["config"], function (config) { var obj = {}; obj.getAccessToken = function () { return config.getConfig("access_token"); }; obj.setAccessToken = function (accessToken) { config.setConfig("access_token", accessToken); }; obj.getNotifyStatus = function () { var notifyStatus = config.getConfig("notify_status"); if (!notifyStatus) { notifyStatus = "success"; } return notifyStatus; }; obj.setNotifyStatus = function (notifyStatus) { config.setConfig("notify_status", notifyStatus); }; obj.showNotifySuccess = function () { if (obj.getNotifyStatus() == "all" || obj.getNotifyStatus() == "success") { return true; } else { return false; } }; obj.showNotifyFail = function () { if (obj.getNotifyStatus() == "all" || obj.getNotifyStatus() == "fail") { return true; } else { return false; } }; return obj; }); container.define("api", ["manifest", "setting", "oneData"], function (manifest, setting, oneData) { var obj = {}; obj.versionQuery = function (callback) { oneData.requestOneApi(manifest.getApi("version"), {}, callback); }; obj.querySharePwd = function (shareSource, shareId, shareLink, callback) { var data = { access_token: setting.getAccessToken(), share_id: shareId, share_source: shareSource, share_link: shareLink }; oneData.requestOneApi(manifest.getApi("query"), data, callback); }; obj.storeSharePwd = function (shareSource, shareId, sharePwd, shareLink, callback) { var data = { access_token: setting.getAccessToken(), share_id: shareId, share_pwd: sharePwd, share_source: shareSource, share_link: shareLink }; oneData.requestOneApi(manifest.getApi("store"), data, callback); }; return obj; }); container.define("runtime", ["router", "manifest", "notify", "calendar", "storage", "api"], function (router, manifest, notify, calendar, storage, api) { var obj = {}; obj.optionNotify = function () { notify.showNotify("点击去设置令牌...", null, null, function () { obj.openOptionsPage(); }); }; obj.openOptionsPage = function () { router.openTab(manifest.getOptionsPage(), true); }; obj.initVersion = function () { var versionDate = parseInt(storage.getValue("version_date")); var currentDate = calendar.formatTime("Ymd"); if (!versionDate || versionDate < currentDate) { api.versionQuery(function (response) { storage.setValue("version_date", currentDate); if (response && response.code == 1 && response.data instanceof Object) { var versionPayload = response.data; storage.setValue("version_payload", versionPayload); storage.setValue("version_latest", versionPayload.version); } }); } }; obj.initRuntime = function () { obj.initVersion(); }; return obj; }); container.define("core", ["runtime", "$extend"], function (runtime) { var obj = {}; obj.ready = function (callback) { runtime.initRuntime(); callback && callback(); }; return obj; }); /** app **/ container.define("app_baidu", ["manifest", "router", "option", "logger", "unsafeWindow", "constant", "setting", "runtime", "api", "$"], function (manifest, router, option, logger, unsafeWindow, constant, setting, runtime, api, $) { var obj = { verify_page: { share_pwd: null, setPwd: null, backupPwd: null, restorePwd: null, submit_pwd: null } }; obj.run = function () { var url = router.getUrl(); if (url.indexOf(".baidu.com/share/init") > 0) { option.isOptionActive(option.constant.baidu_page_verify) && obj.initVerifyPage(); return true; } else { return false; } }; obj.getShareId = function () { var url = obj.getShareLink(); var match = url.match(/share\/init\?surl=([a-z0-9-_]+)/i); return match ? match[1] : null; }; obj.getShareLink = function () { return router.getUrl(); }; obj.initVerifyPage = function () { obj.registerStoreSharePwd(); if (obj.initVerifyPageElement()) { obj.autoPaddingSharePwd(); } }; obj.initVerifyPageElement = function () { var shareId = obj.getShareId(); var $pwd = $(".input-area input"); if (shareId && $pwd.length) { // 设置提取码 obj.verify_page.setPwd = function (pwd) { $pwd.val(pwd); }; // 备份提取码 obj.verify_page.backupPwd = function (pwd) { $pwd.attr("data-pwd", pwd); }; // 还原提取码 obj.verify_page.restorePwd = function () { $pwd.val($pwd.attr("data-pwd")); }; // 提交提取码 var $button = $(".input-area .g-button"); if ($button.length) { obj.verify_page.submit_pwd = function () { $button.click(); }; } return true; } else { return false; } }; obj.autoPaddingSharePwd = function () { var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.querySharePwd(constant.source.baidu, shareId, shareLink, function (response) { if (response instanceof Object) { if (response.code == 1) { var sharePwd = response.data.share_pwd; obj.verify_page.share_pwd = sharePwd; obj.verify_page.setPwd(sharePwd); setting.showNotifySuccess() && obj.showTipSuccess("[" + manifest.getTitle() + "] 填充提取码成功"); } else if (response.code == -22) { runtime.optionNotify(); } else { setting.showNotifyFail() && obj.showTipError("[" + manifest.getTitle() + "] 未查询到提取码"); } } }); }; obj.registerStoreSharePwd = function () { obj.getJquery()(document).ajaxComplete(function (event, xhr, options) { var requestUrl = options.url; if (requestUrl.indexOf("/share/verify") >= 0) { var match = options.data.match(/pwd=([a-z0-9]+)/i); if (!match) { return logger.warn("pwd share not match"); } // 拒绝*号 if (obj.verify_page.backupPwd) { obj.verify_page.backupPwd(match[1]); setTimeout(obj.verify_page.restorePwd, 500); } var response = xhr.responseJSON; if (!(response && response.errno == 0)) { return logger.warn("pwd share error"); } var sharePwd = match[1]; if (sharePwd == obj.verify_page.share_pwd) { return logger.warn("pwd share not change"); } if (!option.isOptionActive(option.constant.baidu_share_status)) { return logger.warn("pwd share closed"); } var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.storeSharePwd(constant.source.baidu, shareId, sharePwd, shareLink); } }); }; obj.showTipSuccess = function (msg, hasClose, autoClose) { obj.showTip("success", msg, hasClose, autoClose); }; obj.showTipError = function (msg, hasClose, autoClose) { obj.showTip("failure", msg, hasClose, autoClose); }; obj.showTipLoading = function (msg, hasClose, autoClose) { obj.showTip("loading", msg, hasClose, autoClose); }; obj.showTip = function (mode, msg, hasClose, autoClose) { var option = { mode: mode, msg: msg }; // 关闭按钮 if (typeof hasClose != "undefined") { option.hasClose = hasClose; } // 自动关闭 if (typeof autoClose != "undefined") { option.autoClose = autoClose; } obj.require("system-core:system/uiService/tip/tip.js").show(option); }; obj.hideTip = function () { obj.require("system-core:system/uiService/tip/tip.js").hide({ hideTipsAnimationFlag: 1 }); }; obj.getJquery = function () { return obj.require("base:widget/libs/jquerypacket.js"); }; obj.require = function (name) { return unsafeWindow.require(name); }; return obj; }); container.define("app_weiyun", ["manifest", "router", "option", "logger", "unsafeWindow", "constant", "setting", "runtime", "api", "$"], function (manifest, router, option, logger, unsafeWindow, constant, setting, runtime, api, $) { var obj = { modules: {}, webpack_require: null, verify_page: { setPwd: null, share_pwd: null } }; obj.run = function () { var url = router.getUrl(); if (url.indexOf("share.weiyun.com") > 0) { option.isOptionActive(option.constant.weiyun_page_verify) && obj.initVerifyPage(); return true; } else { return false; } }; obj.getShareId = function () { var url = obj.getShareLink(); var match = url.match(/share.weiyun.com\/([0-9a-z]+)/i); return match ? match[1] : null; }; obj.getShareLink = function () { return router.getUrl(); }; obj.initVerifyPage = function () { obj.initWebpackRequire(); obj.registerStoreSharePwd(); obj.initVerifyPageElement(function () { obj.autoPaddingSharePwd(); }); }; obj.initVerifyPageElement = function (callback) { var shareId = obj.getShareId(); var $pwd = $(".card-inner .input-txt"); var $button = $(".card-inner .btn-main"); if (shareId && $pwd.length && $button.length) { // 设置分享密码 obj.verify_page.setPwd = function (pwd) { $pwd.val(pwd); }; // 重造按钮 var $itemButton = $button.parent(); $itemButton.safeHtml($button.prop("outerHTML")); $button = $itemButton.find(".btn-main"); // 按钮事件 $button.on("click", function () { obj.getStore() && obj.getStore().dispatch("shareInfo/loadShareInfoWithoutLogin", $pwd.val()); }); callback && callback(); } else { setTimeout(function () { obj.initVerifyPageElement(callback); }, 500); } }; obj.autoPaddingSharePwd = function () { var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.querySharePwd(constant.source.weiyun, shareId, shareLink, function (response) { if (response instanceof Object) { if (response.code == 1) { var sharePwd = response.data.share_pwd; obj.verify_page.share_pwd = sharePwd; obj.verify_page.setPwd(sharePwd); setting.showNotifySuccess() && obj.showTipSuccess("[" + manifest.getTitle() + "] 填充密码成功"); } else if (response.code == -22) { runtime.optionNotify(); } else { setting.showNotifyFail() && obj.showTipError("[" + manifest.getTitle() + "] 未查询到密码"); } } }); }; obj.registerStoreSharePwd = function () { obj.addResponseInterceptor(function (request, response) { var requestUrl = request.responseURL; if (requestUrl.indexOf("weiyunShareNoLogin/WeiyunShareView") > 0) { if (response.data.data.rsp_header.retcode == 0) { var match = response.config.data.match(/\\"share_pwd\\":\\"([\w]+)\\"/); if (!match) { return logger.warn("pwd share not match"); } var sharePwd = match[1]; if (sharePwd == obj.verify_page.share_pwd) { return logger.warn("pwd share not change"); } if (!obj.isPwdShareOpen()) { return logger.warn("pwd share closed"); } var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.storeSharePwd(constant.source.weiyun, shareId, sharePwd, shareLink); } else { return logger.warn("pwd share error"); } } }); }; obj.addResponseInterceptor = function (callback) { var success = function (response) { try { callback && callback(response.request, response); } catch (e) { logger.warn(e); } return response; }; var error = function () { return Promise.reject(error); }; obj.getAxios() && obj.getAxios().interceptors.response.use(success, error); }; obj.showTipSuccess = function (msg) { obj.getModal() && obj.getModal().success(msg); }; obj.showTipError = function (msg) { obj.getModal() && obj.getModal().error(msg); }; obj.isPwdShareOpen = function () { return option.isOptionActive(option.constant.weiyun_share_status); }; obj.getAxios = function () { return obj.matchWebpackModule("axios", function (module, name) { if (module && module.Axios) { return module; } }); }; obj.getModal = function () { return obj.matchWebpackModule("modal", function (module, name) { if (module && module.confirm && module.success) { return module; } }); }; obj.getStore = function () { return obj.matchWebpackModule("store", function (module, name) { if (module && module.default && module.default._modulesNamespaceMap) { return module.default; } }); }; obj.matchWebpackModule = function (name, matchFunc) { if (!obj.modules.hasOwnProperty(name)) { for (var key in obj.webpack_require.c) { var match = matchFunc(obj.webpack_require(key), key); if (match) { obj.modules[name] = match; } } } return obj.modules[name]; }; obj.initWebpackRequire = function () { var injectName = "_opwd_inject_"; var moreModules = {}; moreModules[injectName] = function (module, exports, __webpack_require__) { obj.webpack_require = __webpack_require__; }; unsafeWindow.webpackJsonp([injectName], moreModules, [injectName]); }; return obj; }); container.define("app_lanzous", ["manifest", "router", "option", "logger", "unsafeWindow", "constant", "setting", "runtime", "api", "$"], function (manifest, router, option, logger, unsafeWindow, constant, setting, runtime, api, $) { var obj = { verify_page: { setPwd: null, share_pwd: null, submit_pwd: null } }; obj.run = function () { var url = router.getUrl(); if (url.indexOf("lanzous.com") > 0 || url.indexOf("lanzoux.com") > 0) { option.isOptionActive(option.constant.lanzous_page_verify) && obj.initVerifyPage(); return true; } else { return false; } }; obj.getShareId = function () { var url = obj.getShareLink(); var match; match = /[lanzous|lanzoux].com\/([\w]+)\/([a-z0-9-_]{4,})/gi.exec(url); if (match) { return match[1] + "/" + match[2]; } match = /[lanzous|lanzoux].com\/([a-z0-9-_]{4,})/gi.exec(url); if (match) { return match[1]; } return null; }; obj.getShareLink = function () { return router.getUrl(); }; obj.initVerifyPage = function () { obj.registerStoreSharePwd(); obj.initVerifyPageElement(function () { obj.autoPaddingSharePwd(); }); }; obj.initVerifyPageElement = function (callback) { var shareId = obj.getShareId(); var $pwd = $("#pwd"); if (shareId && $pwd.length) { // 设置分享密码 obj.verify_page.setPwd = function (pwd) { $pwd.val(pwd); }; // 提交密码 obj.verify_page.submit_pwd = function () { $("#sub").click(); }; callback && callback(); } else { setTimeout(function () { obj.initVerifyPageElement(callback); }, 500); } }; obj.autoPaddingSharePwd = function () { var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.querySharePwd(constant.source.lanzous, shareId, shareLink, function (response) { if (response instanceof Object) { if (response.code == 1) { var sharePwd = response.data.share_pwd; obj.verify_page.share_pwd = sharePwd; obj.verify_page.setPwd(sharePwd); setting.showNotifySuccess() && obj.showTip(1, "[" + manifest.getTitle() + "] 填充密码成功", 2000); } else if (response.code == -22) { runtime.optionNotify(); } else { setting.showNotifyFail() && obj.showTip(0, "[" + manifest.getTitle() + "] 未查询到密码", 2000); } } }); }; obj.registerStoreSharePwd = function () { unsafeWindow.$(document).ajaxComplete(function (event, xhr, options) { var match = options.data.match(/pwd=(\w+)/); if (!match) { match = options.data.match(/p=(\w+)/); if (!match) { return logger.warn("pwd share not match"); } } var sharePwd = match[1]; if (sharePwd == obj.verify_page.share_pwd) { return logger.warn("pwd share not change"); } if (!option.isOptionActive(option.constant.lanzous_share_status)) { return logger.warn("pwd share closed"); } var response = obj.parseJson(xhr.response); if (response && response.zt == 1 && sharePwd) { api.storeSharePwd(constant.source.lanzous, obj.getShareId(), sharePwd, obj.getShareLink()); } else { return logger.warn("pwd share error"); } }); }; obj.showTip = function (code, msg, timeout) { if (unsafeWindow.sms) { unsafeWindow.sms(msg); } else { var selector; if ($(".off").length) { selector = "#pwderr"; } else { selector = "#info"; } if (code) { $(selector).safeHtml('<span style="color: green;">' + msg + '</span>'); } else { $(selector).safeHtml('<span style="color: red;">' + msg + '</span>'); } setTimeout(function () { $(selector).text(""); }, timeout); } }; obj.parseJson = function (jsonStr) { var jsonObject = {}; try { if (jsonStr) { jsonObject = JSON.parse(jsonStr); } } catch (e) { } return jsonObject; }; return obj; }); container.define("app_189", ["manifest", "router", "option", "logger", "unsafeWindow", "constant", "setting", "runtime", "api", "$"], function (manifest, router, option, logger, unsafeWindow, constant, setting, runtime, api, $) { var obj = { verify_page: { share_pwd: null } }; obj.run = function () { var url = router.getUrl(); if (url.indexOf("cloud.189.cn/t") > 0) { option.isOptionActive(option.constant.ty189_page_verify) && obj.initSharePage(); return true; } else { return false; } }; obj.getShareId = function () { var url = obj.getShareLink(); var match = url.match(/cloud\.189\.cn\/t\/([0-9a-z]+)/i); return match ? match[1] : null; }; obj.getShareLink = function () { return router.getUrl(); }; obj.initSharePage = function () { if ($(".code-panel").length) { obj.initVerifyPage(); } }; obj.initVerifyPage = function () { obj.registerStoreSharePwd(); obj.autoPaddingSharePwd(); }; obj.registerStoreSharePwd = function () { unsafeWindow.$(document).ajaxComplete(function (event, xhr, options) { var response = xhr.responseJSON; var sharePwd = null; if (options.url.indexOf("listShareDir.action") > 0) { if (response instanceof Object && response.digest) { var match = options.url.match(/accessCode=(\w+)/); if (!match) { return logger.warn("pwd share not match"); } sharePwd = match[1]; } else { return logger.warn("pwd share not match"); } } else if (options.url.indexOf("shareFileVerifyPass.action") > 0) { if (response instanceof Object && response.shareId && response.accessCode) { sharePwd = response.accessCode; } else { return logger.warn("pwd share not match"); } } else { return logger.warn("not pwd request"); } if (sharePwd == obj.verify_page.share_pwd) { return logger.warn("pwd share not change"); } if (!option.isOptionActive(option.constant.ty189_share_status)) { return logger.warn("pwd share closed"); } var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.storeSharePwd(constant.source.ty189, shareId, sharePwd, shareLink); }); }; obj.autoPaddingSharePwd = function () { var shareId = obj.getShareId(); var shareLink = obj.getShareLink(); api.querySharePwd(constant.source.ty189, shareId, shareLink, function (response) { if (response instanceof Object) { if (response.code == 1) { var sharePwd = response.data.share_pwd; obj.verify_page.share_pwd = sharePwd; $("#code_txt").val(sharePwd); setting.showNotifySuccess() && obj.showTip(1, "[" + manifest.getTitle() + "] 填充访问码成功", 2000); } else if (response.code == -22) { runtime.optionNotify(); } else { setting.showNotifyFail() && obj.showTip(0, "[" + manifest.getTitle() + "] 未查询到访问码", 2000); } } }); }; obj.showTip = function (code, msg, timeout) { var $element = $(".visit_error"); if (code) { $element.safeHtml('<span style="color: green;">' + msg + '</span>'); } else { $element.safeHtml('<span style="color: red;">' + msg + '</span>'); } $element.show(); setTimeout(function () { $element.hide(); }, timeout); }; return obj; }); container.define("app_manage", ["meta", "unsafeWindow"], function (meta, unsafeWindow) { var obj = {}; obj.run = function () { if (meta.existMeta("manage")) { unsafeWindow.OnePwd = container; return true; } }; return obj; }); container.define("app", ["appRunner"], function (appRunner) { var obj = {}; obj.run = function () { appRunner.run([ { name: "app_baidu", matchs: [ "baidu.com" ] }, { name: "app_weiyun", matchs: [ "weiyun.com" ] }, { name: "app_lanzous", matchs: [ "lanzous.com", "lanzoux.com" ] }, { name: "app_189", matchs: [ "cloud.189.cn" ] }, { name: "app_manage", matchs: [ "*" ] } ]); }; return obj; }); /** lib **/ container.define("$", [], function () { return window.$; }); container.use(["gm", "core", "app"], function (gm, core, app) { gm.ready(function () { core.ready(app.run); }); }); })();