@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorAuthFactorProviderEditEngine
4 extends PhabricatorEditEngine {
5
6 private $providerFactor;
7
8 const ENGINECONST = 'auth.factor.provider';
9
10 public function isEngineConfigurable() {
11 return false;
12 }
13
14 public function getEngineName() {
15 return pht('MFA Providers');
16 }
17
18 public function getSummaryHeader() {
19 return pht('Edit MFA Providers');
20 }
21
22 public function getSummaryText() {
23 return pht('This engine is used to edit MFA providers.');
24 }
25
26 public function getEngineApplicationClass() {
27 return PhabricatorAuthApplication::class;
28 }
29
30 public function setProviderFactor(PhabricatorAuthFactor $factor) {
31 $this->providerFactor = $factor;
32 return $this;
33 }
34
35 public function getProviderFactor() {
36 return $this->providerFactor;
37 }
38
39 protected function newEditableObject() {
40 $factor = $this->getProviderFactor();
41 if ($factor) {
42 $provider = PhabricatorAuthFactorProvider::initializeNewProvider($factor);
43 } else {
44 $provider = new PhabricatorAuthFactorProvider();
45 }
46
47 return $provider;
48 }
49
50 protected function newObjectQuery() {
51 return new PhabricatorAuthFactorProviderQuery();
52 }
53
54 protected function getObjectCreateTitleText($object) {
55 return pht('Create MFA Provider');
56 }
57
58 protected function getObjectCreateButtonText($object) {
59 return pht('Create MFA Provider');
60 }
61
62 protected function getObjectEditTitleText($object) {
63 return pht('Edit MFA Provider');
64 }
65
66 protected function getObjectEditShortText($object) {
67 return $object->getObjectName();
68 }
69
70 protected function getObjectCreateShortText() {
71 return pht('Create MFA Provider');
72 }
73
74 protected function getObjectName() {
75 return pht('MFA Provider');
76 }
77
78 protected function getEditorURI() {
79 return '/auth/mfa/edit/';
80 }
81
82 protected function getObjectCreateCancelURI($object) {
83 return '/auth/mfa/';
84 }
85
86 protected function getObjectViewURI($object) {
87 return $object->getURI();
88 }
89
90 protected function getCreateNewObjectPolicy() {
91 return $this->getApplication()->getPolicy(
92 AuthManageProvidersCapability::CAPABILITY);
93 }
94
95 protected function buildCustomEditFields($object) {
96 $factor = $object->getFactor();
97 $factor_name = $factor->getFactorName();
98
99 $status_map = PhabricatorAuthFactorProviderStatus::getMap();
100
101 $fields = array(
102 id(new PhabricatorStaticEditField())
103 ->setKey('displayType')
104 ->setLabel(pht('Factor Type'))
105 ->setDescription(pht('Type of the MFA provider.'))
106 ->setValue($factor_name),
107 id(new PhabricatorTextEditField())
108 ->setKey('name')
109 ->setTransactionType(
110 PhabricatorAuthFactorProviderNameTransaction::TRANSACTIONTYPE)
111 ->setLabel(pht('Name'))
112 ->setDescription(pht('Display name for the MFA provider.'))
113 ->setValue($object->getName())
114 ->setPlaceholder($factor_name),
115 id(new PhabricatorSelectEditField())
116 ->setKey('status')
117 ->setTransactionType(
118 PhabricatorAuthFactorProviderStatusTransaction::TRANSACTIONTYPE)
119 ->setLabel(pht('Status'))
120 ->setDescription(pht('Status of the MFA provider.'))
121 ->setValue($object->getStatus())
122 ->setOptions($status_map),
123 );
124
125 $factor_fields = $factor->newEditEngineFields($this, $object);
126 foreach ($factor_fields as $field) {
127 $fields[] = $field;
128 }
129
130 return $fields;
131 }
132
133}