class DokuWiki::DokuWikiAccess
Class Functions¶ ↑
require 'dokuwiki" DokuWiki.new( hostname, urlpath = nil ) DokuWiki.media_dir DokuWiki.upload_dir DokuWiki.wait_second DokuWiki.namespace( wikipath ) DokuWiki.edit_url( wikipath ) DokuWiki.get( url ) DokuWiki.login( wikipath, user, pass ) DokuWiki.downloaded?( filename, buffer ) DokuWiki.file_put_contents( filename, line, mode = 'w+' ) DokuWiki.save_wiki_source( page, filename ) DokuWiki.save_wiki_body( filename, url ) DokuWiki.save_wiki_media( filename, url ) DokuWiki.save_wiki_path( wikipath ) DokuWiki.uploaded?( filename, buffer ) DokuWiki.save_uploaded( filename ) DokuWiki.upload_media_file?( wikipath, filename ) DokuWiki.upload_wiki_file( wikipath, filename ) DokuWiki.upload_file( wikipath, filename )
Constants
- COOKIES
filename for cookie cache
- EXTENSION
extension for files in dokuwiki syntax
Attributes
media_dir[RW]
directory for media download cache
upload_dir[RW]
directory for upload cache
Public Class Methods
new( hostname, urlpath = nil )
click to toggle source
define server location
# File lib/dokuwiki.rb, line 57 def initialize( hostname, urlpath = nil ) @site = "https://#{hostname}" @site << urlpath unless urlpath.nil? @site.freeze @dokuwiki_page_url = "#{@site}/doku.php?id=".freeze @dokuwiki_css_url = "#{@site}/lib/exe/css.php?t=".freeze @dokuwiki_media_url = "#{@site}/lib/exe/fetch.php?cache=&media=".freeze @dokuwiki_media_upload_url = "#{@site}/lib/exe/ajax.php?" \ 'tab_files=files&tab_details=view&do=media&ns='.freeze @media_dir = nil @upload_dir = nil @lastpage = nil @cookies = nil @sectok = nil @agent = nil end
Public Instance Methods
downloaded?( filename, buffer )
click to toggle source
check if downloaded file has changed
# File lib/dokuwiki.rb, line 140 def downloaded?( filename, buffer ) return false unless File.exist?( filename ) old = File.read( filename, encoding: buffer.encoding ) return true if buffer == old false end
edit_url( wikipath )
click to toggle source
make edit url
# File lib/dokuwiki.rb, line 93 def edit_url( wikipath ) "#{@dokuwiki_page_url}#{wikipath}&do=edit" end
file_put_contents( filename, buffer, mode = 'w+' )
click to toggle source
write buffer to file
# File lib/dokuwiki.rb, line 150 def file_put_contents( filename, buffer, mode = 'w+' ) return if downloaded?( filename, buffer ) File.open( filename, mode ) do |f| f.write( buffer ) f.close end end
get( url )
click to toggle source
get url
# File lib/dokuwiki.rb, line 107 def get( url ) p url wait_second @agent.get( url ) end
login( wikipath, user, pass )
click to toggle source
login into DokuWiki
at given path
# File lib/dokuwiki.rb, line 114 def login( wikipath, user, pass ) Timeout.timeout( 300 ) do @agent = Mechanize.new @agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE @agent.agent.http.reuse_ssl_sessions = false # @agent.agent.http.ca_file = ca_path if @cookies.nil? url = @dokuwiki_page_url + wikipath page = get( url ) # Submit the login form wait_second page = page.form_with( id: 'dw__login' ) do |f| f.field_with( name: 'u' ).value = user f.field_with( name: 'p' ).value = pass f.checkbox_with( name: 'r' ).check end.click_button f = page.forms[ 1 ] @sectok = f.field_with( name: 'sectok' ).value @agent.cookie_jar.save( COOKIES ) else @agent.cookie_jar.load( COOKIES ) end end end
namespace( wikipath )
click to toggle source
convert path to namesape
# File lib/dokuwiki.rb, line 88 def namespace( wikipath ) wikipath.gsub( ':', '%3A' ).freeze end
save_uploaded( filename )
click to toggle source
save content to avoid useless edits
# File lib/dokuwiki.rb, line 220 def save_uploaded( filename ) print system( "cp -pv '#{filename}' '#{@upload_dir}/'" ) end
save_wiki_body( filename, url )
click to toggle source
save wiki body to file
# File lib/dokuwiki.rb, line 169 def save_wiki_body( filename, url ) page = get( url ) file_put_contents( filename, page.body ) end
save_wiki_media( filename, url )
click to toggle source
save wiki media body to file
# File lib/dokuwiki.rb, line 175 def save_wiki_media( filename, url ) path = if @media_dir.nil? filename else "#{@media_dir}/#{filename}" end save_wiki_body( path, url ) end
save_wiki_path( wikipath )
click to toggle source
save wiki path to file
# File lib/dokuwiki.rb, line 186 def save_wiki_path( wikipath ) filename = wikipath.split( ':' ).last case wikipath when /[.]jpe?g$/, /[.]png$/, /[.]pdf$/ url = @dokuwiki_media_url + wikipath save_wiki_media( filename, url ) when /[.]css$/ url = @dokuwiki_css_url + wikipath.sub( /[.]css$/, '' ) save_wiki_media( filename, url ) when /[.]html$/ url = @dokuwiki_page_url + wikipath.sub( /[.]html$/, '' ) save_wiki_body( filename, url ) else url = edit_url( wikipath ) filename << ".#{EXTENSION}" page = get( url ) save_wiki_source( page, filename ) end end
save_wiki_source( page, filename )
click to toggle source
save wiki source to file
# File lib/dokuwiki.rb, line 160 def save_wiki_source( page, filename ) f = page.form_with( id: 'dw__editform' ) wikitext = f.field_with( name: 'wikitext' ).value.delete( "\r" ) file_put_contents( filename, wikitext ) button = f.button_with( name: 'do[draftdel]' ) @agent.submit( f, button ) end
upload_file( wikipath, filename )
click to toggle source
upload a file at given path
# File lib/dokuwiki.rb, line 253 def upload_file( wikipath, filename ) p filename raw = File.read( filename ) return if uploaded?( filename, raw ) case filename when /[.]#{EXTENSION}$/ upload_wiki_file( wikipath, filename ) else upload_media_file( wikipath, filename, raw ) end end
upload_media_file( wikipath, filename, raw )
click to toggle source
upload media file at path
# File lib/dokuwiki.rb, line 225 def upload_media_file( wikipath, filename, raw ) p filename headers = { 'Content-Type' => 'application/octet-stream', 'X-File-Name' => filename } url = upload_url( wikipath, filename ) p url wait_second pp @agent.post( url, raw, headers ) save_uploaded( filename ) end
upload_url( wikipath, filename )
click to toggle source
make upload url
# File lib/dokuwiki.rb, line 98 def upload_url( wikipath, filename ) namespace = namespace( wikipath ) url = "#{@dokuwiki_media_upload_url}#{namespace}§ok=#{@sectok}" url << '&mediaid=&call=mediaupload' url << "&qqfile=#{filename}&ow=true" url end
upload_wiki_file( wikipath, filename )
click to toggle source
edit wiki source at path
# File lib/dokuwiki.rb, line 239 def upload_wiki_file( wikipath, filename ) raw = File.read( filename ).gsub( "\n", "\r\n" ) basename = filename.sub( /[.]#{EXTENSION}$/, '' ) finalpath = "#{wikipath}:#{basename}" page = get( edit_url( finalpath ) ) f = page.form_with( id: 'dw__editform' ) f.field_with( name: 'wikitext' ).value = raw f.field_with( name: 'summary' ).value = 'automated by qscript' button = f.button_with( name: 'do[save]' ) pp @agent.submit( f, button ) save_uploaded( filename ) end
uploaded?( filename, buffer )
click to toggle source
check if uploaded file has changed
# File lib/dokuwiki.rb, line 207 def uploaded?( filename, buffer ) return false if @upload_dir.nil? savedfile = "#{@upload_dir}/#{filename}" return false unless File.exist?( savedfile ) old = File.read( savedfile, encoding: buffer.encoding ) return true if buffer == old false end
wait_second()
click to toggle source
be nice to the server
# File lib/dokuwiki.rb, line 75 def wait_second now = Time.now.to_i # p [ 'wait_second', now, $lastpage ] unless @lastpage.nil? if now <= @lastpage + 2 sleep 2 now = Time.now.to_i end end @lastpage = now end