Path: blob/master/src/applications/diffusion/controller/DiffusionRepositoryURICredentialController.php
12242 views
<?php12final class DiffusionRepositoryURICredentialController3extends DiffusionController {45public function handleRequest(AphrontRequest $request) {6$response = $this->loadDiffusionContextForEdit();7if ($response) {8return $response;9}1011$viewer = $this->getViewer();12$drequest = $this->getDiffusionRequest();13$repository = $drequest->getRepository();1415$id = $request->getURIData('id');16$uri = id(new PhabricatorRepositoryURIQuery())17->setViewer($viewer)18->withIDs(array($id))19->withRepositories(array($repository))20->requireCapabilities(21array(22PhabricatorPolicyCapability::CAN_VIEW,23PhabricatorPolicyCapability::CAN_EDIT,24))25->executeOne();26if (!$uri) {27return new Aphront404Response();28}2930$is_builtin = $uri->isBuiltin();31$has_credential = (bool)$uri->getCredentialPHID();32$view_uri = $uri->getViewURI();33$is_remove = ($request->getURIData('action') == 'remove');3435if ($is_builtin) {36return $this->newDialog()37->setTitle(pht('Builtin URIs Do Not Use Credentials'))38->appendParagraph(39pht(40'You can not set a credential for builtin URIs which this '.41'server hosts. These URIs are not fetched from or pushed to, '.42'and credentials are not required to authenticate any '.43'activity against them.'))44->addCancelButton($view_uri);45}4647if ($request->isFormPost()) {48$xactions = array();4950if ($is_remove) {51$new_phid = null;52} else {53$new_phid = $request->getStr('credentialPHID');54}5556$type_credential = PhabricatorRepositoryURITransaction::TYPE_CREDENTIAL;5758$xactions[] = id(new PhabricatorRepositoryURITransaction())59->setTransactionType($type_credential)60->setNewValue($new_phid);6162$editor = id(new DiffusionURIEditor())63->setActor($viewer)64->setContinueOnNoEffect(true)65->setContinueOnMissingFields(true)66->setContentSourceFromRequest($request)67->applyTransactions($uri, $xactions);6869return id(new AphrontRedirectResponse())->setURI($view_uri);70}7172$command_engine = $uri->newCommandEngine();73$is_supported = $command_engine->isCredentialSupported();7475$body = null;76$form = null;77$width = AphrontDialogView::WIDTH_DEFAULT;78if ($is_remove) {79if ($has_credential) {80$title = pht('Remove Credential');81$body = pht(82'This credential will no longer be used to authenticate activity '.83'against this URI.');84$button = pht('Remove Credential');85} else {86$title = pht('No Credential');87$body = pht(88'This URI does not have an associated credential.');89$button = null;90}91} else if (!$is_supported) {92$title = pht('Unauthenticated Protocol');93$body = pht(94'The protocol for this URI ("%s") does not use authentication, so '.95'you can not provide a credential.',96$command_engine->getDisplayProtocol());97$button = null;98} else {99$effective_uri = $uri->getEffectiveURI();100101$label = $command_engine->getPassphraseCredentialLabel();102$credential_type = $command_engine->getPassphraseDefaultCredentialType();103104$provides_type = $command_engine->getPassphraseProvidesCredentialType();105$options = id(new PassphraseCredentialQuery())106->setViewer($viewer)107->withIsDestroyed(false)108->withProvidesTypes(array($provides_type))109->execute();110111$control = id(new PassphraseCredentialControl())112->setName('credentialPHID')113->setLabel($label)114->setValue($uri->getCredentialPHID())115->setCredentialType($credential_type)116->setOptions($options);117118$default_user = $effective_uri->getUser();119if (strlen($default_user)) {120$control->setDefaultUsername($default_user);121}122123$form = id(new AphrontFormView())124->setViewer($viewer)125->appendControl($control);126127if ($has_credential) {128$title = pht('Update Credential');129$button = pht('Update Credential');130} else {131$title = pht('Set Credential');132$button = pht('Set Credential');133}134135$width = AphrontDialogView::WIDTH_FORM;136}137138$dialog = $this->newDialog()139->setWidth($width)140->setTitle($title)141->addCancelButton($view_uri);142143if ($body) {144$dialog->appendParagraph($body);145}146147if ($form) {148$dialog->appendForm($form);149}150151if ($button) {152$dialog->addSubmitButton($button);153}154155return $dialog;156}157158}159160161