Something went wrong. Try again.
@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
Something went wrong. Try again.
9.3 kB · 285 lines
PHP
at commit e0faa667
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286<?php
final class DiffusionRepositoryEditHostingController extends DiffusionRepositoryEditController {
private $serve;
protected function processDiffusionRequest(AphrontRequest $request) { $user = $request->getUser(); $drequest = $this->diffusionRequest; $repository = $drequest->getRepository(); $this->serve = $request->getURIData('serve');
$repository = id(new PhabricatorRepositoryQuery()) ->setViewer($user) ->requireCapabilities( array( PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT, )) ->withIDs(array($repository->getID())) ->executeOne(); if (!$repository) { return new Aphront404Response(); }
if (!$this->serve) { return $this->handleHosting($repository); } else { return $this->handleProtocols($repository); } }
public function handleHosting(PhabricatorRepository $repository) { $request = $this->getRequest(); $user = $request->getUser();
$v_hosting = $repository->isHosted();
$edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); $next_uri = $this->getRepositoryControllerURI($repository, 'edit/serve/');
if ($request->isFormPost()) { $v_hosting = $request->getBool('hosting');
$xactions = array(); $template = id(new PhabricatorRepositoryTransaction());
$type_hosting = PhabricatorRepositoryTransaction::TYPE_HOSTING;
$xactions[] = id(clone $template) ->setTransactionType($type_hosting) ->setNewValue($v_hosting);
id(new PhabricatorRepositoryEditor()) ->setContinueOnNoEffect(true) ->setContentSourceFromRequest($request) ->setActor($user) ->applyTransactions($repository, $xactions);
return id(new AphrontRedirectResponse())->setURI($next_uri); }
$crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Edit Hosting'));
$title = pht('Edit Hosting (%s)', $repository->getName());
$hosted_control = id(new AphrontFormRadioButtonControl()) ->setName('hosting') ->setLabel(pht('Hosting')) ->addButton( true, pht('Host Repository on Phabricator'), pht( 'Phabricator will host this repository. Users will be able to '. 'push commits to Phabricator. Phabricator will not pull '. 'changes from elsewhere.')) ->addButton( false, pht('Host Repository Elsewhere'), pht( 'Phabricator will pull updates to this repository from a master '. 'repository elsewhere (for example, on GitHub or Bitbucket). '. 'Users will not be able to push commits to this repository.')) ->setValue($v_hosting);
$doc_href = PhabricatorEnv::getDoclink( 'Diffusion User Guide: Repository Hosting');
$form = id(new AphrontFormView()) ->setUser($user) ->appendRemarkupInstructions( pht( 'Phabricator can host repositories, or it can track repositories '. 'hosted elsewhere (like on GitHub or Bitbucket). For information '. 'on configuring hosting, see [[ %s | Diffusion User Guide: '. 'Repository Hosting]]', $doc_href)) ->appendChild($hosted_control) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue(pht('Save and Continue')) ->addCancelButton($edit_uri));
$object_box = id(new PHUIObjectBoxView()) ->setHeaderText($title) ->setForm($form);
return $this->buildApplicationPage( array( $crumbs, $object_box, ), array( 'title' => $title, )); }
public function handleProtocols(PhabricatorRepository $repository) { $request = $this->getRequest(); $user = $request->getUser();
$type = $repository->getVersionControlSystem(); $is_svn = ($type == PhabricatorRepositoryType::REPOSITORY_TYPE_SVN);
$v_http_mode = $repository->getDetail( 'serve-over-http', PhabricatorRepository::SERVE_OFF); $v_ssh_mode = $repository->getDetail( 'serve-over-ssh', PhabricatorRepository::SERVE_OFF);
$edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); $prev_uri = $this->getRepositoryControllerURI($repository, 'edit/hosting/');
if ($request->isFormPost()) { $v_http_mode = $request->getStr('http'); $v_ssh_mode = $request->getStr('ssh');
$xactions = array(); $template = id(new PhabricatorRepositoryTransaction());
$type_http = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP; $type_ssh = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH;
if (!$is_svn) { $xactions[] = id(clone $template) ->setTransactionType($type_http) ->setNewValue($v_http_mode); }
$xactions[] = id(clone $template) ->setTransactionType($type_ssh) ->setNewValue($v_ssh_mode);
id(new PhabricatorRepositoryEditor()) ->setContinueOnNoEffect(true) ->setContentSourceFromRequest($request) ->setActor($user) ->applyTransactions($repository, $xactions);
return id(new AphrontRedirectResponse())->setURI($edit_uri); }
$crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Edit Protocols'));
$title = pht('Edit Protocols (%s)', $repository->getName());
$rw_message = pht( 'Phabricator will serve a read-write copy of this repository.');
if (!$repository->isHosted()) { $rw_message = array( $rw_message, phutil_tag('br'), phutil_tag('br'), pht( '%s: This repository is hosted elsewhere, so Phabricator can not '. 'perform writes. This mode will act like "Read Only" for '. 'repositories hosted elsewhere.', phutil_tag('strong', array(), pht('WARNING'))), ); }
$ssh_control = id(new AphrontFormRadioButtonControl()) ->setName('ssh') ->setLabel(pht('SSH')) ->setValue($v_ssh_mode) ->addButton( PhabricatorRepository::SERVE_OFF, PhabricatorRepository::getProtocolAvailabilityName( PhabricatorRepository::SERVE_OFF), pht('Phabricator will not serve this repository over SSH.')) ->addButton( PhabricatorRepository::SERVE_READONLY, PhabricatorRepository::getProtocolAvailabilityName( PhabricatorRepository::SERVE_READONLY), pht( 'Phabricator will serve a read-only copy of this repository '. 'over SSH.')) ->addButton( PhabricatorRepository::SERVE_READWRITE, PhabricatorRepository::getProtocolAvailabilityName( PhabricatorRepository::SERVE_READWRITE), $rw_message);
$http_control = id(new AphrontFormRadioButtonControl()) ->setName('http') ->setLabel(pht('HTTP')) ->setValue($v_http_mode) ->addButton( PhabricatorRepository::SERVE_OFF, PhabricatorRepository::getProtocolAvailabilityName( PhabricatorRepository::SERVE_OFF), pht('Phabricator will not serve this repository over HTTP.')) ->addButton( PhabricatorRepository::SERVE_READONLY, PhabricatorRepository::getProtocolAvailabilityName( PhabricatorRepository::SERVE_READONLY), pht( 'Phabricator will serve a read-only copy of this repository '. 'over HTTP.')) ->addButton( PhabricatorRepository::SERVE_READWRITE, PhabricatorRepository::getProtocolAvailabilityName( PhabricatorRepository::SERVE_READWRITE), $rw_message);
if ($is_svn) { $http_control = id(new AphrontFormMarkupControl()) ->setLabel(pht('HTTP')) ->setValue( phutil_tag( 'em', array(), pht( 'Phabricator does not currently support HTTP access to '. 'Subversion repositories.'))); }
$form = id(new AphrontFormView()) ->setUser($user) ->appendRemarkupInstructions( pht( 'Phabricator can serve repositories over various protocols. You can '. 'configure server protocols here.')) ->appendChild($ssh_control);
if (!PhabricatorEnv::getEnvConfig('diffusion.allow-http-auth')) { $form->appendRemarkupInstructions( pht( 'NOTE: The configuration setting [[ %s | %s ]] is currently '. 'disabled. You must enable it to activate authenticated access '. 'to repositories over HTTP.', '/config/edit/diffusion.allow-http-auth/', 'diffusion.allow-http-auth')); }
$form ->appendChild($http_control) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue(pht('Save Changes')) ->addCancelButton($prev_uri, pht('Back')));
$object_box = id(new PHUIObjectBoxView()) ->setHeaderText($title) ->setForm($form);
return $this->buildApplicationPage( array( $crumbs, $object_box, ), array( 'title' => $title, )); }
}