raise "Target dir not found." unless Dir.exist?(pwd)
end
+ # ファイルに使用できない文字列を調べるための正規表現を定義します
+ FILEREGEXP = /\A[-_+~^0-9a-zA-Z]+(\.[-_+~^0-9a-zA-Z]+)*\z/
+
attr_reader :basepath
attr_accessor :relpath_list
def cd(pathname)
if pathname == ".."
@relpath_list.delete_at(-1) unless @relpath_list.length == 0
- elsif pathname.match(/([^\w\.\-\+\~\^]|\.{2})/) == nil
+ elsif pathname.match(FILEREGEXP)
if Dir.exist?(pwd + "/" + File.basename(pathname))
@relpath_list << File.basename(pathname)
else
# ディレクトリを絶対指定で移動するメソッド
def cd_abs(relpath_arr)
relpath_arr.each { |name|
- if name.match(/([^\w\.\-\+\~\^]|\.{2})/) != nil
+ unless name.match(FILEREGEXP)
raise WebSecurityException
end
}
fname.gsub!(/( | )/, "_")
if File.exist?(pwd + File.basename(fname))
raise FileExistedException
- elsif
- File.basename(fname).match(/([^\w\.\-\+\~\^]|\.{2})/) != nil
- raise WebSecurityException
- else
+ elsif File.basename(fname).match(FILEREGEXP)
open(pwd + File.basename(fname), "w") do |f|
f.binmode
f.write file.read
end
+ else
+ raise WebSecurityException
end
end
# ファイルを消去するメソッド
def delete(fname)
- if File.exist?(pwd + File.basename(fname)) && fname.match(/([^\w\.\-\+\~\^]|\.{2})/) == nil
+ if File.exist?(pwd + File.basename(fname)) && fname.match(FILEREGEXP)
File.delete(pwd + File.basename(fname))
else
raise WebSecurityException
dirname.gsub!(/( | )/, "_")
if File.exist?(pwd + File.basename(dirname))
raise FileExistedException
- elsif dirname.match(/([^\w\.\-\+\~\^]|\.{2})/) != nil
- raise WebSecurityException
- else
+ elsif dirname.match(FILEREGEXP)
Dir.mkdir(pwd + File.basename(dirname))
+ else
+ raise WebSecurityException
end
end
# 内部が空のディレクトリを消去するメソッド
def rmdir(dirname)
- if File.exist?(pwd + File.basename(dirname)) && dirname.match(/([^\w\.\-\+\~\^]|\.{2})/) == nil
+ if File.exist?(pwd + File.basename(dirname)) && dirname.match(FILEREGEXP)
Dir.rmdir(pwd + File.basename(dirname))
else
raise WebSecurityException
filer.relpath_list = db["relpath_list"]
db["dellist"] = []
+ count = 0
db["filelist"].each do |file|
if params["filename_" + file] == "delete" && filer.ftype(file) == "file"
filer.delete(file)
+ count = count + 1
elsif params["filename_" + file] == "delete" && filer.ftype(file) == "directory"
begin
filer.rmdir(file)
db["filelist"] = filer.ls.reverse
db["fileinfo"] = filer.lsinfo
- db["info"] = "正常にファイルの削除が完了しました。" if db["error"] == ""
+ db["info"] = "正常にファイルの削除が完了しました。" if db["error"] == "" && count != 0
# ディレクトリ製作時
when "mkdir"