public function processRequest() { $request = $this->getRequest(); $viewer = $request->getUser(); $phid = $this->getClientPHID(); if ($phid) { $client = id(new PhabricatorOAuthServerClientQuery())->setViewer($viewer)->withPHIDs(array($phid))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne(); if (!$client) { return new Aphront404Response(); } $title = pht('Edit OAuth Application: %s', $client->getName()); $submit_button = pht('Save Application'); $crumb_text = pht('Edit'); $cancel_uri = $client->getViewURI(); $is_new = false; } else { $this->requireApplicationCapability(PhabricatorOAuthServerCreateClientsCapability::CAPABILITY); $client = PhabricatorOAuthServerClient::initializeNewClient($viewer); $title = pht('Create OAuth Application'); $submit_button = pht('Create Application'); $crumb_text = pht('Create Application'); $cancel_uri = $this->getApplicationURI(); $is_new = true; } $errors = array(); $e_redirect = true; $e_name = true; if ($request->isFormPost()) { $redirect_uri = $request->getStr('redirect_uri'); $client->setName($request->getStr('name')); $client->setRedirectURI($redirect_uri); if (!strlen($client->getName())) { $errors[] = pht('You must choose a name for this OAuth application.'); $e_name = pht('Required'); } $server = new PhabricatorOAuthServer(); $uri = new PhutilURI($redirect_uri); if (!$server->validateRedirectURI($uri)) { $errors[] = pht('Redirect URI must be a fully qualified domain name ' . 'with no fragments. See %s for more information on the correct ' . 'format.', 'http://tools.ietf.org/html/draft-ietf-oauth-v2-23#section-3.1.2'); $e_redirect = pht('Invalid'); } $client->setViewPolicy($request->getStr('viewPolicy')); $client->setEditPolicy($request->getStr('editPolicy')); if (!$errors) { $client->save(); $view_uri = $client->getViewURI(); return id(new AphrontRedirectResponse())->setURI($view_uri); } } $policies = id(new PhabricatorPolicyQuery())->setViewer($viewer)->setObject($client)->execute(); $form = id(new AphrontFormView())->setUser($viewer)->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Name'))->setName('name')->setValue($client->getName())->setError($e_name))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Redirect URI'))->setName('redirect_uri')->setValue($client->getRedirectURI())->setError($e_redirect))->appendChild(id(new AphrontFormPolicyControl())->setUser($viewer)->setCapability(PhabricatorPolicyCapability::CAN_VIEW)->setPolicyObject($client)->setPolicies($policies)->setName('viewPolicy'))->appendChild(id(new AphrontFormPolicyControl())->setUser($viewer)->setCapability(PhabricatorPolicyCapability::CAN_EDIT)->setPolicyObject($client)->setPolicies($policies)->setName('editPolicy'))->appendChild(id(new AphrontFormSubmitControl())->addCancelButton($cancel_uri)->setValue($submit_button)); $crumbs = $this->buildApplicationCrumbs(); if (!$is_new) { $crumbs->addTextCrumb($client->getName(), $client->getViewURI()); } $crumbs->addTextCrumb($crumb_text); $box = id(new PHUIObjectBoxView())->setHeaderText($title)->setFormErrors($errors)->setForm($form); return $this->buildApplicationPage(array($crumbs, $box), array('title' => $title)); }
protected function newEditableObject() { return PhabricatorOAuthServerClient::initializeNewClient($this->getViewer()); }