-
Notifications
You must be signed in to change notification settings - Fork 173
/
ctbtn.js
197 lines (197 loc) · 12.1 KB
/
ctbtn.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
(() => {
const ctfile = {
version: "2.6.9-button",
IconPack: {
load: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0iI2U4N2E5MCI+DQogICAgPHBhdGggb3BhY2l0eT0iLjI1IiBkPSJNMTYgMCBBMTYgMTYgMCAwIDAgMTYgMzIgQTE2IDE2IDAgMCAwIDE2IDAgTTE2IDQgQTEyIDEyIDAgMCAxIDE2IDI4IEExMiAxMiAwIDAgMSAxNiA0IiAvPg0KICAgIDxwYXRoIGQ9Ik0xNiAwIEExNiAxNiAwIDAgMSAzMiAxNiBMMjggMTYgQTEyIDEyIDAgMCAwIDE2IDR6Ij4NCiAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGZyb209IjAgMTYgMTYiIHRvPSIzNjAgMTYgMTYiIGR1cj0iMnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPg0KICAgIDwvcGF0aD4NCjwvc3ZnPg==",
fail: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMCA0NEgzOEMzOS4xMDQ2IDQ0IDQwIDQzLjEwNDYgNDAgNDJWMTRMMzEgNEgxMEM4Ljg5NTQzIDQgOCA0Ljg5NTQzIDggNlY0MkM4IDQzLjEwNDYgOC44OTU0MyA0NCAxMCA0NFoiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMTggMjJMMzAgMzQiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMzAgMjJMMTggMzQiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMzAgNFYxNEg0MCIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==",
down: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC4wMSIvPjxwYXRoIGQ9Ik0xMS42Nzc3IDIwLjI3MUM3LjI3NDc2IDIxLjMxODEgNCAyNS4yNzY2IDQgMzBDNCAzNS41MjI4IDguNDc3MTUgNDAgMTQgNDBWNDBDMTQuOTQ3NCA0MCAxNS44NjQgMzkuODY4MyAxNi43MzI1IDM5LjYyMjEiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMzYuMDU0NyAyMC4yNzFDNDAuNDU3NyAyMS4zMTgxIDQzLjczMjQgMjUuMjc2NiA0My43MzI0IDMwQzQzLjczMjQgMzUuNTIyOCAzOS4yNTUzIDQwIDMzLjczMjQgNDBWNDBDMzIuNzg1IDQwIDMxLjg2ODQgMzkuODY4MyAzMC45OTk5IDM5LjYyMjEiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMzYgMjBDMzYgMTMuMzcyNiAzMC42Mjc0IDggMjQgOEMxNy4zNzI2IDggMTIgMTMuMzcyNiAxMiAyMCIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0xNy4wNjU0IDMwLjExOUwyMy45OTk5IDM3LjA3NjRMMzEuMTMxOCAzMCIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0yNCAyMFYzMy41MzgyIiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+"
},
makeBtn: (fileid, password) => {
let btn = document.createElement("div");
btn.style = "user-select: none;-webkit-user-select: none;-webkit-tap-highlight-color: transparent;display: flex;flex-direction: row;margin: 4px;height: 32px;border: 1px solid #666;border-radius: 4px;background-color: #ffffff;cursor: wait;transition: background-color 0.5s;"
let dlicon = document.createElement("img");
dlicon.style = "margin: 2px;width: 28px;height: 28px;transition: filter 0.5s;"
btn.appendChild(dlicon);
let dltitle = document.createElement("h2");
dltitle.style = "font-size: 1.5em !important;margin:0px;text-align: center;width: 100%;transition: color 0.5s;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;";
dltitle.innerText = "请稍等";
btn.appendChild(dltitle);
dlicon.src = ctfile.IconPack.load;
let initBtn = async (btn, icon, title, fileid, password) => {
let fileInfo = await ctfile.getByID(fileid, password);
let isOutDate = false;
console.log(fileInfo);
if (fileInfo.success) {
icon.src = ctfile.IconPack.down;
btn.style.backgroundColor = "#A8D8B9";
btn.style.cursor = "pointer";
btn.title = fileInfo.name;
title.innerText = fileInfo.size;
btn.addEventListener("mouseenter", event => { event.composedPath()[0].style.backgroundColor = "#86C166"; })
btn.addEventListener("mouseleave", event => { event.composedPath()[0].style.backgroundColor = isOutDate ? "#EB7A77" : "#A8D8B9"; })
btn.addEventListener("click", () => {
if (isOutDate) {
btn.style.backgroundColor = "";
dlicon.src = ctfile.IconPack.load;
dltitle.innerText = "请稍等";
initBtn(btn, dlicon, dltitle, fileid, password);
} else {
let eleLink = document.createElement('a');
eleLink.download = fileInfo.name;
eleLink.style.display = 'none';
eleLink.href = fileInfo.link;
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
}
})
setTimeout(() => {
icon.src = ctfile.IconPack.fail;
title.innerText = "链接已过期";
btn.style.backgroundColor = "#EB7A77";
btn.style.cursor = "not-allowed";
isOutDate = true;
}, 18000000)
} else {
icon.src = ctfile.IconPack.fail;
title.innerText = "下载不可用";
btn.style.backgroundColor = "#EB7A77";
btn.style.cursor = "not-allowed";
btn.title = fileInfo.errormsg;
}
}
initBtn(btn, dlicon, dltitle, fileid, password);
return btn;
},
buildToken: () => {
let token = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
return token;
},
getByLink: (link, password, token, firstCallback) => {
console.warn("ctfile.getByLink is deprecated, use ctfile.getByID instead.");
return ctfile.getByID(link.substring(link.lastIndexOf("/") + 1, (link.lastIndexOf("?") == -1) ? undefined : link.lastIndexOf("?")), (link.lastIndexOf("p=") == -1) ? password : link.substring(link.lastIndexOf("p=") + 2), token, firstCallback);
},
getByID: async (fileid, password, token = ctfile.buildToken(), firstCallback, preferNode = "dx") => {
const origin = () => {
//兼容node.js
if (document && !(document.location.origin == 'file://')) {
return document.location.origin;
} else {
return "https://ctfile.qinlili.workers.dev";
}
};
const path = id => {
switch (id.split("-").length) {
case 2: {
return "file";
};
case 3:
default: {
return "f";
}
}
}
jsonText = JSON.parse(await (await fetch("https://webapi.ctfile.com/getfile.php?path=" + path(fileid) + "&f=" + fileid + "&passcode=" + password + "&token=" + token + "&r=" + Math.random() + "&ref=" + origin(), {
"headers": {
"origin": origin(),
"referer": origin()
},
})).text());
if (jsonText.code == 200) {
if (firstCallback) {
firstCallback({
"name": jsonText.file.file_name,
"size": jsonText.file.file_size,
"time": jsonText.file.file_time,
})
};
if (jsonText.file.is_vip == 1) {
let url = false;
switch (preferNode) {
case "dx":
if (jsonText.file.vip_dx_url) {
url = jsonText.file.vip_dx_url;
break;
};
case "yd":
if (jsonText.file.vip_yd_url) {
url = jsonText.file.vip_yd_url;
break;
}
case "lt":
if (jsonText.file.vip_lt_url) {
url = jsonText.file.vip_lt_url;
break;
}
default:
case "us":
if (jsonText.file.us_downurl_a) {
url = jsonText.file.us_downurl_a;
break;
}
}
if (!url) {
return {
"success": false,
"name": jsonText.file.file_name,
"size": jsonText.file.file_size,
"time": jsonText.file.file_time,
"errormsg": "解析结果没有可用的链接!"
};
}
return {
"success": true,
"name": jsonText.file.file_name,
"size": jsonText.file.file_size,
"time": jsonText.file.file_time,
"link": url
};
} else {
jsonText2 = JSON.parse(await (await fetch("https://webapi.ctfile.com/get_file_url.php?uid=" + jsonText.file.userid + "&fid=" + jsonText.file.file_id + "&file_chk=" + jsonText.file.file_chk + "&app=0&acheck=2&rd=" + Math.random(), {
"headers": {
"origin": origin(),
"referer": origin()
},
})).text());
if (jsonText2.code == 200) {
return {
"success": true,
"name": jsonText.file.file_name,
"size": jsonText.file.file_size,
"time": jsonText.file.file_time,
"link": jsonText2.downurl
};
} else {
if (jsonText2.code == 302) {
return {
"success": false,
"name": jsonText.file.file_name,
"size": jsonText.file.file_size,
"time": jsonText.file.file_time,
"errormsg": "需要登录!"
};
} else {
return {
"success": false,
"name": jsonText.file.file_name,
"size": jsonText.file.file_size,
"time": jsonText.file.file_time,
"errormsg": jsonText2.message
};
}
}
}
} else {
return {
"success": false,
"errormsg": jsonText.file.message
};
}
}
};
if (window.ModuleLoader && ModuleLoader.useRedbankLoaderGlobal) {
ModuleLoader.loadLocal({ ctfile });
} else {
window.ctfile = ctfile;
}
})();