#!/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 () { # /^(\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() { 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. -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 - passwords are now maintained automatically. =head1 SEE ALSO Base Freeside documentation =cut