need a username arg for now... this should make the error message less confusing
[freeside.git] / bin / mapsecrets2access_user
1 #!/usr/bin/perl -w
2
3 use strict;
4 use File::Copy "cp";
5 use FS::UID qw(adminsuidsetup);
6 use FS::CurrentUser;
7 use FS::AccessRight;
8 use FS::Record qw(qsearchs qsearch);
9 use FS::access_group;
10 use FS::access_user;
11 use FS::access_usergroup;
12 use FS::access_right;
13 use FS::access_groupagent;
14 use FS::agent;
15
16 $FS::CurrentUser::upgrade_hack = 1;
17 my $user = shift or die &usage;
18 adminsuidsetup $user;
19
20 my $supergroup = qsearchs('access_group', { 'groupname' => 'Superuser' } );
21 unless ( $supergroup ) {
22
23   $supergroup = new FS::access_group { 'groupname' => 'Superuser' };
24   my $error = $supergroup->insert;
25   die $error if $error;
26
27   foreach my $rightname ( FS::AccessRight->rights ) {
28     my $access_right = new FS::access_right {
29       'righttype'   => 'FS::access_group',
30       'rightobjnum' => $supergroup->groupnum,
31       'rightname'   => $rightname,
32     };
33     my $ar_error = $access_right->insert;
34     die $ar_error if $ar_error;
35   }
36
37   foreach my $agent ( qsearch('agent', {} ) ) {
38     my $access_groupagent = new FS::access_groupagent {
39       'groupnum' => $supergroup->groupnum,
40       'agentnum' => $agent->agentnum,
41     };
42     my $aga_error = $access_groupagent->insert;
43     die $aga_error if $aga_error;
44   }
45
46 }
47 my $supergroupnum = $supergroup->groupnum;
48
49 my $mapsecrets = '/usr/local/etc/freeside/mapsecrets';
50 open(MAPSECRETS, "<$mapsecrets") or die $!;
51 while (<MAPSECRETS>) {
52   /([\w]+)\s+secrets\s*$/ or die "unparsable line in mapsecrets: $_";
53   my $username = $1;
54
55   next if qsearchs('access_user', { 'username' => $username } );
56
57   my $access_user = new FS::access_user {
58     'username'  => $username,
59     '_password' => 'notyet',
60     'first'     => 'Legacy',
61     'last'      => 'User',
62   };
63   my $au_error = $access_user->insert;
64   die $au_error if $au_error;
65
66   my $access_usergroup = new FS::access_usergroup { 
67     'usernum'  => $access_user->usernum,
68     'groupnum' => $supergroupnum,
69   };
70   my $aug_error = $access_usergroup->insert;
71   die $aug_error if $aug_error;
72
73 }
74 close MAPSECRETS;
75
76 # okay to clobber mapsecrets now i guess
77 cp $mapsecrets, "$mapsecrets.bak$$";
78 open(MAPSECRETS, ">$mapsecrets") or die $!;
79 print MAPSECRETS '* secrets'. "\n";
80 close MAPSECRETS or die $!;
81
82 sub usage {
83   die "Usage:\n  mapsecrets2access_user user\n"; 
84 }
85