-
Notifications
You must be signed in to change notification settings - Fork 2
/
upload.mjs
96 lines (86 loc) · 2.33 KB
/
upload.mjs
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
/*
edit.js
MediaWiki API Demos
Demo of `Edit` module: POST request to edit a page
MIT license
*/
import originalRequest from "request";
const request = originalRequest.defaults({ jar: true });
const url = "https://commons.wikimedia.org/w/api.php";
// Step 1: GET request to fetch login token
export default function getLoginToken(callback, pageName, content) {
const params_0 = {
action: "query",
meta: "tokens",
type: "login",
format: "json",
};
request.get({ url: url, qs: params_0 }, function (error, res, body) {
if (error) {
return;
}
const data = JSON.parse(body);
loginRequest(data.query.tokens.logintoken, callback, pageName, content);
});
}
// Step 2: POST request to log in.
// Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest(login_token, callback, pageName, content) {
const params_1 = {
action: "login",
lgname: process.env.MEDIAWIKI_USERNAME,
lgpassword: process.env.MEDIAWIKI_PASSWORD,
lgtoken: login_token,
format: "json",
};
request.post({ url: url, form: params_1 }, function (error, res, body) {
if (error) {
return;
}
getCsrfToken(callback, pageName, content);
});
}
// Step 3: GET request to fetch CSRF token
function getCsrfToken(callback, pageName, content) {
const params_2 = {
action: "query",
meta: "tokens",
format: "json",
};
request.get({ url: url, qs: params_2 }, function (error, res, body) {
if (error) {
return;
}
const data = JSON.parse(body);
editRequest(data.query.tokens.csrftoken, callback, pageName, content);
});
}
// Step 4: POST request to edit a page
function editRequest(csrf_token, callback, pageName, content) {
const params_3 = {
action: "edit",
title: pageName,
text: JSON.stringify(content),
token: csrf_token,
format: "json",
};
request.post({ url: url, form: params_3 }, function (error, res, body) {
if (error) {
return;
}
callback();
console.log(body);
});
}
// Start From Step 1
// import * as dotenv from "dotenv";
// dotenv.config();
// getLoginToken(
// () => {
// console.log("success:");
// },
// "Data:Sandbox/JosephineBot/uploadTest.tab",
// "test"
// );