1
2
3
4
5
6
7
8
9
10 grouping_limit=$((26 * 3))
11
12
13 index_file=/var/www/crew.c-base.org/index.html
14 member_file=/var/www/crew.c-base.org/member/memberlist.txt
15 staging_file=/var/www/crew.c-base.org/testindex.html
16 html_header=/var/www/crew.c-base.org/template-crew_header.html
17 html_footer=/var/www/crew.c-base.org/template-crew_footer.html
18 dontlist_filename=".dontlist"
19
20
21 declare -a all_homes
22 declare -a ldap_users
23
24
25 clearboth="</div><div style=\"clear:both;\"></div>"
26
27
28
29 get_all_active_members () {
30 local users=$(ldapsearch -x -b 'ou=crew,dc=c-base,dc=org' '(&(objectClass=cbaseMember)(memberOf=cn=crew,ou=groups,dc=c-base,dc=org))' uid | grep "uid:"| cut -d " " -f 2)
31 ldap_users=($(echo ${users[@]} | tr ' ' '\n' | sort -n))
32 }
33 is_user_active () {
34 local member="$1"
35 for ldap_user in ${ldap_users[@]}; do
36 if [[ "$ldap_user" == "$member" ]]; then
37 return 0
38 fi
39 done
40 return 1
41 }
42
43 get_all_home_dirs () {
44 for dir in /home/*/; do
45 local member=$(basename ${dir} /)
46 if is_index_file "$member"; then
47 www_homes+=("${dir}")
48 fi
49 done
50 }
51
52 index_file_is_default () {
53 local member="$1"
54 local index_html="$2"
55 local default_string="<html><head><title>crewmember: ${member} </title></head><body bgcolor='black'></body></html>"
56 grep -q "$default_string" "$index_html"
57 }
58 index_file_has_more_lines_than () {
59 local index_html="$1"
60 local min_line_count="$2"
61 (( $(wc -l < "$index_html") > "$min_line_count" ))
62 }
63 dontlist_file_exists () {
64 local member="$1"
65 local dontlist="/home/${member}/public_html/${dontlist_filename}"
66 [[ -f "$dontlist" ]]
67 }
68 is_index_file () {
69 local member="$1"
70 local member_html_dir="/home/$member/public_html/"
71 local index_html="$member_html_dir/index.html"
72 local index_php="$member_html_dir/index.php"
73
74 is_user_active "$member" || return 1
75 dontlist_file_exists "$member" && return 1
76 [[ -r "$index_php" ]] && index_file_has_more_lines_than "$index_php" 1 && return 0
77 [[ -r "$index_html" ]] && ! index_file_is_default "$member" "$index_html" && index_file_has_more_lines_than "$index_html" 3 && return 0
78 }
79
80 write_html_header () {
81 cat "$html_header"
82 }
83 write_html_footer () {
84 cat "$html_footer"
85 }
86 render_memberbox () {
87 local member="$1"
88 local gravatar_url="$2"
89 cat <<EOF
90 <div class="memberbox">
91 <div class="member-icon">
92 <img src="${gravatar_url}" alt="${gravatar_url}" />
93 </div>
94 [ <span class="crewname"><a href="https://${member}.crew.c-base.org/">${member}</a></span> ]<br />
95 </div>
96 EOF
97 }
98 render_first_letter_and_hr () {
99 local member=$1
100 cat <<EOF
101 ${clearboth}
102 <br /><hr />
103 <br /><h2>${member:0:1}</h2><br />
104 <div class="memberbox-wrapper">
105 EOF
106 }
107 group_by_first_letter () {
108
109
110 local member="$1"
111 local first_letter="$2"
112 if [[ ! ${member:0:1} == "$first_letter" ]]; then
113 render_first_letter_and_hr "$member" >> "$staging_file"
114 first_letter=${member:0:1}
115 fi
116 echo "$first_letter"
117 }
118 render_memberbox_wrapper () {
119 local first_letter=""
120 echo "<div class=\"memberbox-wrapper\">"
121 for dir in ${www_homes[@]}; do
122 local member="$(basename ${dir} /)"
123 local md5hash=$(echo -n "${member}@c-base.org" | md5sum)
124 local gravatar_url="http://gravatar.com/avatar/$md5hash"
125
126 (( ${#www_homes[@]} > $grouping_limit )) && first_letter="$(group_by_first_letter ${member} ${first_letter})"
127 render_memberbox "$member" "$gravatar_url"
128 done
129 cat <<EOF
130 </div><br />
131 ${clearboth}
132 <br /><hr />
133 Last update @ CET:$(date +%Y-%m-%d--%H:%M) found ${#www_homes[@]} member-pages from a total of ${#ldap_users[@]} crew-members.
134 <hr /><br /><br />
135 EOF
136 }
137 update_index_file () {
138 cp "$staging_file" "$index_file"
139 chown -R www-data:www-data "$staging_file" "$index_file"
140 chmod 755 "$staging_file" "$index_file"
141 }
142
143 user_finger_toget_sirname () {
144 local member="$1"
145 sirname=$(finger "$member" | head -n1 | tr ':' '\n' | tail -n1 | tr ' ' '\n' | tail -n 1)
146 totalsize=${#sirname}
147 securename=${sirname:${#sirname}-3:${#sirname}}
148 asteriskcount=$(( totalsize - 3 ))
149 for asterisk in $(seq 1 ${asteriskcount}); do
150 securename="*$securename"
151 done
152 echo $securename
153
154 }
155
156
157 get_all_active_members
158 get_all_home_dirs
159 write_html_header > "$staging_file"
160 render_memberbox_wrapper >> "$staging_file"
161 write_html_footer >> "$staging_file"
162 update_index_file
163
164
165
166
167
168
169
170
171
172
173