[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
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/>";
}
--------------------------------------------------------------------------------
