
login() {
     wget  \
        -O $listf \
        -o /dev/null \
        --no-check-certificate \
	--save-cookies=${cookief} \
	--keep-session-cookies \
        --post-data='back_url=&username=admin&password='$pass'&login=Login ' \
       "${site}/login" 
}

fetch_url() {
     wget \
        --no-check-certificate \
	--load-cookies=${cookief} \
	-o /dev/null \
	-O - \
	"$1" 
}

fetch_items() {
     if [ "$1" = "-2" ]
     then
         out='$2'
         shift
     else
         out='$2 $3' 
     fi
     # generic screen scraper for Redmine...
     what="$1"
     urlbit="$2"
     fetch_url "${site}/${urlbit}?per_page=5000" | 
	     perl -p -e 's{,}{\n}go;' |
	     egrep "a href=\".*/$what/(show|edit)/" | 
             grep -v '?' | 
	     perl -p -e 's{.*a href=".*/'"$what"'/(show|edit)/(.*?)".*?>(.*?)</a>.*}{'"$out"'}o;' |
             sed -e 's;[^-a-zA-Z0-9_/ ];;g'
}

get_repo_info() {
   fetch_url "${site}/projects/settings/$1" |
	 sed -e '1,/tab-content-repository/d' -e '/tab-content-forms/,$d' | 
         egrep 'selected=|name="repository' | 
         perl -n -e 's{value="(.*?)"}{print $1,"\n"}ge;'

}

slurp_users() {
    fetch_items users users > $listf
    while read id name
    do
        eval user_$id=$name
    done < $listf
}

lookup_user() {
    nid=`echo $1 | sed -e 's/[^0-9]//g'`
    if [ "$nid" != "1" ]
    then
        eval echo \$user_$nid
    fi
}

update_users_for_proj() {
    proj=$1

    k5l=${projroot}$proj/.k5login
    if [ -r $k5l ]
    then
       :
    else
       return
    fi
    cp ${k5l} ${k5l}.new
    member_ids=`fetch_items -2 account projects/show/$proj`
    printf "member names for $proj are: "
    for id in $member_ids
    do
	 name=`lookup_user $id`
         printf "%s " $name
         if [ "$name" != "" ]
         then
	     echo $name@FNAL.GOV >> ${k5l}.new
         fi
    done
    printf "\n"
    sort -u ${k5l}.new > ${k5l}.new.sorted
    if diff ${k5l}.new.sorted ${k5l}
    then
        : userlist  unchanged
    else
        mv ${k5l}.new.sorted ${k5l}
    fi
    rm -f ${k5l}.new ${k5l}.new.sorted
}

get_post_entries() {
     grep "$datestr.*POST.*$1" $weblogfile |
       sed -e "s;.*$1/\\([^ /?]*\\).*;\\1;" |
       sort -u
}

driver() {
    login
    slurp_users
    projects_with_new_members=`get_post_entries /members/new`
    for proj in $projects_with_new_members
    do
	update_users_for_proj $proj
    done
}

test_get_repo_info() {
    tp=`get_repo_info Hello`
    echo "get_repo_info for Hello says $tp"
    tp=`get_repo_info testp1`
    echo "get_repo_info for testp1 says $tp"
}

test_login() {
    echo "Testing login"
    login
    grep "Logged in" $listf
}

test_fetch_items() {
    echo "Testing fetching projects:"
    fetch_items projects projects
    fetch_items -2 projects projects
    echo "Testing fetching Hello users:"
    fetch_items account projects/show/hello
    echo "Testing fetching all users:"
    fetch_items users users
}

test_slurp_users() {
     echo "slurping users:"
     slurp_users
     echo "user 1:"
     lookup_user 1
     echo "user 4:"
     lookup_user 4
}

test_get_post() {
   get_post_entries members/new
}

 
cd /usr/local/admin

datestr=`date '+%d/%h/%Y'`
weblogfile=/var/log/httpd/ssl_access_log
site=https://cdcvs4.fnal.gov/redmine
listf=/tmp/list_p$$
cookief=/tmp/cookies_p$$
projroot=/cvs/home/p-
read pass < .redmine_passfile

test_suite() {
 echo login
 test_login
 echo get_post
 datestr="30/Sep/2009"
 test_get_post
 echo fetch_items
 test_fetch_items
 echo slurp_users
 test_slurp_users
 echo repo_info
 test_get_repo_info
}

case $1 in
-t) test_suite;;
*)  driver 2>&1 | logger -t $0;;
esac
# cleanup
rm /tmp/*_p$$
