From e80f95d0d7b5fabc36680052b0f1179be626a8d4 Mon Sep 17 00:00:00 2001 From: neingeist Date: Wed, 26 Oct 2005 23:41:20 +0000 Subject: [PATCH] ability to protect pages very elegant workarounds brilliant thoughts --- mediawikibot.rb | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/mediawikibot.rb b/mediawikibot.rb index 1269305..5e02919 100755 --- a/mediawikibot.rb +++ b/mediawikibot.rb @@ -1,4 +1,7 @@ -#!/usr/bin/env ruby +#------------------------------------------------------------------------------ +# TODO: +# - Fix HTML parsing, no regexen! See wpEditToken+wpEdittime +# - EditToken-stuff in its own method? module MediaWikiBot @@ -12,6 +15,9 @@ class WikiBot def initialize(wiki) @wiki = wiki + + @client = HTTPAccess2::Client.new() + @client.set_cookie_store("cookie.dat") end #------------------------------------------------------------------------------ @@ -30,6 +36,13 @@ class WikiBot return result.content end + #------------------------------------------------------------------------------ + # HTTP authentication + + def set_basic_auth(user_id, passwd) + @client.set_basic_auth(@wiki, user_id, passwd) + end + #------------------------------------------------------------------------------ # MediaWiki stuff: Could be useful for other wiki bots @@ -58,9 +71,11 @@ class WikiBot return @wiki + "index.php?title=Special:Userlogin&action=submitlogin" end + def url_protect(title) + return @wiki + "index.php?title=" + url_encode(title) + "&action=protect" + end + def login(wiki_name, wiki_password) - @client = HTTPAccess2::Client.new() - @client.set_cookie_store("cookie.dat") post_form(url_submitlogin(), { "wpName" => wiki_name, @@ -119,7 +134,6 @@ class WikiBot token_page = post_form(url_delete(title), { "wpReason" => reason, "wpConfirm" => "1",}) - # FIXME: Uahh. token = token_page.scan(/name='wpEditToken' value="(.*?)"/)[0][0] post_form(url_delete(title), { "wpReason" => reason, @@ -154,12 +168,17 @@ class WikiBot $stderr.print("Submitting '", title, "'.\n") token_page = @client.get_content(url_edit(title)) - # FIXME: Uahh. + while ! token_page.match(/value="(.*?)" name="wpEdittime" /) + # FIXME: This workaround loop really fucking sucks. + token_page = @client.get_content(url_edit(title)) + end time = token_page.scan(/value="(.*?)" name="wpEdittime" /)[0][0] + # No token for MediaWiki 1.3.x if token_page =~ /wpEditToken/ token = token_page.scan(/value="(.*?)" name="wpEditToken" /)[0][0] end + post_form(url_edit_submit(title), { "wpTextbox1" => body, "wpSummary" => summary, @@ -226,6 +245,24 @@ class WikiBot get_categories(title).member?(category) end + def is_protected?(title) + return @client.get_content(url_page(title)) =~ /action=unprotect/ + end + + def protect(title, reason) + + token_page = @client.get_content(url_protect(title)) + # No token for MediaWiki 1.3.x + if token_page =~ /wpEditToken/ + token = token_page.scan(/name='wpEditToken' value="(.*?)"/)[0][0] + end + + post_form(url_protect(title), + { "wpReasonProtect" => reason, + "wpConfirmProtectB" => "confirm", + "wpEditToken" => token }) + end + end # class WikiBot end # module MediaWikiBot