Page MenuHomePhabricator

D16621.diff
No OneTemporary

D16621.diff

diff --git a/resources/sql/autopatches/20160928.tokentoken.sql b/resources/sql/autopatches/20160928.tokentoken.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160928.tokentoken.sql
@@ -0,0 +1,15 @@
+CREATE TABLE {$NAMESPACE}_token.token_token (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ phid VARBINARY(64) NOT NULL,
+ name VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT},
+ flavor VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT},
+ status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT},
+ builtinKey VARCHAR(32) COLLATE {$COLLATE_TEXT},
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ creatorPHID VARBINARY(64) NOT NULL,
+ tokenImagePHID VARBINARY(64),
+ UNIQUE KEY `key_phid` (phid),
+ UNIQUE KEY `key_builtin` (builtinKey),
+ KEY `key_creator` (creatorPHID, dateModified)
+) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3780,6 +3780,7 @@
'PhabricatorTokensApplication' => 'applications/tokens/application/PhabricatorTokensApplication.php',
'PhabricatorTokensCurtainExtension' => 'applications/tokens/engineextension/PhabricatorTokensCurtainExtension.php',
'PhabricatorTokensSettingsPanel' => 'applications/settings/panel/PhabricatorTokensSettingsPanel.php',
+ 'PhabricatorTokensToken' => 'applications/tokens/storage/PhabricatorTokensToken.php',
'PhabricatorTooltipUIExample' => 'applications/uiexample/examples/PhabricatorTooltipUIExample.php',
'PhabricatorTransactionChange' => 'applications/transactions/data/PhabricatorTransactionChange.php',
'PhabricatorTransactionRemarkupChange' => 'applications/transactions/data/PhabricatorTransactionRemarkupChange.php',
@@ -8824,6 +8825,13 @@
'PhabricatorTokensApplication' => 'PhabricatorApplication',
'PhabricatorTokensCurtainExtension' => 'PHUICurtainExtension',
'PhabricatorTokensSettingsPanel' => 'PhabricatorSettingsPanel',
+ 'PhabricatorTokensToken' => array(
+ 'PhabricatorTokenDAO',
+ 'PhabricatorDestructibleInterface',
+ 'PhabricatorSubscribableInterface',
+ 'PhabricatorFlaggableInterface',
+ 'PhabricatorConduitResultInterface',
+ ),
'PhabricatorTooltipUIExample' => 'PhabricatorUIExample',
'PhabricatorTransactionChange' => 'Phobject',
'PhabricatorTransactionRemarkupChange' => 'PhabricatorTransactionChange',
diff --git a/src/applications/tokens/storage/PhabricatorTokensToken.php b/src/applications/tokens/storage/PhabricatorTokensToken.php
new file mode 100644
--- /dev/null
+++ b/src/applications/tokens/storage/PhabricatorTokensToken.php
@@ -0,0 +1,157 @@
+<?php
+
+final class PhabricatorTokensToken extends PhabricatorTokenDAO
+ implements
+ PhabricatorDestructibleInterface,
+ PhabricatorSubscribableInterface,
+ PhabricatorFlaggableInterface,
+ PhabricatorConduitResultInterface {
+
+ protected $name;
+ protected $flavor;
+ protected $status;
+ protected $creatorPHID;
+ protected $tokenImagePHID;
+ protected $builtinKey;
+
+
+ const STATUS_ACTIVE = 'active';
+ const STATUS_ARCHIVED = 'archived';
+
+ protected function getConfiguration() {
+ return array(
+ self::CONFIG_AUX_PHID => true,
+ self::CONFIG_COLUMN_SCHEMA => array(
+ 'name' => 'text64',
+ 'flavor' => 'text128',
+ 'status' => 'text32',
+ 'tokenImagePHID' => 'phid?',
+ 'builtinKey' => 'text32?',
+ ),
+ self::CONFIG_KEY_SCHEMA => array(
+ 'key_creator' => array(
+ 'columns' => array('creatorPHID', 'dateModified'),
+ ),
+ 'key_builtin' => array(
+ 'columns' => array('builtinKey'),
+ 'unique' => true,
+ ),
+ ),
+ ) + parent::getConfiguration();
+ }
+
+ public function getTableName() {
+ return 'token_token';
+ }
+
+ public function generatePHID() {
+ return PhabricatorPHID::generateNewPHID(
+ PhabricatorTokenTokenPHIDType::TYPECONST);
+ }
+
+ public static function initializeNewToken(PhabricatorUser $actor) {
+ $app = id(new PhabricatorApplicationQuery())
+ ->setViewer($actor)
+ ->withClasses(array('PhabricatorTokensApplication'))
+ ->executeOne();
+
+ $token = id(new self())
+ ->setCreatorPHID($actor->getPHID())
+ ->setStatus(self::STATUS_ACTIVE)
+ ->setTokenImagePHID('');
+ return $token;
+ }
+
+ public function isArchived() {
+ return ($this->getStatus() == self::STATUS_ARCHIVED);
+ }
+
+ public static function getStatusNameMap() {
+ return array(
+ self::STATUS_ACTIVE => pht('Active'),
+ self::STATUS_ARCHIVED => pht('Archived'),
+ );
+ }
+
+ public function getTokenImageURI() {
+ return $this->getTokenImageFile()->getBestURI();
+ }
+
+ public function attachTokenImageFile(PhabricatorFile $file) {
+ $this->tokenImageFile = $file;
+ return $this;
+ }
+
+ public function getTokenImageFile() {
+ return $this->assertAttached($this->tokenImageFile);
+ }
+
+ public function getViewURI() {
+ return '/tokens/view/'.$this->getID().'/';
+ }
+
+
+/* -( PhabricatorDestructibleInterface )----------------------------------- */
+
+ public function destroyObjectPermanently(
+ PhabricatorDestructionEngine $engine) {
+
+ $this->openTransaction();
+
+ $tokens = id(new PhabricatorTokenGiven())
+ ->loadAllWhere('tokenPHID = %s', $this->getPHID());
+ foreach ($tokens as $token) {
+ $token->delete();
+ }
+ if ($this->getTokenImagePHID()) {
+ id(new PhabricatorFile())
+ ->loadOneWhere('filePHID = %s', $this->getTokenImagePHID())
+ ->delete();
+ }
+
+ $this->delete();
+
+ $this->saveTransaction();
+ }
+
+/* -( PhabricatorSubscribableInterface Implementation )-------------------- */
+
+
+ public function isAutomaticallySubscribed($phid) {
+ return false;
+ }
+
+
+/* -( PhabricatorConduitResultInterface )---------------------------------- */
+
+
+ public function getFieldSpecificationsForConduit() {
+ return array(
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('name')
+ ->setType('string')
+ ->setDescription(pht('The name of the token.')),
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('flavor')
+ ->setType('string')
+ ->setDescription(pht('Token flavor.')),
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('status')
+ ->setType('string')
+ ->setDescription(pht('Archived or active status.')),
+ );
+ }
+
+ public function getFieldValuesForConduit() {
+ return array(
+ 'name' => $this->getName(),
+ 'flavor' => $this->getFlavor(),
+ 'status' => $this->getStatus(),
+ );
+ }
+
+ public function getConduitSearchAttachments() {
+ return array();
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, May 12, 2:46 AM (3 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6287383
Default Alt Text
D16621.diff (6 KB)

Event Timeline