diff options
Diffstat (limited to 'FS/bin/freeside-adduser')
| -rw-r--r-- | FS/bin/freeside-adduser | 119 | 
1 files changed, 119 insertions, 0 deletions
| diff --git a/FS/bin/freeside-adduser b/FS/bin/freeside-adduser new file mode 100644 index 000000000..237e29ef8 --- /dev/null +++ b/FS/bin/freeside-adduser @@ -0,0 +1,119 @@ +#!/usr/bin/perl -w + +use strict; +use vars qw($opt_s $opt_g $opt_n); +use Fcntl qw(:flock); +use Getopt::Std; + +my $FREESIDE_CONF = "%%%FREESIDE_CONF%%%"; + +getopts("s:g:n"); +my $user = shift or die &usage; + +if ( $opt_s ) { + +  #if ( -e "$FREESIDE_CONF/mapsecrets" ) { +  #  open(MAPSECRETS,"<$FREESIDE_CONF/mapsecrets") +  #    or die "can't open $FREESIDE_CONF/mapsecrets: $!"; +  #  while (<MAPSECRETS>) { +  #    /^(\S+) / or die "unparsable line in mapsecrets: $_"; +  #    die "user $user already exists\n" if $user eq $1; +  #  } +  #  close MAPSECRETS; +  #} + +  #insert new entry before a wildcard... +  open(MAPSECRETS,"<$FREESIDE_CONF/mapsecrets") +    and flock(MAPSECRETS,LOCK_EX) +      or die "can't open $FREESIDE_CONF/mapsecrets: $!"; +  open(NEW,">$FREESIDE_CONF/mapsecrets.new") +    or die "can't open $FREESIDE_CONF/mapsecrets.new: $!"; +  while(<MAPSECRETS>) { +    if ( /^\*\s/ ) { +      print NEW "$user $opt_s\n"; +    } +    print NEW $_; +  } +  close MAPSECRETS or die "can't close $FREESIDE_CONF/mapsecrets: $!"; +  close NEW or die "can't close $FREESIDE_CONF/mapsecrets.new: $!"; +  rename("$FREESIDE_CONF/mapsecrets.new", "$FREESIDE_CONF/mapsecrets") +    or die "can't move mapsecrets.new into place: $!"; + +} + +### + +exit if $opt_n; + +### + +use FS::UID qw(adminsuidsetup); +use FS::CurrentUser; +use FS::access_user; +use FS::access_usergroup; + +$FS::CurrentUser::upgrade_hack = 1; +#adminsuidsetup $rootuser; +adminsuidsetup $user; + +my $access_user = new FS::access_user { +  'username'  => $user, +  '_password' => 'notyet', +  'first'     => 'Firstname', # $opt_f ||  +  'last'      => 'Lastname',  # $opt_l ||  +}; +my $au_error = $access_user->insert; +die $au_error if $au_error; + +if ( $opt_g ) { + +  my $access_usergroup = new FS::access_usergroup { +    'usernum'  => $access_user->usernum, +    'groupnum' => $opt_g, +  }; +  my $aug_error = $access_usergroup->insert; +  die $aug_error if $aug_error; + +} + +### + +sub usage { +  die "Usage:\n\n  freeside-adduser [ -n ] [ -s ] [ -g groupnum ] username [ password ]" +} + +=head1 NAME + +freeside-adduser - Command line interface to add (freeside) users. + +=head1 SYNOPSIS + +  freeside-adduser [ -n ] [ -s ] [ -g groupnum ] username [ password ] + +=head1 DESCRIPTION + +Adds a user to the Freeside billing system.  This is for adding users (internal +sales/tech folks) to the web interface, not for adding customer accounts. + +This functionality is now available in the web interface as well, under +B<Configuration | Employees | View/Edit employees>. + +  -g: initial groupnum + +  Development/multi-DB options: + +  -s: alternate secrets file + +  -n: no ACL added, for bootstrapping + +=head1 NOTE + +No explicit htpasswd options are available in 1.7 - passwordsa are now +maintained automatically. + +=head1 SEE ALSO + +Base Freeside documentation + +=cut + | 
