This commit is contained in:
2019-02-06 00:49:12 +03:00
commit 8dbb1bb605
4796 changed files with 506072 additions and 0 deletions

405
obsolete/bin/rlj2lj.pl Executable file
View File

@@ -0,0 +1,405 @@
#!/usr/bin/perl -w
use strict;
use XMLRPC::Lite;
use Digest::MD5 qw(md5_hex);
use DBI;
use Time::Local;
use lib "$ENV{'LJHOME'}/cgi-bin";
use LJR::Viewuserstandalone;
do $ENV{'LJHOME'} . "/cgi-bin/ljconfig.pl";
#
#îÁÓÔÒÏÊËÉ
#
#ó×ÏÊÓÔ×Á ÓÏÅÄÉÎÅÎÉÑ Ó ÂÁÚÏÊ
my $qhost = $LJ::DBINFO{'master'}->{'host'};
my $quser = $LJ::DBINFO{'master'}->{'user'};
my $qpass = $LJ::DBINFO{'master'}->{'pass'};
my $qsock = $LJ::DBINFO{'master'}->{'sock'};
my $qport = $LJ::DBINFO{'master'}->{'port'};
#my $qdb = $LJ::DBINFO{'master'}->{'dbname'};
my $qdb = "prod_ljgate";
#óÁÊÔ, Ó ËÏÔÏÒÏÇÏ ËÏÐÉÒÕÅÍ
my $source_site = "127.0.0.2";
#óÁÊÔ, ÎÁ ËÏÔÏÒÏÊ ËÏÐÉÒÕÅÍ
my $dest_site = "www.livejournal.com";
#þÁÓÔÏÔÁ ÓÉÎÈÒÏÎÉÚÁÃÉÉ × ÆÏÒÍÁÔÅ þþ:íí:óó
#(ÔÏ ÅÓÔØ ÓÉÎÈÒÏÎÉÚÁÃÉÑ ËÁÖÄÙÅ 15 ÍÉÎÕÔ ÂÕÄÅÔ ×ÙÇÌÑÄÅÔØ ËÁË
#00:15:00
my $sync_freq = "00:10:00";
#òÁÚÎÉÃÁ ×Ï ×ÒÅÍÅÎÉ ÍÅÖÄÕ ÍÁÛÉÎÏÊ, ÎÁ ËÏÔÏÒÏÊ ÕÓÔÁÎÏ×ÌÅÎ ÇÅÊÔ,
#É ÍÁÛÉÎÏÊ, ÎÁ ËÏÔÏÒÏÊ ÕÓÔÁÎÏ×ÌÅÎ ÉÓÈÏÄÎÙÊ LJ-ÓÅÒ×ÅÒ (ÚÁÐÉÓÉ
#ÄÁÔÉÒÕÀÔÓÑ ÌÏËÁÌØÎÙÍ ×ÒÅÍÅÎÅÍ ÐÏÌØÚÏ×ÁÔÅÌÑ, Á ×ÒÅÍÑ ÓÉÎÈÒÏÎÉÚÁÃÉÉ
#ÏÔÓÞÉÔÙ×ÁÅÔÓÑ ÐÏ ÞÁÓÁÍ ÍÁÛÉÎÙ, ÇÄÅ ËÒÕÔÉÔÓÑ LJ, ÂÌÉÎ).
#òÁÚÎÉÃÁ ÕËÁÚÙ×ÁÅÔÓÑ × ËÏÌÉÞÅÓÔ×Å ÓÅËÕÎÄ. åÓÌÉ ×ÒÅÍÑ ÇÅÊÔÁ ÍÅÎØÛÅ
#×ÒÅÍÅÎÉ ÓÅÒ×ÅÒÁ, ÒÁÚÎÉÃÁ ÄÏÌÖÎÁ ÂÙÔØ ÐÏÌÏÖÉÔÅÌØÎÙÍ ÞÉÓÌÏÍ, ÂÏÌØÛÅ ---
#ÐÏÎÑÔÎÏÅ ÄÅÌÏ, ÏÔÒÉÃÁÔÅÌØÎÙÍ.
my $time_diff = 0;
#îÁÓÔÒÏÊËÉ ÚÁËÏÎÞÉÌÓØ
#áËËÁÕÎÔ, ËÏÔÏÒÙÊ ËÏÐÉÒÕÅÍ
my $source_user;
my $source_pass;
#áËËÁÕÎÔ, × ËÏÔÏÒÙÊ ËÏÐÉÒÕÅÍ
my $dest_user;
my $dest_pass;
#úÄÅÓØ ÂÕÄÕÔ ÈÒÁÎÉÔØÓÑ ÌÏÇÉÎÙ É ÐÁÒÏÌÉ ÓÉÎÈÒÏÎÉÚÉÒÕÅÍÙÈ
#ÄÎÅ×ÎÉËÏ× (ÎÁ ÎÁÛÅÍ É ÞÕÖÏÍ ÓÅÒ×ÅÒÁÈ)
my %journals;
open (STDERR, "+>>$ENV{LJHOME}/logs/ljgate.log") || die "Can't open logfile:$!";
#÷ÙÞÉÓÌÑÅÍ ×ÒÅÍÑ ÐÒÅÄÙÄÕÝÅÇÏ ÏÂÎÏ×ÌÅÎÉÑ
my ($fr_hour,$fr_min,$fr_sec);
my ($ls_year,$ls_month,$ls_day,$ls_hour,$ls_min,$ls_sec);
($fr_hour,$fr_min,$fr_sec) = split(/:/,$sync_freq);
my $lastsync = (time() - ($fr_hour * 60 * 60)
- ($fr_min * 60)
- $fr_sec);
$lastsync = $lastsync + $time_diff;
($ls_sec,$ls_min,$ls_hour,$ls_day,$ls_month,$ls_year) = localtime($lastsync);
$ls_year += 1900;
$ls_month += 1;
$ls_month=sprintf("%.02d",$ls_month);
$ls_day=sprintf("%.02d",$ls_day);
$ls_sec=sprintf("%.02d",$ls_sec);
$ls_min=sprintf("%.02d",$ls_min);
$ls_hour=sprintf("%.02d",$ls_hour);
$lastsync = $ls_year."-".
$ls_month."-".
$ls_day." ".
$ls_hour.":".
$ls_min.":".
$ls_sec;
#print "$lastsync\n";
#ó×ÑÚÙ×ÁÅÍÓÑ Ó ÂÁÚÏÊ
my $dbh = DBI->connect(
"DBI:mysql:mysql_socket=$qsock;hostname=$qhost;port=$qport;database=$qdb",
$quser, $qpass,
) || die localtime(time) . ": Can't connect to database\n";
#úÁÂÉÒÁÅÍ ÉÚ ÂÁÚÙ ID ÖÕÒÎÁÌÏ×, ËÏÔÏÒÙÅ ÎÕÖÎÏ ÓÉÎÈÒÏÎÉÚÉÒÏ×ÁÔØ
my $sqh = $dbh->prepare("SELECT userid,alienid
FROM rlj2lj");
$sqh->execute;
my $result;
#ðÏÍÅÝÁÅÍ ÒÅÚÕÌØÔÁÔÙ ÚÁÐÒÏÓÁ × ÈÜÛ %journals
while ($result = $sqh->fetchrow_hashref) {
$journals{$result->{'userid'}} = $result->{'alienid'};
}
#éÎÉÃÉÁÌÉÚÉÒÕÅÍ ÉÎÔÅÒÆÅÊÓ ÐÒÏÔÏËÏÌÁ XMLRPC
my $xmlrpc = new XMLRPC::Lite;
#óÉÎÈÒÏÎÉÚÉÒÕÅÍ ÖÕÒÎÁÌÙ
foreach (keys(%journals)) {
#úÁÂÉÒÁÅÍ ÉÚ ÂÁÚÙ ÏÞÅÒÅÄÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ ÉÓÈÏÄÎÏÇÏ ÖÕÒÎÁÌÁ
$sqh = $dbh->prepare("SELECT our_user,our_pass
FROM our_user
WHERE userid=$_");
$sqh->execute;
($source_user,$source_pass) = $sqh->fetchrow_array;
#úÁÂÉÒÁÅÍ ÉÚ ÂÁÚÙ ÏÞÅÒÅÄÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ ÞÕÖÏÇÏ ÓÅÒ×ÉÓÁ
$sqh = $dbh->prepare("SELECT alien,alienpass
FROM alien
WHERE alienid=$journals{$_}");
$sqh->execute;
($dest_user,$dest_pass) = $sqh->fetchrow_array;
#ëÏÐÉÒÕÅÍ ×ÓÅ ÚÁÐÉÓÉ, ÄÏÂÁ×ÌÅÎÎÙÅ ÉÌÉ ÉÚÍÅΣÎÎÙÅ
#ÐÏÓÌÅ ÐÒÅÄÙÄÕÝÅÇÏ ÏÂÎÏ×ÌÅÎÉÑ
eval {
sync_journals($source_site,$source_user,$source_pass,
$dest_site,$dest_user,$dest_pass,
$lastsync,$_);
};
if ($@) {
print STDERR localtime(time) . ": Syncronizing $source_user failed\n";
}
}
###SUBROUTINES###
#óÉÎÈÒÏÎÉÚÁÃÉÑ ÄÎÅ×ÎÉËÏ×
sub sync_journals{
my ($source_site,$souce_user,$source_pass,
$dest_site,$dest_user,$dest_pass,
$lastsync, $user_id);
#ðÏÌÕÞÁÅÍ ÁÄÒÅÓÁ ÉÓÐÏÌØÚÕÅÍÙÈ ÓÁÊÔÏ× É ÐÁÒÏÌÉ/ÌÏÇÉÎÙ
#ÓÉÎÈÒÏÎÉÚÉÒÕÅÍÙÈ ÁËËÁÕÎÔÏ× ÉÚ ÓÔÒÏËÉ Ó ÁÒÇÕÍÅÎÔÁÍÉ
($source_site,$souce_user,$source_pass,
$dest_site,$dest_user,$dest_pass,$lastsync,$user_id) = @_;
my $proxy = "http://" . $source_site . "/interface/xmlrpc";
$xmlrpc->proxy($proxy);
#XMLRPC object, for login call
my $get_challenge;
#Challenge (random string from server for secure login)
my $challenge;
#String for md5 hash of server challenge and password
my $response;
#ðÏÌÕÞÁÅÍ ÐÁÒÕ ÐÁÒÏÌØ-ÏÔÚÙ× Õ ÉÓÈÏÄÎÏÇÏ ÓÅÒ×ÅÒÁ
eval {
$get_challenge = xmlrpc_call("LJ.XMLRPC.getchallenge");
$challenge = $get_challenge->{'challenge'};
$response = md5_hex($challenge . md5_hex($source_pass));
};
#Error handling (russian over ssh doesn't work, sorry)
if ($@) {
print STDERR localtime(time) . ": Login on $source_site failed\n";
die;
};
#XMLRPC object, for "getevents" call
my $getevents;
#úÁÂÉÒÁÅÍ ×ÓÅ ÓÏÏÂÝÅÎÉÑ, ÐÏÑ×É×ÛÉÅÓÑ ÓÏ ×ÒÅÍÅÎÉ ÐÏÓÌÅÄÎÅÊ ÓÉÎÈÒÏÎÉÚÁÃÉÉ
eval {
$getevents = xmlrpc_call('LJ.XMLRPC.getevents', {
'username' => $source_user,
'auth_method' => 'challenge',
'auth_challenge' => $challenge,
'auth_response' => $response,
'ver' => 1,
'selecttype' => 'syncitems',
'lastsync' => $lastsync,
'lineendings' => 'unix',
});
};
#Error handling
if ($@) {
print STDERR localtime(time) . ": Getevents on $source_site failed\n";
die;
}
$proxy = "http://" . $dest_site . "/interface/xmlrpc";
$xmlrpc->proxy($proxy);
#ðÏÌÕÞÁÅÍ ÐÁÒÕ ÐÁÒÏÌØ-ÏÔÚÙ× Õ ÓÅÒ×ÅÒÁ, ÎÁ ËÏÔÏÒÙÊ ËÏÐÉÒÕÅÍ ÚÁÐÉÓÉ
eval {
$get_challenge = xmlrpc_call("LJ.XMLRPC.getchallenge");
$challenge = $get_challenge->{'challenge'};
$response = md5_hex($challenge . md5_hex($dest_pass));
};
#Error handling
if ($@) {
print STDERR localtime(time) . ": Login on $dest_site failed\n";
print STDERR "debug1: " . $@;
print STDERR "\n\n";
die;
}
my $entry;
my( $entry_date, $entry_time, $sec, $min, $hour, $day, $month, $year );
my $fields;
my $postevent;
foreach $entry (@{$getevents->{'events'}}) {
#ðÏÌÕÞÁÅÍ ÐÁÒÕ ÐÁÒÏÌØ-ÏÔÚÙ× Õ ÓÅÒ×ÅÒÁ, ÎÁ ËÏÔÏÒÙÊ ÐÅÒÅÎÏÓÉÍ ÚÁÐÉÓÉ
eval {
$get_challenge = xmlrpc_call("LJ.XMLRPC.getchallenge");
$challenge = $get_challenge->{'challenge'};
$response = md5_hex($challenge . md5_hex($dest_pass));
};
#Error handling
if ($@) {
print STDERR localtime(time) . ": Login on $dest_site failed\n";
print STDERR "debug2: " . $@;
print STDERR "\n\n";
die;
}
($entry_date, $entry_time) = split(/ /,$entry->{'eventtime'});
($year, $month, $day) = split(/-/,$entry_date);
($hour, $min, $sec) = split(/:/,$entry_time);
#ëÏÐÉÒÕÅÍ × ÎÏ×ÕÀ ÚÁÐÉÓØ ÔÅ ÐÏÌÑ, ËÏÔÏÒÙÅ ÍÏÖÎÏ ÔÕÐÏ ÓËÏÐÉÒÏ×ÁÔØ
$fields = {
'username' => $dest_user,
'auth_method' => 'challenge',
'auth_challenge' => $challenge,
'auth_response' => $response,
'ver' => 1,
'subject' => ($entry->{'subject'})?
LJR::Viewuserstandalone::expand_ljuser_tags($entry->{'subject'})
: "",
'year' => $year,
'mon' => $month,
'day' => $day,
'hour' => $hour,
'min' => $min,
};
#÷ÙÑÓÎÑÅÍ ÕÒÏ×ÅÎØ ÄÏÓÔÕÐÁ ËÏÐÉÒÕÅÍÏÊ ÚÁÐÉÓÉ
if (!$entry->{'security'}) {
$fields->{'security'} = 'public';
} else {
$fields->{'security'} = $entry->{'security'};
if ($entry->{'allowmask'}) {
$fields->{'allowmask'} = $entry->{'allowmask'};
}
};
#úÁÄÁ£Í ÓÔÒÏËÕ Ó ÍÅÔÁÄÁÎÎÙÍÉ
if ($entry->{'props'}->{'current_mood'})
{
$fields->{'props'}->{'current_mood'} =
$entry->{'props'}->{'current_mood'};
}
if ($entry->{'props'}->{'mood_id'})
{
$fields->{'props'}->{'mood_id'} =
$entry->{'props'}->{'mood_id'};
}
if ($entry->{'props'}->{'current_music'})
{
$fields->{'props'}->{'current_music'} =
$entry->{'props'}->{'current_music'};
}
if ($entry->{'props'}->{'opt_backdated'})
{
$fields->{'props'}->{'opt_backdated'} =
$entry->{'props'}->{'opt_backdated'};
}
#úÁÐÒÅÝÁÅÍ ËÏÍÍÅÎÔÁÒÉÉ × ËÏÐÉÒÕÅÍÏÊ ÚÁÐÉÓÉ
$fields->{'props'}->{'opt_nocomments'} = 1;
#äÏÂÁ×ÌÑÅÍ Ë ÔÅËÓÔÕ ÚÁÐÉÓÉ ÓÓÙÌËÕ ÎÁ ËÏÍÍÅÎÔÁÒÉÉ × ÉÓÈÏÄÎÏÍ ÖÕÒÎÁÌÅ
my $talklink_line = "<div style=\"text-align:right\">".
"<font size=\"-2\"><a href=\"".
$entry->{'url'}.
"\">Comments</a> | <a href=\"".
$entry->{'url'}.
"?mode=reply\">Comment on this</a></div>";
$fields->{'event'} = LJR::Viewuserstandalone::expand_ljuser_tags($entry->{'event'}).$talklink_line;
# print STDERR "\n" . $fields->{'event'} . "\n";
#ïÔÐÒÁ×ÌÑÅÍ ÏÞÅÒÅÄÎÕÀ ÚÁÐÉÓØ...
unless ($entry->{'props'}->{'revnum'}) {
eval {
$postevent = xmlrpc_call('LJ.XMLRPC.postevent', $fields);
#úÁÐÉÓÙ×ÁÅÍ ÓÏÏÔ×ÅÔÓÔ×ÉÅ ID ÉÓÈÏÄÎÏÇÏ ÐÏÓÔÉÎÇÁ É
#ID ÏÔÇÅÊÔÏ×ÁÎÎÏÇÏ ÐÏÓÔÉÎÇÁ × ÔÁÂÌÉÃÕ rlj_lj_id
$sqh = $dbh->prepare ("INSERT INTO rlj_lj_id(userid,ljr_id,lj_id)
VALUES ($user_id,
$entry->{'itemid'},
$postevent->{'itemid'})");
$sqh->execute;
};
#ïÂÒÁÂÏÔËÁ ÉÓËÌÀÞÅÎÉÑ: ÅÓÌÉ ÎÅ ÕÄÁÌÓÑ ×ÙÚÏ× XMLRPC
if ($@) {
print STDERR localtime(time) . ": Posting event on $dest_site failed\n";
print STDERR "debug3: " . $@;
print STDERR "\n\n";
};
#...ÉÌÉ ÒÅÄÁËÔÉÒÕÅÍ Å£, ÅÓÌÉ ÏÎÁ ÉÍÅÅÔ ÎÅÎÕÌÅ×ÏÊ ÎÏÍÅÒ ÒÅ×ÉÚÉÉ
} else {
#éÝÅÍ × ÂÁÚÅ ID ÁÎÁÌÏÇÉÞÎÏÊ ÚÁÐÉÓÉ ÄÎÅ×ÎÉËÁ-ËÏÐÉÉ
$sqh = $dbh->prepare ("SELECT lj_id
FROM rlj_lj_id
WHERE userid=$user_id
AND ljr_id=$entry->{'itemid'}");
$sqh->execute;
#ID ÚÁÐÉÓÉ × ÄÎÅ×ÎÉËÅ-ËÏÐÉÉ
my $lj_id;
#åÓÌÉ ÎÁÛÌÉ, ÒÅÄÁËÔÉÒÕÅÍ ÚÁÐÉÓØ Ó ÎÁÊÄÅÎÎÙÍ ID...
if (($lj_id) = $sqh->fetchrow_array) {
$fields->{'itemid'} = $lj_id;
eval {
$postevent = xmlrpc_call('LJ.XMLRPC.editevent', $fields);
};
#ïÂÒÁÂÏÔËÁ ÉÓËÌÀÞÉÔÅÌØÎÏÊ ÓÉÔÕÁÃÉÉ
if ($@) {
print STDERR localtime(time) . ": Editing event on $dest_site failed\n";
print STDERR "debug4: " . $@;
print STDERR "\n\n";
};
#...Á ÅÓÌÉ ÎÅÔ, ÓÒÁ×ÎÉ×ÁÅÍ Å£ ÄÁÔÕ
#Ó ÄÁÔÏÊ ÐÒÅÄÙÄÕÝÅÊ ÓÉÎÈÒÏÎÉÚÁÃÉÉ
} else {
#åÓÌÉ ÚÁÐÉÓØ ÎÏ×ÁÑ, ÔÏ ÐÒÏÓÔÏ ÐÏÓÔÉÍ Å£...
if (timelocal($ls_sec,$ls_min,$ls_hour,$ls_day,$ls_month,$ls_year)<
timelocal($sec, $min, $hour, $day, $month, $year))
{
eval {
$postevent = xmlrpc_call('LJ.XMLRPC.postevent', $fields);
#úÁÐÉÓÙ×ÁÅÍ ÓÏÏÔ×ÅÔÓÔ×ÉÅ ID ÉÓÈÏÄÎÏÇÏ ÐÏÓÔÉÎÇÁ É
#ID ÏÔÇÅÊÔÏ×ÁÎÎÏÇÏ ÐÏÓÔÉÎÇÁ × ÔÁÂÌÉÃÕ rlj_lj_id
$sqh = $dbh->prepare (
"INSERT INTO rlj_lj_id(userid,ljr_id,lj_id)
VALUES ($user_id,
$entry->{'itemid'},
$postevent->{'itemid'})");
$sqh->execute;
};
#ïÂÒÁÂÏÔËÁ ÉÓËÌÀÞÅÎÉÑ: ÅÓÌÉ ÎÅ ÕÄÁÌÓÑ ×ÙÚÏ× XMLRPC
if ($@) {
print STDERR localtime(time) . ": Posting event on $dest_site failed\n";
print STDERR "debug5: " . $@;
print STDERR "\n\n";
};
#...ÉÎÁÞÅ ÐÏÓÔÉÍ Å£ Ó ÁÔÒÉÂÕÔÏÍ backdate
} else {
$fields->{'props'}->{'opt_backdated'} = 1;
eval {
$postevent = xmlrpc_call('LJ.XMLRPC.postevent', $fields);
#úÁÐÉÓÙ×ÁÅÍ ÓÏÏÔ×ÅÔÓÔ×ÉÅ ID ÉÓÈÏÄÎÏÇÏ ÐÏÓÔÉÎÇÁ É
#ID ÏÔÇÅÊÔÏ×ÁÎÎÏÇÏ ÐÏÓÔÉÎÇÁ × ÔÁÂÌÉÃÕ rlj_lj_id
$sqh = $dbh->prepare (
"INSERT INTO rlj_lj_id(userid,ljr_id,lj_id)
VALUES ($user_id,
$entry->{'itemid'},
$postevent->{'itemid'})");
$sqh->execute;
};
#ïÂÒÁÂÏÔËÁ ÉÓËÌÀÞÅÎÉÑ: ÅÓÌÉ ÎÅ ÕÄÁÌÓÑ ×ÙÚÏ× XMLRPC
if ($@) {
print STDERR localtime(time) . ": Posting event on $dest_site failed\n";
print STDERR "debug4: " . $@;
print STDERR "\n\n";
};
};
};
};
};
};
sub xmlrpc_call {
my ($method, $req) = @_;
my $res = $xmlrpc->call($method, $req);
if ($res && $res->fault) {
print STDERR "XML-RPC Error:\n".
" String: " . $res->faultstring . "\n" .
" Code: " . $res->faultcode . "\n";
die;
}
elsif (!$res) {
print STDERR "Unknown XML-RPC Error.\n";
die;
}
return $res->result;
}