mediawiki-butt 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/mediawiki/auth.rb +104 -52
- data/lib/mediawiki/butt.rb +11 -25
- data/lib/mediawiki/exceptions.rb +61 -0
- data/lib/mediawiki/query.rb +16 -41
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01b96931127f32d0a59b62876f5de8c80657cbc3
|
4
|
+
data.tar.gz: 3ef158346ca14fe0073eca30714e48c87b44684d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47a2a279b141b771ebef8a84702d7f42422ee0baa789e0ef2fd6f74e5b616c2861f9d2509df4fb5565145a1876334095965988fdaebdf3b59c0749c82f3bf862
|
7
|
+
data.tar.gz: 220e119d425714af14b50df518e02f6ff9bcacaccf799cb87c0d0ac52322fddf90fbd5a74bf580d44f97d5a7425307cb6bf6af3c600f47a10410e6f8ff25a5df
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
## Version 0
|
3
|
+
### Version 0.1.1
|
4
|
+
* Got rid of pointless array in is_current_user_bot
|
5
|
+
* Potentially fixed docs
|
6
|
+
* Raise errors on unsuccessful account creation
|
7
|
+
* #login properly returns true if the login is successful on the first try
|
8
|
+
* #logout returns true/false if it logs the user out. Basically returns true if @logged_in is true, and false if not, because the logout action has no errors.
|
9
|
+
* Account creation stuff actually returns true/false on success/fail. It also handles errors now.
|
10
|
+
* Better Category title regex in get_category_members
|
11
|
+
|
3
12
|
### Version 0.1.0
|
4
13
|
* Initial version.
|
data/lib/mediawiki/auth.rb
CHANGED
@@ -3,16 +3,10 @@ require_relative 'exceptions'
|
|
3
3
|
module MediaWiki
|
4
4
|
module Auth
|
5
5
|
|
6
|
-
# Checks the login result for errors.
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# * +result+ - The parsed version of the result parameter of the login action.
|
11
|
-
# * +secondtry+ - Whether this login is the first or second try, false for first, true for second.
|
12
|
-
#
|
13
|
-
# ==== Examples
|
14
|
-
#
|
15
|
-
# This method should not be used by normal users.
|
6
|
+
# Checks the login result for errors. Returns true if it is successful, else false with an error raised.
|
7
|
+
# @param result [String] The parsed version of the result.
|
8
|
+
# @param secondtry [Boolean] Whether this login is the first or second try. False for first, true for second.
|
9
|
+
# @return [Boolean] true if successful, else false.
|
16
10
|
def check_login(result, secondtry)
|
17
11
|
if result == "Success"
|
18
12
|
@logged_in = true
|
@@ -49,17 +43,57 @@ module MediaWiki
|
|
49
43
|
return false
|
50
44
|
end
|
51
45
|
end
|
52
|
-
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
46
|
+
|
47
|
+
# Checks the account creation result's error and raises the corresponding error.
|
48
|
+
# @param error [String] The parsed error "code" string
|
49
|
+
# @return [Boolean] Always false
|
50
|
+
def check_create(error)
|
51
|
+
if error == "noname"
|
52
|
+
raise MediaWiki::Butt::NoNameError
|
53
|
+
return false
|
54
|
+
elsif error == "userexists"
|
55
|
+
raise MediaWiki::Butt::UserExistsError
|
56
|
+
return false
|
57
|
+
elsif error == "password-name-match"
|
58
|
+
raise MediaWiki::Butt::UserPassMatchError
|
59
|
+
return false
|
60
|
+
elsif error == "password-login-forbidden"
|
61
|
+
raise MediaWiki::Butt::PasswordLoginForbiddenError
|
62
|
+
return false
|
63
|
+
elsif error == "noemailtitle"
|
64
|
+
raise MediaWiki::Butt::NoEmailTitleError
|
65
|
+
return false
|
66
|
+
elsif error == "invalidemailaddress"
|
67
|
+
raise MediaWiki::Butt::InvalidEmailAddressError
|
68
|
+
return false
|
69
|
+
elsif error == "passwordtooshort"
|
70
|
+
raise MediaWiki::Butt::PasswordTooShortError
|
71
|
+
return false
|
72
|
+
elsif error == "noemail"
|
73
|
+
raise MediaWiki::Butt::NoEmailError
|
74
|
+
return false
|
75
|
+
elsif error == "acct_creation_throttle_hit"
|
76
|
+
raise MediaWiki::Butt::ThrottledError
|
77
|
+
return false
|
78
|
+
elsif error == "aborted"
|
79
|
+
raise MediaWiki::Butt::AbortedError
|
80
|
+
return false
|
81
|
+
elsif error == "blocked"
|
82
|
+
raise MediaWiki::Butt::BlockedError
|
83
|
+
return false
|
84
|
+
elsif error == "permdenied-createaccount"
|
85
|
+
raise MediaWiki::Butt::PermDeniedError
|
86
|
+
return false
|
87
|
+
elsif error == "createaccount-hook-aborted"
|
88
|
+
raise MediaWiki::Butt::HookAbortedError
|
89
|
+
return false
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Logs the user into the wiki. This is generally required for editing and getting restricted data. Will return the result of #check_login
|
94
|
+
# @param username [String] The username
|
95
|
+
# @param password [String] The password
|
96
|
+
# @return [Boolean] True if the login was successful, false if not.
|
63
97
|
def login(username, password)
|
64
98
|
params = {
|
65
99
|
action: 'login',
|
@@ -68,10 +102,11 @@ module MediaWiki
|
|
68
102
|
format: 'json'
|
69
103
|
}
|
70
104
|
|
71
|
-
result = post(params
|
105
|
+
result = post(params)
|
72
106
|
if check_login(result["login"]["result"], false) == true
|
73
107
|
@logged_in = true
|
74
108
|
@tokens.clear
|
109
|
+
return true
|
75
110
|
elsif result["login"]["result"] == "NeedToken" && result["login"]["token"] != nil
|
76
111
|
token = result["login"]["token"]
|
77
112
|
token_params = {
|
@@ -89,13 +124,8 @@ module MediaWiki
|
|
89
124
|
end
|
90
125
|
end
|
91
126
|
|
92
|
-
# Logs the current user out
|
93
|
-
#
|
94
|
-
# ==== Examples
|
95
|
-
#
|
96
|
-
# => butt.login("MyUsername", "My5up3r53cur3P@55w0rd")
|
97
|
-
# => # do stuff
|
98
|
-
# => butt.logout
|
127
|
+
# Logs the current user out.
|
128
|
+
# @return [Boolean] True if it was able to log anyone out, false if not (basically, if someone was logged in, it returns true).
|
99
129
|
def logout
|
100
130
|
if @logged_in == true
|
101
131
|
params = {
|
@@ -105,21 +135,18 @@ module MediaWiki
|
|
105
135
|
post(params)
|
106
136
|
@logged_in = false
|
107
137
|
@tokens.clear
|
138
|
+
return true
|
139
|
+
else
|
140
|
+
return false
|
108
141
|
end
|
109
142
|
end
|
110
143
|
|
111
144
|
# Creates an account using the standard procedure.
|
112
|
-
#
|
113
|
-
#
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
# *+language+ - The language code to set as default for the account being created. Defaults to 'en' or English. Use the language code, not the name.
|
118
|
-
# *+reason+ - The reason for creating the account, shown in the account creation log. Optional.
|
119
|
-
#
|
120
|
-
# ==== Examples
|
121
|
-
#
|
122
|
-
# => butt.create_account("MyUser", "password", "es", "MyEmailAddress@MailMain.com", "Quiero un nuevo acuenta sin embargo correocontraseña")
|
145
|
+
# @param username [String] The desired username.
|
146
|
+
# @param password [String] The desired password.
|
147
|
+
# @param language [String] The language code to be set as default for the account. Defaults to 'en', or English. Use the language code, not the name.
|
148
|
+
# @param reason [String] The reason for creating the account, as shown in the account creation log. Optional.
|
149
|
+
# @return [Boolean] True if successful, false if not.
|
123
150
|
def create_account(username, password, language = 'en', *reason)
|
124
151
|
params = {
|
125
152
|
name: username,
|
@@ -130,9 +157,14 @@ module MediaWiki
|
|
130
157
|
}
|
131
158
|
|
132
159
|
result = post(params)
|
160
|
+
if result["error"] != nil
|
161
|
+
check_create(result["error"]["code"])
|
162
|
+
return false
|
163
|
+
end
|
133
164
|
|
134
165
|
if result["createaccount"]["result"] == "Success"
|
135
166
|
@tokens.clear
|
167
|
+
return true
|
136
168
|
elsif result["createaccount"]["result"] == "NeedToken"
|
137
169
|
params = {
|
138
170
|
name: username,
|
@@ -141,21 +173,25 @@ module MediaWiki
|
|
141
173
|
language: language,
|
142
174
|
token: result["createaccount"]["token"]
|
143
175
|
}
|
176
|
+
|
177
|
+
result = post(params, true, true)
|
178
|
+
if result["error"] != nil
|
179
|
+
check_create(result["error"]["code"])
|
180
|
+
return false
|
181
|
+
elsif result["createaccount"]["result"] == "Success"
|
182
|
+
return true
|
183
|
+
else
|
184
|
+
return false
|
185
|
+
end
|
144
186
|
end
|
145
187
|
end
|
146
188
|
|
147
|
-
# Creates an account using the random
|
148
|
-
#
|
149
|
-
#
|
150
|
-
#
|
151
|
-
#
|
152
|
-
#
|
153
|
-
# *+reason+ - The reason for creating the account, shown in the account creation log. Optional.
|
154
|
-
# *+language+ - The language code to set as default for the account being created. Defaults to 'en' or English. Use the language code, not the name.
|
155
|
-
#
|
156
|
-
# ==== Examples
|
157
|
-
#
|
158
|
-
# => butt.create_account_email("MyUser", "MyEmailAddress@Whatever.com", "es", "Quiero una nueva acuenta porque quiero a comer caca")
|
189
|
+
# Creates an account using the random password sent by email procedure.
|
190
|
+
# @param username [String] The desired username
|
191
|
+
# @param email [String] The desired email address
|
192
|
+
# @param language [String] The language code to be set as default for the account. Defaults to 'en', or English. Use the language code, not the name.
|
193
|
+
# @param reason [String] The reason for creating the account, as shown in the account creation log. Optional.
|
194
|
+
# @return [Boolean] True if successful, false if not.
|
159
195
|
def create_account_email(username, email, language = 'en', *reason)
|
160
196
|
params = {
|
161
197
|
name: username,
|
@@ -167,9 +203,15 @@ module MediaWiki
|
|
167
203
|
}
|
168
204
|
|
169
205
|
result = post(params)
|
206
|
+
result = post(params)
|
207
|
+
if result["error"] != nil
|
208
|
+
check_create(result["error"]["code"])
|
209
|
+
return false
|
210
|
+
end
|
170
211
|
|
171
212
|
if result["createaccount"]["result"] == "Success"
|
172
213
|
@tokens.clear
|
214
|
+
return true
|
173
215
|
elsif result["createaccount"]["result"] == "NeedToken"
|
174
216
|
params = {
|
175
217
|
name: username,
|
@@ -179,6 +221,16 @@ module MediaWiki
|
|
179
221
|
language: language,
|
180
222
|
token: result["createaccount"]["token"]
|
181
223
|
}
|
224
|
+
|
225
|
+
result = post(params, true, true)
|
226
|
+
if result["error"] != nil
|
227
|
+
check_create(result["error"]["code"])
|
228
|
+
return false
|
229
|
+
elsif result["createaccount"]["result"] == "Success"
|
230
|
+
return true
|
231
|
+
else
|
232
|
+
return false
|
233
|
+
end
|
182
234
|
end
|
183
235
|
end
|
184
236
|
end
|
data/lib/mediawiki/butt.rb
CHANGED
@@ -9,20 +9,12 @@ module MediaWiki
|
|
9
9
|
include MediaWiki::Query::Meta
|
10
10
|
include MediaWiki::Query::Properties
|
11
11
|
include MediaWiki::Query::Lists
|
12
|
-
|
13
|
-
#
|
14
|
-
# ==== Attributes
|
15
|
-
#
|
16
|
-
# * +url+ - The FULL wiki URL. api.php can be omitted, but it will make harsh assumptions about your wiki configuration.
|
17
|
-
# * +use_ssl+ - Whether or not to use SSL. Will default to true.
|
18
|
-
#
|
19
|
-
# ==== Examples
|
20
|
-
#
|
21
|
-
# The example below shows an ideal usage of the method.
|
22
|
-
# => butt = MediaWiki::Butt.new("http://ftb.gamepedia.com/api.php")
|
12
|
+
|
13
|
+
# Creates a new instance of MediaWiki::Butt. To work with any MediaWiki::Butt methods, you must first create an instance of it.
|
23
14
|
#
|
24
|
-
#
|
25
|
-
#
|
15
|
+
# @param url [String] The FULL wiki URL. api.php can be omitted, but it will make harsh assumptions about your wiki configuration.
|
16
|
+
# @param use_ssl [Boolean] Whether or not to use SSL. Will default to true.
|
17
|
+
# @return [MediaWiki::Butt] new instance of MediaWiki::Butt
|
26
18
|
def initialize(url, use_ssl = true)
|
27
19
|
if url =~ /api.php$/
|
28
20
|
@url = url
|
@@ -39,15 +31,10 @@ module MediaWiki
|
|
39
31
|
|
40
32
|
# Performs a generic HTTP POST action and provides the response. This method generally should not be used by the user, unless there is not a method provided by the Butt developers for a particular action.
|
41
33
|
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# * +setcookie+ - Whether you want to set the auth cookie. Only used in authentication. Defaults to false.
|
47
|
-
#
|
48
|
-
# ==== Examples
|
49
|
-
#
|
50
|
-
# => login = butt.post({action: 'login', lgname: username, lgpassword: password, format: 'json'})
|
34
|
+
# @param params [Hash] A basic hash containing MediaWiki API parameters. Please see the MediaWiki API for more information.
|
35
|
+
# @param autoparse [Boolean] Whether or not to provide a parsed version of the response's JSON. Will default to true.
|
36
|
+
# @param setcookie [Boolean] Whether you want to set the auth cookie. Only used in authentication. Defaults to false.
|
37
|
+
# @return [JSON/Response] Parsed JSON if autoparse is true, or raw response if not.
|
51
38
|
def post(params, autoparse = true, setcookie = false)
|
52
39
|
if setcookie == true
|
53
40
|
header = { 'Set-Cookie' => @cookie }
|
@@ -63,8 +50,8 @@ module MediaWiki
|
|
63
50
|
end
|
64
51
|
end
|
65
52
|
|
66
|
-
# Returns true if the currently logged in user is in the "bot" group.
|
67
|
-
#
|
53
|
+
# Returns true if the currently logged in user is in the "bot" group. This can be helpful to some developers, but it is mostly for use internally in MediaWiki::Butt.
|
54
|
+
# @return [Boolean] true if logged in as a bot, false if not logged in or logged in as a non-bot
|
68
55
|
def is_current_user_bot()
|
69
56
|
if @logged_in == true
|
70
57
|
params = {
|
@@ -74,7 +61,6 @@ module MediaWiki
|
|
74
61
|
format: 'json'
|
75
62
|
}
|
76
63
|
|
77
|
-
ret = Array.new
|
78
64
|
response = post(params)
|
79
65
|
response["query"]["userinfo"]["groups"].each do |g|
|
80
66
|
if g == "bot"
|
data/lib/mediawiki/exceptions.rb
CHANGED
@@ -61,5 +61,66 @@ module MediaWiki
|
|
61
61
|
"User is blocked."
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
# Start creation-specific errors
|
66
|
+
class UserExistsError < AuthenticationError
|
67
|
+
def message
|
68
|
+
"Username entered is already in use."
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class UserPassMatchError < AuthenticationError
|
73
|
+
def message
|
74
|
+
"Your password must be different from your username."
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class PasswordLoginForbiddenError < AuthenticationError
|
79
|
+
def message
|
80
|
+
"The use of this username and password has been forbidden."
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class NoEmailTitleError < AuthenticationError
|
85
|
+
def message
|
86
|
+
"No email address."
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class InvalidEmailAddressError < AuthenticationError
|
91
|
+
def message
|
92
|
+
"The email address is invalid."
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class PasswordTooShortError < AuthenticationError
|
97
|
+
def message
|
98
|
+
"The password was shorter than the value of $wgMinimalPasswordLength"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class NoEmailError < AuthenticationError
|
103
|
+
def message
|
104
|
+
"There is no email address recorded for the user."
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class AbortedError < AuthenticationError
|
109
|
+
def message
|
110
|
+
"Aborted by an extension."
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class PermDeniedError < AuthenticationError
|
115
|
+
def message
|
116
|
+
"You do not have the right to make an account."
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class HookAbortedError < AuthenticationError
|
121
|
+
def message
|
122
|
+
"An extension aborted the account creation."
|
123
|
+
end
|
124
|
+
end
|
64
125
|
end
|
65
126
|
end
|
data/lib/mediawiki/query.rb
CHANGED
@@ -4,11 +4,8 @@ module MediaWiki
|
|
4
4
|
# The metainformation could probably be handled in a much less verbose way.
|
5
5
|
module Meta
|
6
6
|
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# ==== Examples
|
10
|
-
#
|
11
|
-
# => names = butt.get_filerepo_names()
|
7
|
+
# Returns an array of all the wiki's file repository names.
|
8
|
+
# @return [Array] All wiki's file repository names.
|
12
9
|
def get_filerepo_names()
|
13
10
|
params = {
|
14
11
|
action: 'query',
|
@@ -28,15 +25,9 @@ module MediaWiki
|
|
28
25
|
|
29
26
|
module Properties
|
30
27
|
|
31
|
-
# Gets the text for the given page. Returns nil if the page does not exist.
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# * +title+ - The page.
|
36
|
-
#
|
37
|
-
# ==== Examples
|
38
|
-
#
|
39
|
-
# => text = butt.get_text("User:Pendejo")
|
28
|
+
# Gets the wiki text for the given page. Returns nil if it for some reason cannot get the text, for example, if the page does not exist. Returns a string.
|
29
|
+
# @param title [String] The page title
|
30
|
+
# @return [String/nil] String containing page contents, or nil
|
40
31
|
def get_text(title)
|
41
32
|
params = {
|
42
33
|
action: 'query',
|
@@ -60,19 +51,11 @@ module MediaWiki
|
|
60
51
|
end
|
61
52
|
|
62
53
|
module Lists
|
63
|
-
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
68
|
-
# * +limit+ - The maximum number of pages to get. Defaults to 500, and cannot be greater than 5000.
|
69
|
-
#
|
70
|
-
# ==== Examples
|
71
|
-
#
|
72
|
-
# => backlinks = butt.what_links_here("Title", 5)
|
73
|
-
# => backlinks.each do |butt|
|
74
|
-
# => puts butt
|
75
|
-
# => end
|
54
|
+
|
55
|
+
# Gets an array of backlinks to a given title.
|
56
|
+
# @param title [String] The page to get the backlinks of.
|
57
|
+
# @param limit [Int] The maximum number of pages to get. Defaults to 500, and cannot be greater than that unless the user is a bot. If the user is a bot, the limit cannot be greater than 5000.
|
58
|
+
# @return [Array] All backlinks until the limit
|
76
59
|
def what_links_here(title, limit = 500)
|
77
60
|
params = {
|
78
61
|
action: 'query',
|
@@ -101,19 +84,11 @@ module MediaWiki
|
|
101
84
|
end
|
102
85
|
return ret
|
103
86
|
end
|
104
|
-
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
# * +limit+ - The maximum number of members to get. Defaults to 500, and cannot be greater than 5000.
|
110
|
-
#
|
111
|
-
# ==== Examples
|
112
|
-
#
|
113
|
-
# => members = butt.get_category_members("Category:Butts", 5000)
|
114
|
-
# => members.each do |butts|
|
115
|
-
# => puts butts
|
116
|
-
# => end
|
87
|
+
|
88
|
+
# Returns an array of all pagee titles that belong to a given category.
|
89
|
+
# @param category [String] The category title. It can include "Category:", or not, it doesn't really matter because we will add it if it is missing.
|
90
|
+
# @param limit [Int] The maximum number of members to get. Defaults to 500, and cannot be greater than that unless the user is a bot. If the user is a bot, the limit cannot be greater than 5000.
|
91
|
+
# @return [Array] All category members until the limit
|
117
92
|
def get_category_members(category, limit = 500)
|
118
93
|
params = {
|
119
94
|
action: 'query',
|
@@ -122,7 +97,7 @@ module MediaWiki
|
|
122
97
|
format: 'json'
|
123
98
|
}
|
124
99
|
|
125
|
-
if category =~ /
|
100
|
+
if category =~ /[Cc]ategory\:/
|
126
101
|
params[:cmtitle] = category
|
127
102
|
else
|
128
103
|
params[:cmtitle] = "Category:#{category}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mediawiki-butt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eli Foster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|