diff --git a/tools/fh2uh_regimport.pl b/tools/fh2uh_regimport.pl new file mode 100644 index 0000000..9fd10fd --- /dev/null +++ b/tools/fh2uh_regimport.pl @@ -0,0 +1,114 @@ +#!/usr/bin/perl + +# A simple tool for importing FlexHub users to uhub sqlite database +# +# Usage: ./fh2uhub_regimport.pl +# +# Note: uhub database has to be created before running this script. + +use File::Slurp; +use Data::Dumper; +use DBI; + +my @uhubaccounts; +my $text = read_file $ARGV[0]; +my $dbfile = $ARGV[1]; + +sub convertprofile +{ + $flexprofile = $_[0]; + if($flexprofile >= 0 && $flexprofile <= 3) + { + return 'user'; + } + elsif($flexprofile >= 4 && $flexprofile <= 6) + { + return 'operator'; + } + elsif($flexprofile >= 7 && $flexprofile <= 8) + { + return 'super'; + } + elsif($flexprofile >= 9 && $flexprofile <= 10) + { + return 'admin'; + } + + return 'unknown'; +} + +sub parseinfo +{ + my @info = split('\n', $_[0]); + + for my $line (@info) + { + chop $line; + my %reginfo; + if ($line =~ /\["sNick"\]\s*=\s*\S+/) + { + my @nick = split(/\["sNick"\]\s*=\s*"(\S+)"/, $line); + $reginfo->{'nickname'} = $nick[1]; + } + elsif ($line =~ /\["sPassword"\]\s*=\s*\S+/) + { + my @password = split(/\["sPassword"\]\s*=\s*"(\S+)"/, $line); + $reginfo->{'password'} = $password[1]; + } + elsif ($line =~ /\["iLevel"\]\s*=\s*\S+/) + { + my @level = split(/\["iLevel"\]\s*=\s*(\d+)/, $line); + $reginfo->{'credentials'} = convertprofile $level[1]; + } + elsif ($line =~ /\["iRegDate"\]\s*=\s*\S+/) + { + my @created = split(/\["iRegDate"\]\s*=\s*(\d+)/, $line); + $reginfo->{'created'} = $created[1]; + } + elsif ($line =~ /\["iLastLogin"\]\s*=\s*\S+/) + { + my @activity = split(/\["iLastLogin"\]\s*=\s*(\d+)/, $line); + $reginfo->{'activity'} = $activity[1]; + } + } + + return %{$reginfo}; +} + +sub dbimport +{ + my @arr = @_; + my $db = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "", {RaiseError => 1, AutoCommit => 1}); + + for my $import (@arr) + { + if ($import->{'credentials'} ne 'unknown') + { + $db->do("INSERT OR IGNORE INTO users (nickname,password,credentials,created,activity) VALUES('$import->{'nickname'}','$import->{'password'}','$import->{'credentials'}',datetime($import->{'created'}, 'unixepoch'),datetime($import->{'activity'}, 'unixepoch'));"); + } + } + + $db->disconnect(); +} + + +if ($text =~ /tAccounts = {/) +{ + $text =~ s/^(?:.*\n){1}/},\n/; + my @flexaccounts = split('},.*\n.*\[".+"\] = {', $text); + + shift(@flexaccounts); + + for my $account (@flexaccounts) + { + my %info = parseinfo $account; + push(@uhubaccounts, \%info); + } + + dbimport @uhubaccounts; + +} +else +{ + print "Provided file is not valid FlexHub userlist.\n"; +} \ No newline at end of file