Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / adm / bin / add_user
1 #!/bin/bash
2 ################################################################################
3 #
4 # File:         add_user
5 # Description:  This script adds a user
6 # Author:       Andrew DeFaria
7 # Language:     Korn Shell
8 # Modified:
9 #
10 # (c) Copyright 2001, Andrew@DeFaria.com, all rights reserved
11 #
12 ################################################################################
13 # Parameters
14 employeenumber=
15 employeetype=
16 fullname=
17 groupname=
18 manager=
19 phone=
20 username=
21 workstation=
22 shell=
23 hostname=
24 homeserver=
25 displayname=
26
27 # fieldvalue is used when prompting for non-supplied fields
28 fieldvalue=
29
30 # Logfile
31 logfile=$TMPDIR/add_user.$$.log
32
33 ## Set global env variables
34 # Set me
35 me=${0##*/}
36
37 function error {
38   print -u2 "$me: Error: $1"
39 } # error
40
41 function warning {
42   print -u2 "$me: Warning: $1"
43 } # warning
44
45 function display {
46   print "$1"
47 } # display
48
49 function info {
50   display "$me: Info: $1"
51 } # info
52
53 function verbose {
54   if [ ! -z "$verbose" ]; then
55     display "$1"
56   fi
57 } # verbose
58
59 function debug {
60   if [ ! -z "$debug" ]; then
61     print -u2 "$me: Debug: $1"
62   fi
63 } # debug
64
65 function usage {
66   display "$me [-v|verbose] [-d|debug] [-usage]"
67   display "        -v|verbose:     Turns on verbose mode"
68   display "        -d|debug:       Turns on debug mode"
69   display "        -usage:         Print this usage message"
70   display
71   display "The following options will be prompted for if not supplied on the"
72   display "command line. If any command line parameter has spaces in it then"
73   display "you need to surround it in quotes (e.g. -owners_fullname"
74   display "\"Andrew DeFaria\". Note: Do NOT use quotes when responding to"
75   display "prompts for missing information."
76   display
77   display "     -employeenumber         Specify the Employee \#"
78   display "     -employeetype           One of Employee, SEED or Contractor"
79   display "     -fullname               The employee's full name"
80   display "     -groupname              Synchronize group name"
81   display "     -manager                Full name of manager"
82   display "     -phone                  In the format of 7-XXXX (the t-44 will"
83   display "                             be prepended)"
84   display "     -username               Unix/NT username for this new user"
85   display "     -workstation            One of Unix|X Terminal|Win NT"
86   display "     -shell                  One of ksh|sh|csh|tcsh"
87   display "     -hostname               Name of workstation host or X Terminal"
88   display "                             server"
89   display "     -homeserver             Name of machine where \$HOME will be"
90   display "                             created"
91   display "     -displayname            Name of DISPLAY"
92
93   error "$1"
94   exit 1
95 } # usage
96
97 function prompt_for_field {
98   fieldname="$1"
99   fieldvalue=
100
101   while [ ! -n "$fieldvalue" ]; do
102     display "Enter the value for $fieldname:\c"
103     read fieldvalue
104
105     if [ ! -n "$fieldvalue" ]; then
106       error "Must specify $fieldname!"
107     fi
108   done
109 } # prompt_for_field
110
111 function display_parms {
112   display "New user:"
113   display "------------------------------------------------------"
114   display "employeenumber       = $employeenumber"
115   display "employeetype = $employeetype"
116   display "fullname     = $fullname"
117   display "groupname    = $groupname"
118   display "manager              = $manager"
119   display "phone                = $phone"
120   display "username     = $username"
121   display "workstation  = $workstation"
122   display "shell                = $shell"
123   display "hostname     = $hostname"
124   display "homeserver   = $homeserver"
125   display "displayname  = $displayname"
126   display
127   display "Command line equivalent:"
128   display
129   display "$me -employeenumber $employeenumber \\"
130   display " -employeetype $employeetype \\"
131   display " -fullname \"$fullname\" \\"
132   display " -groupname $groupname \\"
133   display " -manager \"$manager\" \\"
134   display " -phone $phone \\"
135   display " -username $username \\"
136   display " -workstation $workstation \\"
137   display " -shell $shell \\"
138   display " -hostname $hostname \\"
139   display " -homeserver $homeserver \\"
140   display " -displayname $displayname"
141   display "Are the parameters correct [Y|n]?\c"
142   read answer
143   case "$answer" in
144     Y|y)
145       : OK!
146       ;;
147     *)
148       exit
149   esac
150 } # display_parms
151
152 # Get parameters
153 while [ $# -ge 1 ]; do
154   case "$1" in
155     -usage)
156       usage
157       ;;
158
159     -v|-verbose)
160       verbose=yes
161       ;;
162
163     -d|-debug)
164       debug=yes
165       ;;
166
167     -employeenumber)
168       if [ $# -gt 1 ]; then
169         shift
170         employeenumber="$1"
171       fi
172       ;;
173
174     -employeetype)
175       if [ $# -gt 1 ]; then
176         shift
177         employeetype="$1"
178       fi
179       ;;
180
181     -fullname)
182       if [ $# -gt 1 ]; then
183         shift
184         fullname="$1"
185       fi
186       ;;
187
188     -groupname)
189       if [ $# -gt 1 ]; then
190         shift
191         groupname="$1"
192       fi
193       ;;
194
195     -manager)
196       if [ $# -gt 1 ]; then
197         shift
198         manager="$1"
199       fi
200       ;;
201
202     -phone)
203       if [ $# -gt 1 ]; then
204         shift
205         phone="$1"
206       fi
207       ;;
208
209     -username)
210       if [ $# -gt 1 ]; then
211         shift
212         username="$1"
213       fi
214       ;;
215
216     -workstation)
217       if [ $# -gt 1 ]; then
218         shift
219         workstation="$1"
220       fi
221       ;;
222
223     -shell)
224       if [ $# -gt 1 ]; then
225         shift
226         shell="$1"
227       fi
228       ;;
229
230     -hostname)
231       if [ $# -gt 1 ]; then
232         shift
233         hostname="$1"
234       fi
235       ;;
236
237     -homeserver)
238       if [ $# -gt 1 ]; then
239         shift
240         homeserver="$1"
241       fi
242       ;;
243
244     -displayname)
245       if [ $# -gt 1 ]; then
246         shift
247         displayname="$1"
248       fi
249       ;;
250
251     *)
252       usage "Unrecognized parameter $1"
253       ;;
254   esac
255   shift
256 done
257
258 if [ "_$employeenumber" = "_" ]; then
259   verbose "Employee Number was not specified!"
260   prompt_for_field "Employee Number"
261   employeenumber="$fieldvalue"
262 fi
263
264 if [ "_$employeetype" = "_" ]; then
265   verbose "Employee Type was not specified!"
266   prompt_for_field "Employee Type"
267   employeetype="$fieldvalue"
268 fi
269
270 while true; do
271   case "$employeetype" in
272     Employee|SEED|Contractor)
273       break
274       ;;
275
276     *)
277       error "Employee Type was not one of \"Employee\", \"SEED\" or \"Contractor\"!"
278       prompt_for_field "Employee Type"
279       employeetype="$fieldvalue"
280       ;;
281   esac
282 done
283
284 if [ "_$fullname" = "_" ]; then
285   verbose "Employee Name was not specified!"
286   prompt_for_field "Employee Name"
287   fullname="$fieldvalue"
288 fi
289
290 if [ "_$groupname" = "_" ]; then
291   verbose "Project Name was not specified!"
292   prompt_for_field "Project Name"
293   groupname="$fieldvalue"
294 fi
295
296 while true; do
297   if [ -f "/net/cllapp/opt/synchronize/db/GroupTemplates/$groupname" ];
298   then
299     break
300   else
301     verbose "Project name \"$groupname\" is not valid!"
302     display
303     display "Valid Project names are:"
304     cd /net/cllapp/opt/synchronize/db/groups/Projects
305     ls *
306     cd $OLDPWD
307     display
308     prompt_for_field "Project Name"
309     groupname="$fieldvalue"
310   fi
311 done
312
313 if [ "_$manager" = "_" ]; then
314   verbose "Project Manager was not specified!"
315   prompt_for_field "Project Manager"
316   manager="$fieldvalue"
317 fi
318
319 if [ "_$phone" = "_" ]; then
320   verbose "Phone was not specified!"
321   prompt_for_field "Phone"
322   phone="$fieldvalue"
323 fi
324
325 if [ "_$username" = "_" ]; then
326   verbose "Username was not specified!"
327   prompt_for_field "Username"
328   username="$fieldvalue"
329 fi
330
331 if [ "_$workstation" = "_" ]; then
332   verbose "Workstation was not specified!"
333   prompt_for_field "Workstation"
334   workstation="$fieldvalue"
335 fi
336
337 while true; do
338   case "$workstation" in
339     Unix|"X Terminal"|"Win NT")
340       break
341       ;;
342
343     *)
344       error "Workstation was not one of Unix|X Terminal|Win NT!"
345       prompt_for_field "Workstation"
346       workstation="$fieldvalue"
347       ;;
348   esac
349 done
350
351 if [ "_$shell" = "_" ]; then
352   verbose "Shell was not specified!"
353   prompt_for_field "Shell"
354   shell="$fieldvalue"
355 fi
356
357 while true; do
358   case "$shell" in
359     ksh|sh|csh|tcsh)
360       break
361       ;;
362
363     *)
364       error "Shell was not one of ksh, sh, csh or tcsh!"
365       prompt_for_field "Shell"
366       shell="$fieldvalue"
367       ;;
368   esac
369 done
370
371 if [ "_$hostname" = "_" ]; then
372   verbose "Hostname was not specified!"
373   prompt_for_field "Hostname"
374   hostname="$fieldvalue"
375 fi
376
377 if [ "$workstation" != "Win NT" ]; then
378   if [ "_$homeserver" = "_" ]; then
379     verbose "Home Server was not specified!"
380     prompt_for_field "Home Server"
381     homeserver="$fieldvalue"
382   fi
383 fi
384
385 if [ "$workstation" = "Unix" ]; then
386   if [ "_$displayname" = "_" ]; then
387     displayname=$hostname
388   fi
389 elif [ "$workstation" = "X Terminal" ]; then
390   if [ "$displayname" = "$hostname" ]; then
391     verbose "Display name cannot be the same as hostname for an X Terminal"
392     prompt_for_field "Display name"
393     displayname="$fieldvalue"
394   fi
395   if [ "_$displayname" = "_" ]; then
396     prompt_for_field "Display name"
397     displayname="$fieldvalue"
398   fi
399 fi
400
401 display_parms
402
403 export PATH=$PATH:/app/admin/bin
404
405 print "Add MOA Entry (Y/n)?\c"
406 read answer
407 answer=$(print "$answer" | tr [:upper:] [:lower:])
408
409 case $answer in
410   y|yes)
411     add_moa -username $username \
412         -fullname "$fullname" \
413         -phone $phone \
414         -homeserver $homeserver \
415         -shell $shell
416     ;;
417   *)
418     print "$fullname not added to MOA"
419     ;;
420 esac
421
422 if [ "$employeetype" != "Contractor" ]; then
423   print "Add Synchronize Entry (Y/n)?\c"
424   read answer
425   answer=$(print "$answer" | tr [:upper:] [:lower:])
426
427   case $answer in
428     y|yes)
429       add_synchronize -username $username \
430           -fullname "$fullname" \
431           -groupname $groupname
432       ;;
433     *)
434       print "$fullname not added to Synchronize"
435       ;;
436   esac
437 fi
438
439 print "Add Postnote Entry (Y/n)?\c"
440 read answer
441 answer=$(print "$answer" | tr [:upper:] [:lower:])
442
443 case $answer in
444   y|yes)
445     add_postnote -username $username \
446         -fullname "$fullname" \
447         -phone $phone \
448         -hostname $hostname \
449         -displayname $displayname
450     ;;
451   *)
452     print "$fullname not added to Postnote"
453     ;;
454 esac
455
456 print "Add Shared/X Entry (Y/n)?\c"
457 read answer
458 answer=$(print "$answer" | tr [:upper:] [:lower:])
459
460 case $answer in
461   y|yes)
462     add_sharedx -username $username \
463         -fullname "$fullname" \
464         -phone $phone \
465         -hostname $hostname \
466         -displayname $displayname
467     ;;
468   *)
469     print "$fullname not added to Shared/X"
470     ;;
471 esac
472
473 print "Send request for email account for $fullname (Y/n)?\c"
474 read answer
475 answer=$(print "$answer" | tr [:upper:] [:lower:])
476
477 case $answer in
478   y|yes)
479     if [ "$employeetype" != "Contractor" ]; then
480       add_email -username $username \
481           -fullname "$fullname" \
482           -employeetype $employeetype \
483           -employeenumber $employeenumber \
484           -manager "$manager" \
485           -mailserver cllmail
486     else
487       add_email -username $username \
488           -fullname "$fullname" \
489           -employeetype $employeetype \
490           -manager "$manager" \
491           -mailserver cllmail
492     fi
493     ;;
494   *)
495     print "$fullname not added to email"
496     ;;
497 esac