ability to protect pages
very elegant workarounds brilliant thoughts
This commit is contained in:
		
							parent
							
								
									50e54db5b7
								
							
						
					
					
						commit
						e80f95d0d7
					
				
					 1 changed files with 42 additions and 5 deletions
				
			
		| 
						 | 
					@ -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
 | 
					module MediaWikiBot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +15,9 @@ class WikiBot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def initialize(wiki)
 | 
					  def initialize(wiki)
 | 
				
			||||||
    @wiki = wiki
 | 
					    @wiki = wiki
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @client = HTTPAccess2::Client.new()
 | 
				
			||||||
 | 
					    @client.set_cookie_store("cookie.dat")
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  #------------------------------------------------------------------------------
 | 
					  #------------------------------------------------------------------------------
 | 
				
			||||||
| 
						 | 
					@ -30,6 +36,13 @@ class WikiBot
 | 
				
			||||||
    return result.content
 | 
					    return result.content
 | 
				
			||||||
  end
 | 
					  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
 | 
					  # MediaWiki stuff: Could be useful for other wiki bots
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,9 +71,11 @@ class WikiBot
 | 
				
			||||||
    return @wiki + "index.php?title=Special:Userlogin&action=submitlogin"
 | 
					    return @wiki + "index.php?title=Special:Userlogin&action=submitlogin"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def url_protect(title)
 | 
				
			||||||
 | 
					    return @wiki + "index.php?title=" + url_encode(title) + "&action=protect"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def login(wiki_name, wiki_password)
 | 
					  def login(wiki_name, wiki_password)
 | 
				
			||||||
    @client = HTTPAccess2::Client.new()
 | 
					 | 
				
			||||||
    @client.set_cookie_store("cookie.dat")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    post_form(url_submitlogin(), 
 | 
					    post_form(url_submitlogin(), 
 | 
				
			||||||
      { "wpName" => wiki_name,
 | 
					      { "wpName" => wiki_name,
 | 
				
			||||||
| 
						 | 
					@ -119,7 +134,6 @@ class WikiBot
 | 
				
			||||||
    token_page = post_form(url_delete(title),
 | 
					    token_page = post_form(url_delete(title),
 | 
				
			||||||
      { "wpReason" => reason,
 | 
					      { "wpReason" => reason,
 | 
				
			||||||
        "wpConfirm" => "1",})
 | 
					        "wpConfirm" => "1",})
 | 
				
			||||||
    # FIXME: Uahh.
 | 
					 | 
				
			||||||
    token = token_page.scan(/name='wpEditToken' value="(.*?)"/)[0][0]
 | 
					    token = token_page.scan(/name='wpEditToken' value="(.*?)"/)[0][0]
 | 
				
			||||||
    post_form(url_delete(title),
 | 
					    post_form(url_delete(title),
 | 
				
			||||||
      { "wpReason" => reason,
 | 
					      { "wpReason" => reason,
 | 
				
			||||||
| 
						 | 
					@ -154,12 +168,17 @@ class WikiBot
 | 
				
			||||||
    $stderr.print("Submitting '", title, "'.\n")
 | 
					    $stderr.print("Submitting '", title, "'.\n")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    token_page = @client.get_content(url_edit(title))
 | 
					    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]
 | 
					    time = token_page.scan(/value="(.*?)" name="wpEdittime" /)[0][0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # No token for MediaWiki 1.3.x
 | 
					    # No token for MediaWiki 1.3.x
 | 
				
			||||||
    if token_page =~ /wpEditToken/ 
 | 
					    if token_page =~ /wpEditToken/ 
 | 
				
			||||||
      token = token_page.scan(/value="(.*?)" name="wpEditToken" /)[0][0]
 | 
					      token = token_page.scan(/value="(.*?)" name="wpEditToken" /)[0][0]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    post_form(url_edit_submit(title),
 | 
					    post_form(url_edit_submit(title),
 | 
				
			||||||
      { "wpTextbox1" => body,
 | 
					      { "wpTextbox1" => body,
 | 
				
			||||||
        "wpSummary" => summary,
 | 
					        "wpSummary" => summary,
 | 
				
			||||||
| 
						 | 
					@ -226,6 +245,24 @@ class WikiBot
 | 
				
			||||||
    get_categories(title).member?(category)
 | 
					    get_categories(title).member?(category)
 | 
				
			||||||
  end
 | 
					  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 # class WikiBot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end # module MediaWikiBot 
 | 
					end # module MediaWikiBot 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue