#!/usr/bin/ruby -Ke
=begin
  Kagemai install script (Japanese-EUC version).
  change name setup-kagemai from install_ja.rb
=end

### 󥹥ȡ

# 
$root_dir = '/usr/share/kagemai'      

# CGI 䥹륷Ȥѥɤʤ
$setup_dir = './' 

# ץȤΥǡ
$data_dir = './data'

$bin_dir = "/usr/bin"  # 桼ƥƥץ
$lib_dir = "#{$root_dir}/lib"  # 
$etc_dir = "#{$root_dir}"      # README  MRTG եʤ
$resource_dir = "#{$root_dir}/resource" # ƥץ졼ȡå꥽

$user_passwd_file  = "#{$setup_dir}/user.passwd"  # 桼Υѥɥե
$admin_passwd_file = "#{$setup_dir}/admin.passwd" # ԤΥѥɥե

$project_dir     = "#{$data_dir}/project"     # ץȤΥǡ
$mailif_logfile  = "#{$data_dir}/mailif.log"  # mailif.rb ѥե

$config_file = "#{$setup_dir}/kagemai.conf" # ե
$configback_file = "#{$setup_dir}/kagemai.conf~" # եΥХåå

require 'fileutils'

## 䤤碌
def query(msg, default)
  print "#{msg} [#{default ? "Y/n" : "y/N"}]: "
  $stdout.flush
  ans = gets.to_s.strip!
  ans.empty? ? default : (/^[Yy].*/ =~ ans) != nil
end

## uid, gid μ
$uid = $gid = -1
begin
  require 'etc.so'
  $uid = Etc.getpwnam($user).uid unless $user.to_s.empty?
  $gid = Etc.getgrnam($group).gid unless $group.to_s.empty?
rescue LoadError
  # ignore
end

## ǡѥǥ쥯ȥ/եΥ⡼
$dir_mode = 02777
$file_mode = 0666
if $uid != -1 && $gid == -1 then
  $dir_mode  = 0755
  $file_mode = 0644
end

## ǥ쥯ȥκ
dirs = %w(
  setup_dir data_dir resource_dir
  etc_dir project_dir
)

dirs.each do |name|
  dir = eval("$#{name}")
  FileUtils.mkdir_p(dir)
end
FileUtils.chmod($dir_mode, $data_dir)
FileUtils.chmod($dir_mode, $project_dir)

$ex_lib_dir = $lib_dir

## եΥԡ
unless File.exist?("#{$setup_dir}/admin.cgi")
	FileUtils.ln_s("#{$root_dir}/html/admin.cgi", "#{$setup_dir}/admin.cgi")
end
unless File.exist?("#{$setup_dir}/guest.cgi")
	FileUtils.ln_s("#{$root_dir}/html/guest.cgi", "#{$setup_dir}/guest.cgi")
end
unless File.exist?("#{$setup_dir}/user.cgi")
	FileUtils.ln_s("#{$root_dir}/html/user.cgi", "#{$setup_dir}/user.cgi")
end
unless File.exist?("#{$setup_dir}/kagemai.css")
	FileUtils.cp("#{$root_dir}/html/kagemai.css", "#{$setup_dir}/kagemai.css")
end
unless File.exist?("#{$setup_dir}/wallpaper.gif")
	FileUtils.ln_s("#{$root_dir}/html/wallpaper.gif", "#{$setup_dir}/wallpaper.gif")
end

## ץȥե빹ؿ
def update_file(filename, regexp, replace)
  stat = FileUtils.stat(filename)

  src = File.open(filename){|file| file.read}
  
  File.open(filename, 'w') do |file|
    file.puts src.sub(regexp, replace)
  end

  FileUtils.chmod(stat.mode, filename)
  FileUtils.utime(stat.atime, stat.mtime, filename)
end
$stdout.flush

###########################################################################
## kagemai.conf 

unless File.exist?($config_file) then
  File.open($config_file, 'w') do |file|
    file.puts "module Kagemai"
    file.puts "  Config[:project_dir] = '#{$project_dir}'"
    file.puts "end"
  end
  FileUtils.chmod($file_mode, $config_file)
end

unless File.exist?($configback_file) then
	FileUtils.touch($configback_file)
	FileUtils.chmod($file_mode, $configback_file)
end

## ѥɥեκ

puts ""
[$user_passwd_file, $admin_passwd_file].each do |passwd|
  unless File.exist?(passwd) then
    if query(" '#{passwd}' ޤ?", true) then
      print 'name: '
      $stdout.flush
      name = gets.strip
		if  File.exist?("/usr/bin/htpasswd")
      	system "/usr/bin/htpasswd -c #{passwd} #{name}" unless name == ''
		else
      	system "/usr/bin/htpasswd2 -c #{passwd} #{name}" unless name == ''
		end
    end
  end
end
$stdout.flush

## /usr/share/doc/kagemai/examples/dot.htaccess  
## åȥå .htaccess  rename
## ڤӥѥɥեΥѥԽ

File.open(".htaccess", "w") { |write_file|
	userpasswd = "#{Dir.pwd}/user.passwd"
	adminpasswd = "#{Dir.pwd}/admin.passwd"
	File.open("/usr/share/doc/kagemai/examples/dot.htaccess"){|file|
		while line = file.gets
		line.gsub!(/userpasswd/, userpasswd)
		line.gsub!(/adminpasswd/, adminpasswd)
		write_file.puts line
	end
	}
}
$stdout.flush
