Generate file attachment transactions for explicit Remarkup attachments on common...
[phabricator.git] / src / applications / oauthserver / editor / PhabricatorOAuthServerEditor.php
blob32b9d45054a7d7f29ff04569275cdfdad0e793be
1 <?php
3 final class PhabricatorOAuthServerEditor
4 extends PhabricatorApplicationTransactionEditor {
6 public function getEditorApplicationClass() {
7 return 'PhabricatorOAuthServerApplication';
10 public function getEditorObjectsDescription() {
11 return pht('OAuth Applications');
14 public function getTransactionTypes() {
15 $types = parent::getTransactionTypes();
17 $types[] = PhabricatorOAuthServerTransaction::TYPE_NAME;
18 $types[] = PhabricatorOAuthServerTransaction::TYPE_REDIRECT_URI;
19 $types[] = PhabricatorOAuthServerTransaction::TYPE_DISABLED;
21 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
22 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
24 return $types;
27 protected function getCustomTransactionOldValue(
28 PhabricatorLiskDAO $object,
29 PhabricatorApplicationTransaction $xaction) {
31 switch ($xaction->getTransactionType()) {
32 case PhabricatorOAuthServerTransaction::TYPE_NAME:
33 return $object->getName();
34 case PhabricatorOAuthServerTransaction::TYPE_REDIRECT_URI:
35 return $object->getRedirectURI();
36 case PhabricatorOAuthServerTransaction::TYPE_DISABLED:
37 return $object->getIsDisabled();
41 protected function getCustomTransactionNewValue(
42 PhabricatorLiskDAO $object,
43 PhabricatorApplicationTransaction $xaction) {
45 switch ($xaction->getTransactionType()) {
46 case PhabricatorOAuthServerTransaction::TYPE_NAME:
47 case PhabricatorOAuthServerTransaction::TYPE_REDIRECT_URI:
48 return $xaction->getNewValue();
49 case PhabricatorOAuthServerTransaction::TYPE_DISABLED:
50 return (int)$xaction->getNewValue();
54 protected function applyCustomInternalTransaction(
55 PhabricatorLiskDAO $object,
56 PhabricatorApplicationTransaction $xaction) {
58 switch ($xaction->getTransactionType()) {
59 case PhabricatorOAuthServerTransaction::TYPE_NAME:
60 $object->setName($xaction->getNewValue());
61 return;
62 case PhabricatorOAuthServerTransaction::TYPE_REDIRECT_URI:
63 $object->setRedirectURI($xaction->getNewValue());
64 return;
65 case PhabricatorOAuthServerTransaction::TYPE_DISABLED:
66 $object->setIsDisabled($xaction->getNewValue());
67 return;
70 return parent::applyCustomInternalTransaction($object, $xaction);
73 protected function applyCustomExternalTransaction(
74 PhabricatorLiskDAO $object,
75 PhabricatorApplicationTransaction $xaction) {
77 switch ($xaction->getTransactionType()) {
78 case PhabricatorOAuthServerTransaction::TYPE_NAME:
79 case PhabricatorOAuthServerTransaction::TYPE_REDIRECT_URI:
80 case PhabricatorOAuthServerTransaction::TYPE_DISABLED:
81 return;
84 return parent::applyCustomExternalTransaction($object, $xaction);
87 protected function validateTransaction(
88 PhabricatorLiskDAO $object,
89 $type,
90 array $xactions) {
92 $errors = parent::validateTransaction($object, $type, $xactions);
94 switch ($type) {
95 case PhabricatorOAuthServerTransaction::TYPE_NAME:
96 $missing = $this->validateIsEmptyTextField(
97 $object->getName(),
98 $xactions);
100 if ($missing) {
101 $error = new PhabricatorApplicationTransactionValidationError(
102 $type,
103 pht('Required'),
104 pht('OAuth applications must have a name.'),
105 nonempty(last($xactions), null));
107 $error->setIsMissingFieldError(true);
108 $errors[] = $error;
110 break;
111 case PhabricatorOAuthServerTransaction::TYPE_REDIRECT_URI:
112 $missing = $this->validateIsEmptyTextField(
113 $object->getRedirectURI(),
114 $xactions);
115 if ($missing) {
116 $error = new PhabricatorApplicationTransactionValidationError(
117 $type,
118 pht('Required'),
119 pht('OAuth applications must have a valid redirect URI.'),
120 nonempty(last($xactions), null));
122 $error->setIsMissingFieldError(true);
123 $errors[] = $error;
124 } else {
125 foreach ($xactions as $xaction) {
126 $redirect_uri = $xaction->getNewValue();
128 try {
129 $server = new PhabricatorOAuthServer();
130 $server->assertValidRedirectURI($redirect_uri);
131 } catch (Exception $ex) {
132 $errors[] = new PhabricatorApplicationTransactionValidationError(
133 $type,
134 pht('Invalid'),
135 $ex->getMessage(),
136 $xaction);
140 break;
143 return $errors;