mediawiki-butt 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f0cb702f0e050eec5aad59b978c319b3bdb4d88
4
- data.tar.gz: c3d22dd52186fd7e1bfd837230a5984287835087
3
+ metadata.gz: bc43e07782836b5480c6da51986099f1109c1a7d
4
+ data.tar.gz: 5e8e4ac85f0d95c6e11a522b8a00546b3dbb429a
5
5
  SHA512:
6
- metadata.gz: 5331fe0d0bb49e849ef1d68a50a461215dbb6008563d66d80105340420f86b6ae62e2fe1eab09ab5c19fb10e7a080f99dcf3c185a9b94e0d6b09735ef2afceef
7
- data.tar.gz: 62bbf5cae65347c3040dda3271ac711e5ff8e5aac2e56bee3b04df02b55edc1f1d036c04739b6a39639a25166f9fc74838e2b96a2f78ad7f7a83cdfd69d12ee0
6
+ metadata.gz: 0b770ca63c32c5476df31441d6c8571f20abe7c2234daf003609c3efc1ffb287cfdb659eb2448eea18f24791986e2c12b901a24dcf612a9aeacbf9fd87906f44
7
+ data.tar.gz: 1778b3fc82b77b5decba13a5fedc779829d50a70800126571646932af0ce2f0954309178cca71d0a3a1a69eb9b0c9714d132a1387531141fe8684b9b2808ee75
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Changelog
2
2
  ## Version 0
3
+ ### Version 0.5.0
4
+ * New Administration module for administrative methods.
5
+ * New block and unblock methods, for (un)blocking users.
6
+ * Refactor token stuff. It still doesn't work exactly how I'd like yet, but it's better than it was before. Ideally I'd like to have it get the login-specific tokens on login and set them to some well-named instance variables. Then clear those on logout.
7
+ * Single-line each `do end` loops have been converted into `{...}` style loops.
8
+ * New delete method for deleting pages.
9
+ * New move method for moving pages.
10
+
3
11
  ### Version 0.4.1
12
+ * params[:format] is now automatically set to 'json', so it no longer needs to be defined in each method.
13
+ * Fixed a lot of styling issues thanks to Rubocop.
4
14
  * check_login and check_create now use case/when statements instead of elsifs.
5
15
  * check_create no longer returns anything.
6
16
  * Update minimum Ruby version to 2.1, for refinements.
@@ -0,0 +1,54 @@
1
+ module MediaWiki
2
+ module Administration
3
+ # Blocks the user.
4
+ # @param user [String] The user to block.
5
+ # @param expiry [String] The expiry timestamp using a relative expiry time.
6
+ # @param reason [String] The reason to show in the block log.
7
+ # @param nocreate [Boolean] Whether to allow them to create an account.
8
+ # @return [String/Int] The error code, or the block ID.
9
+ def block(user, expiry = '2 weeks', reason = nil, nocreate = true)
10
+ params = {
11
+ action: 'block',
12
+ user: user,
13
+ expiry: expiry
14
+ }
15
+
16
+ token = get_token('block')
17
+ params[:reason] = reason unless reason.nil?
18
+ params[:nocreate] = '1' if nocreate == true
19
+ params[:token] = token
20
+
21
+ response = post(params)
22
+ puts response
23
+
24
+ if !response['error'].nil?
25
+ return response['error']['code']
26
+ else
27
+ return response['id'].to_i
28
+ end
29
+ end
30
+
31
+ # Unblocks the user.
32
+ # @param user [String] The user to unblock.
33
+ # @param reason [String] The reason to show in the block log.
34
+ # @return [String/Int] The error code, or the block ID.
35
+ def unblock(user, reason = nil)
36
+ params = {
37
+ action: 'unblock',
38
+ user: user
39
+ }
40
+ token = get_token('unblock')
41
+ params[:reason] = reason unless reason.nil?
42
+ params[:token] = token
43
+
44
+ response = post(params)
45
+ puts response
46
+
47
+ if !response['error'].nil?
48
+ return response['error']['code']
49
+ else
50
+ return response['id'].to_i
51
+ end
52
+ end
53
+ end
54
+ end
@@ -2,85 +2,88 @@ require_relative 'exceptions'
2
2
 
3
3
  module MediaWiki
4
4
  module Auth
5
-
6
- # Checks the login result for errors. Returns true if it is successful, else false with an error raised.
5
+ # Checks the login result for errors. Returns true if it is successful,
6
+ # else false with an error raised.
7
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.
8
+ # @param secondtry [Boolean] Whether this login is the first or second try.
9
+ # False for first, true for second.
9
10
  # @return [Boolean] true if successful, else false.
10
11
  def check_login(result, secondtry)
11
12
  case result
12
- when "Success"
13
+ when 'Success'
13
14
  @logged_in = true
14
15
  return true
15
- when "NeedToken"
16
+ when 'NeedToken'
16
17
  if secondtry == true
17
- raise MediaWiki::Butt::NeedTokenMoreThanOnceError
18
+ fail MediaWiki::Butt::NeedTokenMoreThanOnceError
18
19
  return false
19
20
  end
20
- when "NoName"
21
- raise MediaWiki::Butt::NoNameError
21
+ when 'NoName'
22
+ fail MediaWiki::Butt::NoNameError
22
23
  return false
23
- when "Illegal"
24
- raise MediaWiki::Butt::IllegalUsernameError
24
+ when 'Illegal'
25
+ fail MediaWiki::Butt::IllegalUsernameError
25
26
  return false
26
- when "NotExists"
27
- raise MediaWiki::Butt::UsernameNotExistsError
27
+ when 'NotExists'
28
+ fail MediaWiki::Butt::UsernameNotExistsError
28
29
  return false
29
- when "EmptyPass"
30
- raise MediaWiki::Butt::EmptyPassError
30
+ when 'EmptyPass'
31
+ fail MediaWiki::Butt::EmptyPassError
31
32
  return false
32
- when "WrongPass"
33
- raise MediaWiki::Butt::WrongPassError
33
+ when 'WrongPass'
34
+ fail MediaWiki::Butt::WrongPassError
34
35
  return false
35
- when "WrongPluginPass"
36
- raise MediaWiki::Butt::WrongPluginPassError
36
+ when 'WrongPluginPass'
37
+ fail MediaWiki::Butt::WrongPluginPassError
37
38
  return false
38
- when "CreateBlocked"
39
- raise MediaWiki::Butt::CreateBlockedError
39
+ when 'CreateBlocked'
40
+ fail MediaWiki::Butt::CreateBlockedError
40
41
  return false
41
- when "Throttled"
42
- raise MediaWiki::Butt::ThrottledError
42
+ when 'Throttled'
43
+ fail MediaWiki::Butt::ThrottledError
43
44
  return false
44
- when "Blocked"
45
- raise MediaWiki::Butt::BlockedError
45
+ when 'Blocked'
46
+ fail MediaWiki::Butt::BlockedError
46
47
  return false
47
48
  end
48
49
  end
49
50
 
50
- # Checks the account creation result's error and raises the corresponding error.
51
- # @param error [String] The parsed error "code" string
51
+ # Checks the account creation result's error and raises the corresponding
52
+ # exception.
53
+ # @param error [String] The parsed error code string
52
54
  def check_create(error)
53
55
  case error
54
- when "noname"
55
- raise MediaWiki::Butt::NoNameError
56
- when "userexists"
57
- raise MediaWiki::Butt::UserExistsError
58
- when "password-name-match"
59
- raise MediaWiki::Butt::UserPassMatchError
60
- when "password-login-forbidden"
61
- raise MediaWiki::Butt::PasswordLoginForbiddenError
62
- when "noemailtitle"
63
- raise MediaWiki::Butt::NoEmailTitleError
64
- when "invalidemailaddress"
65
- raise MediaWiki::Butt::InvalidEmailAddressError
66
- when "passwordtooshort"
67
- raise MediaWiki::Butt::PasswordTooShortError
68
- when "noemail"
69
- raise MediaWiki::Butt::NoEmailError
70
- when "acct_creation_throttle_hit"
71
- raise MediaWiki::Butt::ThrottledError
72
- when "aborted"
73
- raise MediaWiki::Butt::AbortedError
74
- when "blocked"
75
- raise MediaWiki::Butt::BlockedError
76
- when "permdenied-createaccount"
77
- raise MediaWiki::Butt::PermDeniedError
78
- when "createaccount-hook-aborted"
79
- raise MediaWiki::Butt::HookAbortedError
56
+ when 'noname'
57
+ fail MediaWiki::Butt::NoNameError
58
+ when 'userexists'
59
+ fail MediaWiki::Butt::UserExistsError
60
+ when 'password-name-match'
61
+ fail MediaWiki::Butt::UserPassMatchError
62
+ when 'password-login-forbidden'
63
+ fail MediaWiki::Butt::PasswordLoginForbiddenError
64
+ when 'noemailtitle'
65
+ fail MediaWiki::Butt::NoEmailTitleError
66
+ when 'invalidemailaddress'
67
+ fail MediaWiki::Butt::InvalidEmailAddressError
68
+ when 'passwordtooshort'
69
+ fail MediaWiki::Butt::PasswordTooShortError
70
+ when 'noemail'
71
+ fail MediaWiki::Butt::NoEmailError
72
+ when 'acct_creation_throttle_hit'
73
+ fail MediaWiki::Butt::ThrottledError
74
+ when 'aborted'
75
+ fail MediaWiki::Butt::AbortedError
76
+ when 'blocked'
77
+ fail MediaWiki::Butt::BlockedError
78
+ when 'permdenied-createaccount'
79
+ fail MediaWiki::Butt::PermDeniedError
80
+ when 'createaccount-hook-aborted'
81
+ fail MediaWiki::Butt::HookAbortedError
80
82
  end
81
83
  end
82
84
 
83
- # Logs the user into the wiki. This is generally required for editing and getting restricted data. Will return the result of #check_login
85
+ # Logs the user into the wiki. This is generally required for editing and
86
+ # getting restricted data. Will return the result of #check_login
84
87
  # @param username [String] The username
85
88
  # @param password [String] The password
86
89
  # @return [Boolean] True if the login was successful, false if not.
@@ -88,39 +91,39 @@ module MediaWiki
88
91
  params = {
89
92
  action: 'login',
90
93
  lgname: username,
91
- lgpassword: password,
92
- format: 'json'
94
+ lgpassword: password
93
95
  }
94
96
 
95
97
  result = post(params)
96
- if check_login(result["login"]["result"], false)
98
+ if check_login(result['login']['result'], false)
97
99
  @logged_in = true
98
100
  @tokens.clear
99
101
  true
100
- elsif result["login"]["result"] == "NeedToken" && result["login"]["token"] != nil
101
- token = result["login"]["token"]
102
+ elsif result['login']['result'] == 'NeedToken' &&
103
+ !result['login']['token'].nil?
104
+ token = result['login']['token']
102
105
  token_params = {
103
106
  action: 'login',
104
107
  lgname: username,
105
108
  lgpassword: password,
106
- format: 'json',
107
109
  lgtoken: token
108
110
  }
109
111
 
110
- #Consider refactor the @cookie initialization.
111
- @cookie = "#{result["login"]["cookieprefix"]}Session=#{result["login"]["sessionid"]}"
112
- result = post(token_params, true, { 'Set-Cookie' => @cookie })
113
- check_login(result["login"]["result"], true)
112
+ # Consider refactor the @cookie initialization.
113
+ @cookie = "#{result['login']['cookieprefix']}" \
114
+ "Session=#{result['login']['sessionid']}"
115
+ result = post(token_params, true, 'Set-Cookie' => @cookie)
116
+ check_login(result['login']['result'], true)
114
117
  end
115
118
  end
116
119
 
117
120
  # Logs the current user out.
118
- # @return [Boolean] True if it was able to log anyone out, false if not (basically, if someone was logged in, it returns true).
121
+ # @return [Boolean] True if it was able to log anyone out, false if not
122
+ # (basically, if someone was logged in, it returns true).
119
123
  def logout
120
124
  if @logged_in
121
125
  params = {
122
- action: 'logout',
123
- format: 'json'
126
+ action: 'logout'
124
127
  }
125
128
 
126
129
  post(params)
@@ -135,8 +138,11 @@ module MediaWiki
135
138
  # Creates an account using the standard procedure.
136
139
  # @param username [String] The desired username.
137
140
  # @param password [String] The desired password.
138
- # @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.
139
- # @param reason [String] The reason for creating the account, as shown in the account creation log. Optional.
141
+ # @param language [String] The language code to be set as default for the
142
+ # account. Defaults to 'en', or English. Use the language code, not
143
+ # the name.
144
+ # @param reason [String] The reason for creating the account, as shown in
145
+ # the account creation log. Optional.
140
146
  # @return [Boolean] True if successful, false if not.
141
147
  def create_account(username, password, language = 'en', *reason)
142
148
  params = {
@@ -148,28 +154,28 @@ module MediaWiki
148
154
  }
149
155
 
150
156
  result = post(params)
151
- if result["error"] != nil
152
- check_create(result["error"]["code"])
157
+ unless result['error'].nil?
158
+ check_create(result['error']['code'])
153
159
  return false
154
160
  end
155
161
 
156
- if result["createaccount"]["result"] == "Success"
162
+ if result['createaccount']['result'] == 'Success'
157
163
  @tokens.clear
158
164
  return true
159
- elsif result["createaccount"]["result"] == "NeedToken"
165
+ elsif result['createaccount']['result'] == 'NeedToken'
160
166
  params = {
161
167
  name: username,
162
168
  password: password,
163
169
  reason: reason,
164
170
  language: language,
165
- token: result["createaccount"]["token"]
171
+ token: result['createaccount']['token']
166
172
  }
167
173
 
168
174
  result = post(params, true, true)
169
- if result["error"] != nil
170
- check_create(result["error"]["code"])
175
+ if !result['error'].nil?
176
+ check_create(result['error']['code'])
171
177
  return false
172
- elsif result["createaccount"]["result"] == "Success"
178
+ elsif result['createaccount']['result'] == 'Success'
173
179
  return true
174
180
  else
175
181
  return false
@@ -180,8 +186,11 @@ module MediaWiki
180
186
  # Creates an account using the random password sent by email procedure.
181
187
  # @param username [String] The desired username
182
188
  # @param email [String] The desired email address
183
- # @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.
184
- # @param reason [String] The reason for creating the account, as shown in the account creation log. Optional.
189
+ # @param language [String] The language code to be set as default for the
190
+ # account. Defaults to 'en', or English. Use the language code, not
191
+ # the name.
192
+ # @param reason [String] The reason for creating the account, as shown in
193
+ # the account creation log. Optional.
185
194
  # @return [Boolean] True if successful, false if not.
186
195
  def create_account_email(username, email, language = 'en', *reason)
187
196
  params = {
@@ -194,30 +203,29 @@ module MediaWiki
194
203
  }
195
204
 
196
205
  result = post(params)
197
- result = post(params)
198
- if result["error"] != nil
199
- check_create(result["error"]["code"])
206
+ unless result['error'].nil?
207
+ check_create(result['error']['code'])
200
208
  return false
201
209
  end
202
210
 
203
- if result["createaccount"]["result"] == "Success"
211
+ if result['createaccount']['result'] == 'Success'
204
212
  @tokens.clear
205
213
  return true
206
- elsif result["createaccount"]["result"] == "NeedToken"
214
+ elsif result['createaccount']['result'] == 'NeedToken'
207
215
  params = {
208
216
  name: username,
209
217
  email: email,
210
218
  mailpassword: 'value',
211
219
  reason: reason,
212
220
  language: language,
213
- token: result["createaccount"]["token"]
221
+ token: result['createaccount']['token']
214
222
  }
215
223
 
216
224
  result = post(params, true, true)
217
- if result["error"] != nil
218
- check_create(result["error"]["code"])
225
+ if !result['error'].nil?
226
+ check_create(result['error']['code'])
219
227
  return false
220
- elsif result["createaccount"]["result"] == "Success"
228
+ elsif result['createaccount']['result'] == 'Success'
221
229
  return true
222
230
  else
223
231
  return false
@@ -2,6 +2,7 @@ require_relative 'auth'
2
2
  require_relative 'query'
3
3
  require_relative 'constants'
4
4
  require_relative 'edit'
5
+ require_relative 'administration'
5
6
  require 'httpclient'
6
7
  require 'json'
7
8
 
@@ -13,10 +14,12 @@ module MediaWiki
13
14
  include MediaWiki::Query::Lists
14
15
  include MediaWiki::Constants::Namespaces
15
16
  include MediaWiki::Edit
17
+ include MediaWiki::Administration
16
18
 
17
- # Creates a new instance of MediaWiki::Butt. To work with any MediaWiki::Butt methods, you must first create an instance of it.
18
- #
19
- # @param url [String] The FULL wiki URL. api.php can be omitted, but it will make harsh assumptions about your wiki configuration.
19
+ # Creates a new instance of MediaWiki::Butt. To work with any
20
+ # MediaWiki::Butt methods, you must first create an instance of it.
21
+ # @param url [String] The FULL wiki URL. api.php can be omitted, but it
22
+ # will make harsh assumptions about your wiki configuration.
20
23
  # @param use_ssl [Boolean] Whether or not to use SSL. Will default to true.
21
24
  # @return [MediaWiki::Butt] new instance of MediaWiki::Butt
22
25
  def initialize(url, use_ssl = true)
@@ -29,18 +32,32 @@ module MediaWiki
29
32
  @tokens = {}
30
33
  end
31
34
 
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.
33
- #
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.
35
+ # Performs a generic HTTP POST action and provides the response. This
36
+ # method generally should not be used by the user, unless there is not a
37
+ # method provided by the Butt developers for a particular action.
38
+ # @param params [Hash] A basic hash containing MediaWiki API parameters.
39
+ # Please see the MediaWiki API for more information.
40
+ # @param autoparse [Boolean] Whether or not to provide a parsed version
41
+ # of the response's JSON. Will default to true.
36
42
  # @param header [Hash] The header hash. Optional.
37
- # @return [JSON/HTTPMessage] Parsed JSON if autoparse is true, or raw response if not.
43
+ # @return [JSON/HTTPMessage] Parsed JSON if autoparse is true, or raw
44
+ # response if not.
38
45
  def post(params, autoparse = true, header = nil)
39
- # Note that defining the header argument as a splat argument (*header) causes errors in HTTPClient.
40
- # We must use header.nil? rather than a splat argument and defined? header due to this error.
41
- # For those interested, the error is: undefined method `downcase' for {"Set-Cookie"=>"cookie"}:Hash (NoMethodError)
42
- # This is obvisouly an error in HTTPClient, but we must work around it until there is a fix in the gem.
43
- res = header.nil? ? @client.post(@uri, params) : @client.post(@uri, params, header)
46
+ # Note that defining the header argument as a splat argument (*header)
47
+ # causes errors in HTTPClient. We must use header.nil? rather than a
48
+ # splat argument and defined? header due to this error. For those
49
+ # interested, the error is:
50
+ # undefined method `downcase' for {"Set-Cookie"=>"cookie"}:Hash
51
+ # This is obvisouly an error in HTTPClient, but we must work around it
52
+ # until there is a fix in the gem.
53
+
54
+ params[:format] = 'json'
55
+
56
+ if header.nil?
57
+ res = @client.post(@uri, params)
58
+ else
59
+ res = @client.post(@uri, params, header)
60
+ end
44
61
 
45
62
  if autoparse
46
63
  return JSON.parse(res.body)
@@ -49,14 +66,18 @@ module MediaWiki
49
66
  end
50
67
  end
51
68
 
52
- # 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.
53
- # @param username [String] The username to check. Optional. Defaults to the currently logged in user if nil.
54
- # @return [Boolean] true if logged in as a bot, false if not logged in or logged in as a non-bot
55
- def is_user_bot?(*username)
69
+ # Returns true if the currently logged in user is in the "bot" group.
70
+ # This can be helpful to some developers, but it is mostly for use
71
+ # internally in MediaWiki::Butt.
72
+ # @param username [String] The username to check. Optional. Defaults to
73
+ # the currently logged in user if nil.
74
+ # @return [Boolean] true if logged in as a bot, false if not logged in or
75
+ # logged in as a non-bot
76
+ def user_bot?(*username)
56
77
  groups = defined? username ? get_usergroups(username) : get_usergroups
57
78
 
58
79
  if groups != false
59
- return groups.include?("bot")
80
+ return groups.include?('bot')
60
81
  else
61
82
  return false
62
83
  end