module "/pliant/protocol/http/server.pli" module "/pliant/protocol/http/style/default.style" module "/pliant/protocol/common/mime.pli" module "/pliant/language/context.pli" module "/pliant/language/compiler.pli" module "/pliant/language/stream.pli" module "/pliant/admin/file.pli" module "/pliant/admin/execute.pli" module "/pliant/util/encoding/neutral.pli"
plugin timeout constant tar_timeout 3600 # the downgrade.tgz should be packed in less than xxx seconds constant upgrade_timeout 7200 # the downgrade.tgz should have been remotely removed in less than xxx seconds
module "/pliant/fullpliant/this_computer.pli" constant fullpliant this_computer:env:"pliant":"system":"distribution"="fullpliant" if os_api="linux" module "/pliant/linux/kernel/shutdown.pli" if fullpliant module "/pliant/fullpliant/shutdown.pli"
module "/pliant/appli/database.pli"
method page apply_uploaded_file src dest fileoptions0 arg_rw HtmlPage page ; arg Str src dest fileoptions0 var Str ext := dest (dest search "." dest:len) dest:len if ext=".pdb" and (data_file_switch src dest)=success return if fullpliant and ext=".tgz" and file_os_name:dest=file_os_name:"file:/boot/upgrade.tgz" file_delete "file:/boot/downgrade.tgz" execute "pliant module /pliant/fullpliant/recover.pli command 'downgrade "+string:upgrade_timeout+"'" detached var Float remain := tar_timeout while remain>0 and (file_query "file:/boot/downgrade.tgz" standard)=undefined sleep 1 if remain>0 var Array:FileInfo files := file_list "file:/pliant/binary/" standard for (var Int i) 0 files:size-1 if files:i:extension=".dump" file_delete files:i:name file_move src dest file_extract dest "file:/" file_delete dest page shutdown 120 "restart" eif fullpliant and ext=".tgz" and file_os_name:dest=file_os_name:"file:/boot/pliant.tgz" var Array:FileInfo files := file_list "file:/pliant/binary/" standard for (var Int i) 0 files:size-1 if files:i:extension=".dump" file_delete files:i:name file_move src dest file_extract dest "file:/" file_delete dest page shutdown 120 "restart" eif fullpliant and os_api="linux" and ext=".tgz" and (file_os_name:dest=file_os_name:"file:/boot/fullpliant.tgz" or file_os_name:dest=file_os_name:"file:/boot/kernel.tgz") var Array:FileInfo files := file_list "file:/pliant/binary/" standard for (var Int i) 0 files:size-1 if files:i:extension=".dump" file_delete files:i:name file_move src dest page shutdown 120 "" file_move "security:/" "file:/pliant_security.backup/" file_extract dest "file:/" file_tree_delete "security:/" file_move "file:/pliant_security.backup/" "security:/" pliant_load_module "/pliant/appli/file_browser/lilo.pli" the_module:"/pliant/language/basic/safe.pli" 0 (null map Module) if file_os_name:dest=file_os_name:"file:/boot/kernel.tgz" file_tree_delete "file:/sbin/" file_tree_delete "file:/etc/" file_tree_delete "file:/usr/" file_tree_delete "file:/var/" file_delete "file:/boot/modules.tgz" file_move dest "file:/boot/modules.tgz" else file_delete dest kernel_shutdown true var Str fileoptions := shunt fileoptions0<>"" fileoptions0 (file_query dest extended):options var FileInfo old := file_query dest extended if (file_move src dest)=failure file_delete dest file_move src dest file_configure dest fileoptions
function rec_path_size path count size arg Str path ; arg_rw Int count ; arg_rw Intn size var Array:FileInfo files := file_list path extended+directories for (var Int i) 0 files:size-1 if files:i:is_link void eif files:i:is_directory rec_path_size files:i:name count size else count += 1 ; size += files:i size
function path_size path count size arg Str path ; arg_w Int count ; arg_w Intn size count := 0 ; size := 0 rec_path_size path count size
method page browse_directory path options write arg_rw HtmlPage page ; arg Str path options ; arg CBool write implicit page if options="delete" and write [Are you sure that you want to delete directory] ; fixed:(text " "+path) ; eol button "yes" noeol file_tree_delete path goto_backward button "no" goto_backward eif options="list" var Array:FileInfo files := file_list path standard+relative+directories for (var Int i) 0 files:size-1 html "<pfile name=[dq]"+(html_encode files:i:name)+"[dq] size=[dq]"+(string files:i:size)+"[dq] date=[dq]"+(string files:i:datetime)+"[dq] options=[dq]"+(html_encode files:i:options)+"[dq] />[lf]" else var CBool detailed := (options option "detailed") and allowed:"administrator" title path table columns 2 border 0 cell [Path:] cell (fixed text:path) if not detailed and allowed:"administrator" link "compute disk usage" "./" options "detailed"
|
var Array:FileInfo files := file_list path standard+relative+directories var (Index Str FileInfo) sorted for (var Int i) 0 files:size-1 sorted insert files:i:name files:i
|
var Array:FileInfo files := file_list path standard+relative+directories+sorted
|
var Int total_count := 0 ; var Intn total_size := 0 table columns (shunt detailed 6 5) cell header bold [name] if detailed cell header bold [count] cell header bold [size] cell header bold [date ] note "*" title "Pliant date format" [The date is displayed using] ; fixed [ ] ; italic [year] ; [/] ; italic [month] ; [/] ; italic [day] ; [ ] ; italic [hour] ; [:] ; italic [minute] ; [:] ; italic [second] ; fixed [ ] ; [format.] cell header void cell header void
|
var Pointer:FileInfo f :> sorted first while exists:f
|
for (var Int i) 0 files:size-1 var Pointer:FileInfo f :> files i
|
html "<pfile name=[dq]"+(html_encode f:name)+"[dq] size=[dq]"+(string f:size)+"[dq] date=[dq]"+(string f:datetime)+"[dq] options=[dq]"+(html_encode f:options)+"[dq] />[lf]" if f:is_directory cell bold link f:name (neutral_encode f:name) if detailed path_size path+f:name (var Int count) (var Intn size) cell italic (text string:count) cell if (options option "byte") italic (text string:size) else italic (text (string size\2^20)+" MB") total_count += count ; total_size += size else cell void cell void cell small if (file_list path+f:name standard+directories):size=0 and write link "delete" (neutral_encode f:name) options "delete" cell void else cell # link f:name neutral_encode:(shunt f:extension<>".page" f:name f:path+f:stripped_name+".html") no_extension link f:name (neutral_encode f:name) no_extension if detailed cell void cell text (string f:size "separated [dq]"+character:183+"[dq]") cell text (string f:datetime) cell small var Str mime := query_mime_type f:extension if not (mime parse "binary/" any) and not (mime parse "image/" any) link "view" (neutral_encode f:name) no_extension options "view" ; fixed [ ] if write link "edit" (neutral_encode f:name) no_extension options "edit" ; fixed [ ] link "download" (neutral_encode f:name) no_extension options "download" ; fixed [ ] if write link "copy" (neutral_encode f:name) no_extension options "copy" ; fixed [ ] link "delete" (neutral_encode f:name) no_extension options "delete" cell var Str vp := virtual_path virtual_path := path+f:name execute_dynamic_page "pliant:/pliant/appli/file_browser/"+(f:extension 1 f:extension:len)+".html" virtual_path := vp total_count += 1 ; total_size += f size
|
f :> sorted next f
|
if detailed cell header [total] cell italic (text string:total_count) cell if (options option "byte") italic (text string:total_size) else italic (text (string total_size\2^20)+" MB") cell void cell void cell void if write file_upload "" (var Str filename) noeol button "Upload" if (file_query filename standard)=defined var Str remote := filename option "remote_name" Str if remote<>"" apply_uploaded_file filename path+remote "" reload_page else [I have not received the file name !] else [I have not received the file !] para [The explaination might be that your browser does not support uploading because it cannot send multipart forms.] ; eol [If you wonder what browsers supports uploading, then all I can tel you is that Nestcape 4 and Mozilla do.] input "" (var Str filename2) noeol button "Create file" noeol (var Stream s) open path+filename2 out+safe ; s close reload_page button "Create directory" file_tree_create path+filename2+"/" reload_page # input "Target computer: " (var Str target) noeol # input "Password: " (var Str passwd) password noeol # button "Synchronize" # void table columns 1 cell table columns 2 border 0 cell input "Name pattern: " (var Str name_pattern) if allowed:"administrator" input "Content pattern: " (var Str content_pattern) noeol select "Case sensitive: " (var Str case_sensitive) option "no" "" option "yes" "yes" cell button "Search" title "Files search report" table columns 2 border 0 cell [Path:] cell (fixed text:path) if name_pattern<>"" cell [Name pattern:] cell (fixed text:name_pattern) if content_pattern<>"" cell [Content pattern:] cell (fixed text:content_pattern) var Array:FileInfo all_files := file_list path standard+relative+directories+recursive var CBool case := case_sensitive="yes" if content_pattern<>"" and allowed:"administrator" table columns 2 for (var Int i) 0 all_files:size-1 if name_pattern="" or (all_files:i:name_without_path search name_pattern -1)<>(-1) (var Stream s) open path+all_files:i:name in+safe while not s:atend var Str l := s readline var CBool matching if case matching := (l search content_pattern -1)<>(-1) else matching := (upper:l search upper:content_pattern -1)<>(-1) if matching cell link all_files:i:name all_files:i:path no_extension cell small fixed text:l ; eol while not s:atend var Str l := s readline if case matching := (l search content_pattern -1)<>(-1) else matching := (upper:l search upper:content_pattern -1)<>(-1) if matching fixed text:l ; eol else for (var Int i) 0 all_files:size-1 if name_pattern="" or (all_files:i:name_without_path search name_pattern -1)<>(-1) link all_files:i:name all_files:i:path no_extension ; eol
method page browse_file path options write arg_rw HtmlPage page ; arg Str path options ; arg CBool write implicit page if options="view" reset_http_answer http_request send_static_file path "filter_ascii" eif options="edit" and write small bold text:path var FileInfo info := file_query path extended if info:link<>"" text " -> "+info:link html (repeat 5 " ") text (string info:size)+" bytes last modifyed on "+(string info:datetime) eol var Str all := "" (var Stream s1) open path in+safe while not s1:atend all += s1:readline+"[lf]" text_input "" all columns 80 rows 35 button "Update "+(path (path search_last "/" -1)+1 path:len) (var Stream s2) open path out+safe s2 writechars all goto_backward eif options="download" reset_http_answer http_request send_static_file path "filter_binary" eif options="copy" and write [Move ] ; fixed:(text " "+path+" ") input " to: " (var Str to) button "Copy" noeol var Str dest := to if (dest 0 1)<>"/" and (dest search ":" -1)=(-1) dest := (path 0 (path search_last "/" -1)+1)+dest else requires "administrator" if (reverse:dest 0 1)="/" dest += path (path search_last "/" path:len)+1 path:len file_copy path dest goto_backward button "Move" noeol var Str dest := to if (dest 0 1)<>"/" and (dest search ":" -1)=(-1) dest := (path 0 (path search_last "/" -1)+1)+dest else requires "administrator" if (reverse:dest 0 1)="/" dest += path (path search_last "/" path:len)+1 path:len file_move path dest goto_backward button "Cancel" goto_backward eif options="delete" and write [Are you sure that you want to delete file] ; fixed:(text " "+path) ; eol button "yes" noeol file_delete path goto_backward button "no" goto_backward else # var Str ext := path (path search_last "." path:len) path:len # if addressof:(query_mime_dynamic_filter ext)=addressof:(query_mime_dynamic_filter ".html") or execute_dynamic_page:path=failure reset_http_answer http_request send_static_file path options
method page file_browser path options write arg_rw HtmlPage page ; arg Str path options ; arg CBool write implicit page if path:len>0 and (path path:len-1)="/" browse_directory neutral_decode:path options write else browse_file neutral_decode:path options write
export '. apply_uploaded_file' '. file_browser'
|