proc homedir { conn ctx } {
  set url [ns_conn url $conn]
  set user {}
  set file {}
  regexp {^/users/([^/]*)(/.*)?$} $url dummy user file
  # ns_returnnotice 200 "url is $url user is $user, file is $file"
  set userfile [getUserFile $user $file]
  set type [ns_guesstype $userfile]
  if {[string match "*[ns_config ns/server/[ns_info server]/adp map]" $userfile]} {
    # ns_log notice "adp parsing $userfile"
    set cwd [pwd]
    cd [file dirname $userfile]
    # ns_return 200 text/html [ns_adp_parse -file $userfile]
    set result [catch {ns_adp_parse -file $userfile} error]
    if {$result} {
      ns_return 200 text/html $error
    } else {
      ns_return 200 text/html $error
    }
    cd $cwd
  } else {
    switch $type {
      "*/*" {
      }
      default {
	ns_returnfile 200 $type $userfile
      }
    }
  }

  if {[catch {set fp [open $userfile]}]} {
    ns_returnnotfound
    return
  }
}

proc getUserFile {user path} {
  foreach tail [split ,[ns_config ns/server/[ns_info server] directoryfile] ,] {
    set userfile "[glob ~$user]/public_html$path$tail"
    if {[file exists $userfile] && ![file isdirectory $userfile]} {
      return $userfile
    }
  }
  ns_returnnotfound
  # break
}

ns_register_proc GET /users/ homedir
ns_register_proc POST /users/ homedir
ns_register_proc HEAD /users/ homedir

proc userRedir {conn arg why} {
  set url [ns_conn url]
  regsub {^/~(.*)} $url {/users/\1} redir
  ns_log notice "url is $url, redir is $redir"
  ns_returnredirect $redir
  return filter_break
}

ns_register_filter preauth GET /~* userRedir

