[dw-free] allow crossposting from clients
[commit: http://hg.dwscoalition.org/dw-free/rev/25742bb4fed3]
http://bugs.dwscoalition.org/show_bug.cgi?id=1305
Back out http://hg.dwscoalition.org/dw-free/raw-rev/1c0901cf5b11
Patch by
afuna.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=1305
Back out http://hg.dwscoalition.org/dw-free/raw-rev/1c0901cf5b11
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- cgi-bin/ljprotocol.pl
- htdocs/editjournal.bml
- htdocs/update.bml
-------------------------------------------------------------------------------- diff -r dd1198c129a5 -r 25742bb4fed3 cgi-bin/ljprotocol.pl --- a/cgi-bin/ljprotocol.pl Wed Aug 05 15:56:29 2009 +0000 +++ b/cgi-bin/ljprotocol.pl Wed Aug 05 17:32:41 2009 +0000 @@ -982,32 +982,6 @@ sub common_event_validation ! LJ::Tags::is_valid_tagstring($req->{props}->{taglist}); return 1; -} - -sub schedule_xposts -{ - my ($u, $ditemid, $deletep, $fn) = @_; - my @successes; - my @failures; - my @accounts = DW::External::Account->get_external_accounts($u); - foreach my $acct (@accounts) { - my ($xpostp, $info) = $fn->($acct); - if ($xpostp) { - my $sclient = LJ::theschwartz(); - my $info = {uid => $u->userid, - accountid => $acct->acctid, - ditemid => $ditemid, - delete => $deletep, - %{$info}}; - my $job = TheSchwartz::Job->new_from_array('DW::Worker::XPostWorker', $info); - if ($sclient && $job && $sclient->insert($job)) { - push @successes, $acct; - } else { - push @failures, $acct; - } - } - } - return (\@successes, \@failures); } sub postevent @@ -1524,10 +1498,6 @@ sub postevent my $entry = LJ::Entry->new($uowner, jitemid => $jitemid, anum => $anum); - if (LJ::u_equals($u, $uowner) && $req->{xpost} ne '0') { - schedule_xposts($u, $ditemid, 0, sub { ((shift)->xpostbydefault, {}) }); - } - # run local site-specific actions LJ::run_hooks("postpost", { 'itemid' => $jitemid, @@ -1578,8 +1548,6 @@ sub editevent sub editevent { my ($req, $err, $flags) = @_; - my $res; - my $deleted = 0; un_utf8_request($req); return undef unless authenticate($req, $err, $flags); @@ -1636,8 +1604,6 @@ sub editevent "compressed, security, allowmask, year, month, day, ". "rlogtime, anum FROM log2 WHERE journalid=$ownerid AND jitemid=$itemid"); - my $ditemid = $itemid * 256 + $oldevent->{anum}; - ($oldevent->{subject}, $oldevent->{event}) = $dbcm->selectrow_array ("SELECT subject, event FROM logtext2 ". "WHERE journalid=$ownerid AND jitemid=$itemid"); @@ -1683,8 +1649,6 @@ sub editevent # simple logic for deleting an entry if (!$flags->{'use_old_content'} && $req->{'event'} !~ /\S/) { - $deleted = 1; - # if their newesteventtime prop equals the time of the one they're deleting # then delete their newesteventtime. if ($u->{'userid'} == $uowner->{'userid'}) { @@ -1700,7 +1664,7 @@ sub editevent # delete is initiated. $uowner->log_event('delete_entry', { remote => $u, - actiontarget => $ditemid, + actiontarget => ($req->{itemid} * 256 + $oldevent->{anum}), method => 'protocol', }) unless $flags->{noauth}; @@ -1711,8 +1675,9 @@ sub editevent # what they just deleted. (or something... probably rare.) LJ::set_userprop($u, "dupsig_post", undef); - $res = {itemid => $itemid, anum => $oldevent->{anum}}; - goto END; + my $res = { 'itemid' => $itemid, + 'anum' => $oldevent->{'anum'} }; + return $res; } # now make sure the new entry text isn't $CannotBeShown @@ -1829,7 +1794,7 @@ sub editevent LJ::mysqldate_to_time($eventtime, 1), LJ::mysqldate_to_time($oldevent->{'logtime'}, 1), $sec, - $ditemid); + $itemid*256 + $oldevent->{'anum'}); LJ::MemCache::set([$ownerid, "log2:$ownerid:$itemid"], $row); @@ -1910,7 +1875,7 @@ sub editevent LJ::memcache_kill($ownerid, "dayct2"); - $res = {itemid => $itemid}; + my $res = { 'itemid' => $itemid }; if (defined $oldevent->{'anum'}) { $res->{'anum'} = $oldevent->{'anum'}; $res->{'url'} = LJ::item_link($uowner, $itemid, $oldevent->{'anum'}); @@ -1926,13 +1891,6 @@ sub editevent LJ::run_hooks("editpost", $entry); - END: - my $xpost_string = $curprops{$itemid}->{xpost}; - if ($xpost_string && LJ::u_equals($u, $uowner) && $req->{xpost} ne '0') { - my $xpost_info = DW::External::Account->xpost_string_to_hash($xpost_string); - schedule_xposts($u, $ditemid, $deleted, - sub { ($xpost_info->{(shift)->acctid}, {}) }); - } return $res; } diff -r dd1198c129a5 -r 25742bb4fed3 htdocs/editjournal.bml --- a/htdocs/editjournal.bml Wed Aug 05 15:56:29 2009 +0000 +++ b/htdocs/editjournal.bml Wed Aug 05 17:32:41 2009 +0000 @@ -205,7 +205,6 @@ body<= 'user' => $u->{'user'}, 'usejournal' => $usejournal, 'itemid' => $itemid, - 'xpost' => '0' ); LJ::entry_form_decode(\%req, \%POST); @@ -243,31 +242,46 @@ body<= # selected crosspost. my $xpost_result = ''; if ($journalu == $remote && ($POST{prop_xpost_check} || $GET{prop_xpost_check})) { - my ($xpost_successes, $xpost_failures) = - LJ::Protocol::schedule_xposts($remote, $ditemid, $deleted, - sub { - my $acctid = (shift)->acctid; - ($POST{"prop_xpost_$acctid"} || $GET{"prop_xpost_$acctid"}, - {password => $POST{"prop_xpost_password_$acctid"} - || $GET{"prop_xpost_password_$acctid"}, - auth_challenge => $POST{"prop_xpost_chal_$acctid"} - || $GET{"prop_xpost_chal_$acctid"}, - auth_response => $POST{"prop_xpost_resp_$acctid"} - || $GET{"prop_xpost_resp_$acctid"}}) - }); - $xpost_result .= join("\n", - map {"<li>" - . BML::ml('xpost.request.success', - {account => $_->displayname}) - . "</li>"} - @{$xpost_successes}); - $xpost_result .= join("\n", - map {"<li><div style='color: red;'><strong>" - . BML::ml('xpost.request.failed', - {account => $_->displayname, - 'editurl' => $edititemlink}) - . " </strong></div></li>"} - @{$xpost_failures}); + my @xpost_success; + my @xpost_errors; + + # get the accounts for the user + my @accounts = DW::External::Account->get_external_accounts($remote); + foreach my $acct(@accounts) { + my $acctid = $acct->acctid; + # see if we said to xpost to this account + if ($POST{"prop_xpost_$acctid"} || $GET{"prop_xpost_$acctid"}) { + # get the auth information + my %auth; + if ($POST{"prop_xpost_resp_$acctid"} || $GET{"prop_xpost_resp_$acctid"}) { + $auth{auth_response} = $POST{"prop_xpost_resp_$acctid"} || $GET{"prop_xpost_resp_$acctid"}; + $auth{auth_challenge} = $POST{"prop_xpost_chal_$acctid"} || $GET{"prop_xpost_chal_$acctid"}; + } else { + $auth{password} = $POST{"prop_xpost_password_$acctid"} || $GET{"prop_xpost_password_$acctid"}; + } + # send this to theschwartz to crosspost + my $sclient = LJ::theschwartz(); + my $job = TheSchwartz::Job->new_from_array( + 'DW::Worker::XPostWorker', { + 'uid' => $remote->userid, + 'ditemid' => $ditemid, + 'accountid' => $acctid, + 'password' => $auth{password}, + 'auth_challenge' => $auth{auth_challenge}, + 'auth_response' => $auth{auth_response}, + 'delete' => $deleted } ); + # if we have a client and job, then request + # the crosspost + if ($sclient && $job && $sclient->insert($job)) { + push @xpost_success, "<li>" . BML::ml('xpost.request.success', {'account' => $acct->displayname}) . "</li>"; + } else { + # one of them didn't work. + push @xpost_errors, "<li><div style='color: red;'><strong>" . BML::ml('xpost.request.failed', { 'account' => $acct->displayname, 'editurl' => $edititemlink }) . " </strong></div></li>"; + } + } + } + $xpost_result .= join ("\n", @xpost_success); + $xpost_result .= join ("\n", @xpost_errors); } my $result = "<?h1 $ML{'.success.head'} h1?>"; diff -r dd1198c129a5 -r 25742bb4fed3 htdocs/update.bml --- a/htdocs/update.bml Wed Aug 05 15:56:29 2009 +0000 +++ b/htdocs/update.bml Wed Aug 05 17:32:41 2009 +0000 @@ -375,7 +375,6 @@ 'password' => $POST{'password'}, 'usejournal' => $POST{'usejournal'}, 'tz' => 'guess', - 'xpost' => '0' ); LJ::entry_form_decode(\%req, \%POST); @@ -446,32 +445,48 @@ # crosspost if we're posting to our own journal and have # selected crosspost. if ($ju == $remote && ($POST{prop_xpost_check} || $GET{prop_xpost_check})) { - my ($xpost_successes, $xpost_errors) = - LJ::Protocol::schedule_xposts($remote, $itemid, 0, - sub { - my $acctid = (shift)->acctid; - ($POST{"prop_xpost_$acctid"} || $GET{"prop_xpost_$acctid"}, - {password => $POST{"prop_xpost_password_$acctid"} - || $GET{"prop_xpost_password_$acctid"}, - auth_challenge => $POST{"prop_xpost_chal_$acctid"} - || $GET{"prop_xpost_chal_$acctid"}, - auth_response => $POST{"prop_xpost_resp_$acctid"} - || $GET{"prop_xpost_resp_$acctid"}}) - }); + my @xpost_success; + my @xpost_errors; + + # get the accounts for the user + my @accounts = DW::External::Account->get_external_accounts($remote); + foreach my $acct(@accounts) { + my $acctid = $acct->acctid; + # see if we said to xpost to this account + if ($POST{"prop_xpost_$acctid"} || $GET{"prop_xpost_$acctid"}) { + # xpost to this account. + my $result = {}; + my %auth; + if ($POST{"prop_xpost_resp_$acctid"} || $GET{"prop_xpost_resp_$acctid"}) { + $auth{auth_response} = $POST{"prop_xpost_resp_$acctid"} || $GET{"prop_xpost_resp_$acctid"}; + $auth{auth_challenge} = $POST{"prop_xpost_chal_$acctid"} || $GET{"prop_xpost_chal_$acctid"}; + } else { + $auth{password} = $POST{"prop_xpost_password_$acctid"} || $GET{"prop_xpost_password_$acctid"}; + } + # send this to theschwartz to crosspost + my $sclient = LJ::theschwartz(); + my $job = TheSchwartz::Job->new_from_array( + 'DW::Worker::XPostWorker', { + 'uid' => $remote->userid, + 'ditemid' => $itemid, + 'accountid' => $acctid, + 'password' => $auth{password}, + 'auth_challenge' => $auth{auth_challenge}, + 'auth_response' => $auth{auth_response} }); + # if we have a client and job, then request + # the crosspost + if ($sclient && $job && $sclient->insert($job)) { + push @xpost_success, "<li>" . BML::ml('xpost.request.success', {'account' => $acct->displayname}) . "</li>"; + } else { + # one of them didn't work. + push @xpost_errors, "<li><div style='color: red;'><strong>" . BML::ml('xpost.request.failed', { 'account' => $acct->displayname, 'editurl' => $edititemlink }) . " </strong></div></li>"; + } + } + } + $$body .= "<ul>\n"; - $$body .= join("\n", - map { "<li>" - . BML::ml('xpost.request.success', - {account => $_->displayname}) - . "</li>" } - @{$xpost_successes}); - $$body .= join("\n", - map { "<li><div style='color: red;'><strong>" - . BML::ml('xpost.request.failed', - {account => $_->displayname, - editurl => $edititemlink }) - . " </strong></div></li>" } - @{$xpost_errors}); + $$body .= join ("\n", @xpost_success); + $$body .= join ("\n", @xpost_errors); $$body .= "</ul>\n"; $$body .= "<br/>"; } --------------------------------------------------------------------------------