Permalink
Browse files

Add mail keys to Ponder questions

Summary:
We need to go slightly farther to stub reply handler functionality for Ponder in at least some configurations, where we rely on the presence of a unique random key to generate per-object or per-object+user reply addresses.

This should probably be formalized in an interface since it's currently pretty ad-hoc.

Test Plan:
  - Made comments in Ponder under a per-user email configuration.
  - Ran migration, verified mail keys were generated.
  - Ran migration again (with --apply), verified existing questions were skipped.
  - Created a new question, verified mail key generation.

Reviewers: pieter

Reviewed By: pieter

CC: aran

Maniphest Tasks: T1873

Differential Revision: https://secure.phabricator.com/D3665
  • Loading branch information...
1 parent a18de93 commit 2532cb9613586e21eaac1f5ff56d5caff716dd96 @epriestley epriestley committed Oct 9, 2012
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * Copyright 2012 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+echo "Populating Questions with mail keys...\n";
+foreach (new LiskMigrationIterator(new PonderQuestion()) as $question) {
+ $id = $question->getID();
+
+ echo "Question {$id}: ";
+ if (!$question->getMailKey()) {
+ queryfx(
+ $question->establishConnection('w'),
+ 'UPDATE %T SET mailKey = %s WHERE id = %d',
+ $question->getTableName(),
+ Filesystem::readRandomCharacters(20),
+ $id);
+ echo "Generated Key\n";
+ } else {
+ echo "-\n";
+ }
+}
+
+echo "Done.\n";
@@ -0,0 +1,2 @@
+ALTER TABLE `{$NAMESPACE}_ponder`.ponder_question
+ ADD mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin;
@@ -106,6 +106,7 @@ public function send() {
->loadHandles();
$reply_handler = new PonderReplyHandler();
+ $reply_handler->setMailReceiver($question);
$body = new PhabricatorMetaMTAMailBody();
$body->addRawSection($this->renderBody());
@@ -34,6 +34,7 @@
protected $voteCount;
protected $answerCount;
protected $heat;
+ protected $mailKey;
private $answers;
private $vote;
@@ -175,4 +176,12 @@ public function getVotablePHID() {
public function isAutomaticallySubscribed($phid) {
return false;
}
+
+ public function save() {
+ if (!$this->getMailKey()) {
+ $this->setMailKey(Filesystem::readRandomCharacters(20));
+ }
+ return parent::save();
+ }
+
}
@@ -996,7 +996,14 @@ public function getPatches() {
'type' => 'sql',
'name' => $this->getPatchPath('phamedomain.sql'),
),
-
+ 'ponder-mailkey.sql' => array(
+ 'type' => 'sql',
+ 'name' => $this->getPatchPath('ponder-mailkey.sql'),
+ ),
+ 'ponder-mailkey-populate.php' => array(
+ 'type' => 'php',
+ 'name' => $this->getPatchPath('ponder-mailkey-populate.php'),
+ ),
);
}

0 comments on commit 2532cb9

Please sign in to comment.