lyadmin/perl-script/create-user.pl

100 lines
2.0 KiB
Perl

#!/usr/bin/perl
use warnings;
use strict;
use JSON;
my $working_dir = "./";
my $account_dir = $working_dir."req/";
my $conf_path = $working_dir."lyadmin.conf.json";
my $SHELL_ENUM;
my @g;
sub create($){
my $id = $_[0];
my $fn1 = $account_dir.$id.".ident";
my $username;
my $shell_pref;
my $user_email;
my $pub_key;
open FILE, $fn1 or die "could not open file $fn1";
$username = <FILE>;
chomp $username;
$user_email = <FILE>;
chomp $user_email;
{
my $s0 = <FILE>;
chomp $s0;
unless($SHELL_ENUM->{$s0}){
die "invalid shell setting $s0 in file $id.ident";
}
$shell_pref = $SHELL_ENUM->{$s0};
}
$pub_key = <FILE>;
chomp $pub_key;
if(length($username) > 31 || !($username =~ /^[A-Za-z][A-Za-z0-9]+$/)){
printf("%s has an INVALID username\n", $id);
die ("oh no");
}
{
my $cmd;
$cmd = "useradd -m -s " . $shell_pref . " " . $username;
printf("Y/N is this command OK?: %s\n", $cmd);
if(!(<STDIN> =~ /^y/i)){
die "invalid characters?!!";
}
system($cmd);
system("echo '".$pub_key."' > /home/$username/.ssh/authorized_keys");
system("chmod 711 /home/$username");
system("mv $fn1 $fn1.done");
system("echo $username >> user_list.txt");
}
close FILE;
}
if(!(`id` =~ /uid=0/)){
die "please run this script as root";
}
if( `pwd` =~ /perl-script\/?\s*$/){
$working_dir = "../";
$account_dir = $working_dir."req/";
$conf_path = $working_dir."lyadmin.conf.json";
printf("%s\n", $conf_path);
}elsif(!(join(" ", glob("./*")) =~ /perl-script/)){
die "please run this script with ./perl-script/ as the present working directory";
}
open FILE, $conf_path or die "could not open file $conf_path";
{
my $conf_str;
my $conf_obj;
local $/=undef;
$conf_str = <FILE>;
chomp $conf_str;
$conf_obj = decode_json($conf_str);
$SHELL_ENUM = $conf_obj->{"shell"};
};
close FILE;
@g = glob("$account_dir*");
@g = map { s/.*\/([^\/]*).ident$/$1/; $_ } grep {$_ =~ /ident$/} @g;
for my $fn (@g){
create($fn);
}