X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_acct.pm;h=1816287156f3fceecebffbf86be8cc057d253c52;hb=d2e5d9d1f65fc94eb87eae45b675645e92087f49;hp=e5fd5822f08b3446a605d5ba9d964456199c6e0c;hpb=e8141aaa8c3ef5f58290efa4a2160001c09f656f;p=freeside.git diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index e5fd5822f..181628715 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -38,6 +38,7 @@ use FS::part_svc; use FS::svc_acct_pop; use FS::cust_main_invoice; use FS::svc_domain; +use FS::svc_pbx; use FS::raddb; use FS::queue; use FS::radius_usergroup; @@ -161,45 +162,71 @@ FS::svc_Common. The following fields are currently supported: =over 4 -=item svcnum - primary key (assigned automatcially for new accounts) +=item svcnum + +Primary key (assigned automatcially for new accounts) =item username -=item _password - generated if blank +=item _password + +generated if blank + +=item _password_encoding + +plain, crypt, ldap (or empty for autodetection) -=item _password_encoding - plain, crypt, ldap (or empty for autodetection) +=item sec_phrase -=item sec_phrase - security phrase +security phrase -=item popnum - Point of presence (see L) +=item popnum + +Point of presence (see L) =item uid =item gid -=item finger - GECOS +=item finger + +GECOS + +=item dir -=item dir - set automatically if blank (and uid is not) +set automatically if blank (and uid is not) =item shell -=item quota - (unimplementd) +=item quota -=item slipip - IP address +=item slipip -=item seconds - +IP address + +=item seconds + +=item upbytes + +=item downbyte + +=item totalbytes + +=item domsvc -=item upbytes - +svcnum from svc_domain -=item downbytes - +=item pbxsvc -=item totalbytes - +Optional svcnum from svc_pbx -=item domsvc - svcnum from svc_domain +=item radius_I -=item radius_I - I (reply) +I (reply) -=item rc_I - I (check) +=item rc_I + +I (check) =back @@ -250,6 +277,24 @@ sub table_info { disable_inventory => 1, disable_select => 1, }, + 'file_quota'=> { + label => 'File storage limit', + type => 'text', + disable_inventory => 1, + disable_select => 1, + }, + 'file_maxnum'=> { + label => 'Number of files limit', + type => 'text', + disable_inventory => 1, + disable_select => 1, + }, + 'file_maxsize'=> { + label => 'File size limit', + type => 'text', + disable_inventory => 1, + disable_select => 1, + }, '_password' => 'Password', 'gid' => { label => 'GID', @@ -275,6 +320,20 @@ sub table_info { disable_inventory => 1, }, + 'domsvc' => { + label => 'Domain', + type => 'select', + select_table => 'svc_domain', + select_key => 'svcnum', + select_label => 'domain', + disable_inventory => 1, + + }, + 'pbxsvc' => { label => 'PBX', + type => 'select-svc_pbx.html', + disable_inventory => 1, + disable_select => 1, #UI wonky, pry works otherwise + }, 'usergroup' => { label => 'RADIUS groups', type => 'radius_usergroup_selector', @@ -656,13 +715,16 @@ sub insert { } # set usage fields and thresholds if unset but set in a package def +# AND the package already has a last bill date (otherwise they get double added) sub preinsert_hook_first { my $self = shift; return '' unless $self->pkgnum; my $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); - my $part_pkg = $cust_pkg->part_pkg if $cust_pkg; + return '' unless $cust_pkg && $cust_pkg->last_bill; + + my $part_pkg = $cust_pkg->part_pkg; return '' unless $part_pkg && $part_pkg->can('usage_valuehash'); my %values = $part_pkg->usage_valuehash; @@ -1011,7 +1073,8 @@ sub check { my $error = $self->ut_numbern('svcnum') #|| $self->ut_number('domsvc') - || $self->ut_foreign_key('domsvc', 'svc_domain', 'svcnum' ) + || $self->ut_foreign_key( 'domsvc', 'svc_domain', 'svcnum' ) + || $self->ut_foreign_keyn('pbxsvc', 'svc_pbx', 'svcnum' ) || $self->ut_textn('sec_phrase') || $self->ut_snumbern('seconds') || $self->ut_snumbern('upbytes') @@ -1020,6 +1083,10 @@ sub check { || $self->ut_enum( '_password_encoding', [ '', qw( plain crypt ldap ) ] ) + || $self->ut_enum( 'password_selfchange', [ '', 'Y' ] ) + || $self->ut_enum( 'password_recover', [ '', 'Y' ] ) + || $self->ut_alphasn( 'cgp_accessmodes' ) + || $self->ut_alphan( 'cgp_type' ) ; return $error if $error; @@ -1155,8 +1222,12 @@ sub check { or return "Illegal finger: ". $self->getfield('finger'); $self->setfield('finger', $1); - $recref->{quota} =~ /^(\w*)$/ or return "Illegal quota"; - $recref->{quota} = $1; + for (qw( quota file_quota file_maxsize )) { + $recref->{$_} =~ /^(\w*)$/ or return "Illegal $_"; + $recref->{$_} = $1; + } + $recref->{file_maxnum} =~ /^\s*(\d*)\s*$/ or return "Illegal file_maxnum"; + $recref->{file_maxnum} = $1; unless ( $part_svc->part_svc_column('slipip')->columnflag eq 'F' ) { if ( $recref->{slipip} eq '' ) { @@ -1291,11 +1362,14 @@ is >0), one will be generated randomly. sub set_password { my( $self, $pass ) = ( shift, shift ); + warn "[$me] set_password (to $pass) called on $self: ". Dumper($self) + if $DEBUG; + my $failure = gettext('illegal_password'). " $passwordmin-$passwordmax ". FS::Msgcat::_gettext('illegal_password_characters'). ": ". $pass; - my ($encoding, $encryption); + my( $encoding, $encryption ) = ('', ''); if ( $self->_password_encoding ) { $encoding = $self->_password_encoding; @@ -1315,7 +1389,7 @@ sub set_password { $self->_password_encoding($encoding); } - if( $encoding eq 'legacy' ) { + if ( $encoding eq 'legacy' ) { # The legacy behavior from check(): # If the password is blank, randomize it and set encoding to 'plain'. @@ -1332,14 +1406,12 @@ sub set_password { $pass = $1.$3; $self->_password_encoding('crypt'); # Various disabled crypt passwords - } elsif ( $pass eq '*' or - $pass eq '!' or - $pass eq '!!' ) { + } elsif ( $pass eq '*' || $pass eq '!' || $pass eq '!!' ) { $self->_password_encoding('crypt'); } else { return $failure; } - } + } $self->_password($pass); return; @@ -1630,30 +1702,20 @@ for the password. sub radius_password { my $self = shift; - my($pw_attrib, $password); + my $pw_attrib; if ( $self->_password_encoding eq 'ldap' ) { - $pw_attrib = 'Password-With-Header'; - $password = $self->_password; - } elsif ( $self->_password_encoding eq 'crypt' ) { - $pw_attrib = 'Crypt-Password'; - $password = $self->_password; - } elsif ( $self->_password_encoding eq 'plain' ) { - - $pw_attrib = $radius_password; #Cleartext-Password? man rlm_pap - $password = $self->_password; - + $pw_attrib = $radius_password; } else { - - $pw_attrib = length($password) <= 12 ? $radius_password : 'Crypt-Password'; - $password = $self->_password; - + $pw_attrib = length($self->_password) <= 12 + ? $radius_password + : 'Crypt-Password'; } - ($pw_attrib, $password); + ($pw_attrib, $self->_password); }