<?php /** * @copyright Copyright (c) 2016, ownCloud, Inc. * * @author Brice Maron <brice@bmaron.net> * @author Christopher Schäpers <kondou@ts.unde.re> * @author Joas Schilling <coding@schilljs.com> * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@statuscode.ch> * @author Robin Appelman <robin@icewind.nl> * @author Robin McCorkell <robin@mccorkell.me.uk> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> * * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see <http://www.gnu.org/licenses/> * */ require_once __DIR__ . '/lib/versioncheck.php'; use OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin; use Sabre\DAV\Exception\ServiceUnavailable; use Sabre\DAV\Server; /** * Class RemoteException * Dummy exception class to be use locally to identify certain conditions * Will not be logged to avoid DoS */ class RemoteException extends Exception { } /** * @param Exception|Error $e */ function handleException($e) { $request = \OC::$server->getRequest(); // in case the request content type is text/xml - we assume it's a WebDAV request $isXmlContentType = strpos($request->getHeader('Content-Type'), 'text/xml'); if ($isXmlContentType === 0) { // fire up a simple server to properly process the exception $server = new Server(); if (!($e instanceof RemoteException)) { // we shall not log on RemoteException $server->addPlugin(new ExceptionLoggerPlugin('webdav', \OC::$server->getLogger())); } $server->on('beforeMethod', function () use ($e) { if ($e instanceof RemoteException) { switch ($e->getCode()) { case 503: throw new ServiceUnavailable($e->getMessage()); case 404: throw new \Sabre\DAV\Exception\NotFound($e->getMessage()); } } $class = get_class($e); $msg = $e->getMessage(); throw new ServiceUnavailable("$class: $msg"); }); $server->exec(); } else { $statusCode = 500; if ($e instanceof \OC\ServiceUnavailableException ) { $statusCode = 503; } if ($e instanceof RemoteException) { // we shall not log on RemoteException OC_Template::printErrorPage($e->getMessage(), '', $e->getCode()); } else { \OC::$server->getLogger()->logException($e, ['app' => 'remote']); OC_Template::printExceptionErrorPage($e, $statusCode); } } } /** * @param $service * @return string */ function resolveService($service) { $services = [ 'webdav' => 'dav/appinfo/v1/webdav.php', 'dav' => 'dav/appinfo/v2/remote.php', 'caldav' => 'dav/appinfo/v1/caldav.php', 'calendar' => 'dav/appinfo/v1/caldav.php', 'carddav' => 'dav/appinfo/v1/carddav.php', 'contacts' => 'dav/appinfo/v1/carddav.php', 'files' => 'dav/appinfo/v1/webdav.php', 'direct' => 'dav/appinfo/v2/direct.php', ]; if (isset($services[$service])) { return $services[$service]; } return \OC::$server->getConfig()->getAppValue('core', 'remote_' . $service); } try { require_once __DIR__ . '/lib/base.php'; // All resources served via the DAV endpoint should have the strictest possible // policy. Exempted from this is the SabreDAV browser plugin which overwrites // this policy with a softer one if debug mode is enabled. header("Content-Security-Policy: default-src 'none';"); if (\OCP\Util::needUpgrade()) { // since the behavior of apps or remotes are unpredictable during // an upgrade, return a 503 directly throw new RemoteException('Service unavailable', 503); } $request = \OC::$server->getRequest(); $pathInfo = $request->getPathInfo(); if ($pathInfo === false || $pathInfo === '') { throw new RemoteException('Path not found', 404); } if (!$pos = strpos($pathInfo, '/', 1)) { $pos = strlen($pathInfo); } $service=substr($pathInfo, 1, $pos-1); $file = resolveService($service); if(is_null($file)) { throw new RemoteException('Path not found', 404); } $file=ltrim($file, '/'); $parts=explode('/', $file, 2); $app=$parts[0]; // Load all required applications \OC::$REQUESTEDAPP = $app; OC_App::loadApps(array('authentication')); OC_App::loadApps(array('filesystem', 'logging')); switch ($app) { case 'core': $file = OC::$SERVERROOT .'/'. $file; break; default: if (!\OC::$server->getAppManager()->isInstalled($app)) { throw new RemoteException('App not installed: ' . $app); } OC_App::loadApp($app); $file = OC_App::getAppPath($app) .'/'. $parts[1]; break; } $baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/'; require_once $file; } catch (Exception $ex) { handleException($ex); } catch (Error $e) { handleException($e); } ction='/jgit.git/log/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml'> <input type='hidden' name='h' value='stable-5.5'/><input type='hidden' name='id' value='f384644774ae01823e850c862aeda5bddb4a4326'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/jgit.git/tree/?h=stable-5.5&id=f384644774ae01823e850c862aeda5bddb4a4326'>root</a>/<a href='/jgit.git/tree/org.eclipse.jgit.packaging?h=stable-5.5&id=f384644774ae01823e850c862aeda5bddb4a4326'>org.eclipse.jgit.packaging</a>/<a href='/jgit.git/tree/org.eclipse.jgit.packaging/org.eclipse.jgit.feature?h=stable-5.5&id=f384644774ae01823e850c862aeda5bddb4a4326'>org.eclipse.jgit.feature</a>/<a href='/jgit.git/tree/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml?h=stable-5.5&id=f384644774ae01823e850c862aeda5bddb4a4326'>pom.xml</a></div><div class='content'>blob: 33e295fd8a9b6f48187105ca99ce878aab8d2c6d (<a href='/jgit.git/plain/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml?h=stable-5.5&id=f384644774ae01823e850c862aeda5bddb4a4326'>plain</a>) <table summary='blob content' class='blob'> <tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a> <a id='n2' href='#n2'>2</a> <a id='n3' href='#n3'>3</a> <a id='n4' href='#n4'>4</a> <a id='n5' href='#n5'>5</a> <a id='n6' href='#n6'>6</a> <a id='n7' href='#n7'>7</a> <a id='n8' href='#n8'>8</a> <a id='n9' href='#n9'>9</a> <a id='n10' href='#n10'>10</a> <a id='n11' href='#n11'>11</a> <a id='n12' href='#n12'>12</a> <a id='n13' href='#n13'>13</a> <a id='n14' href='#n14'>14</a> <a id='n15' href='#n15'>15</a> <a id='n16' href='#n16'>16</a> <a id='n17' href='#n17'>17</a> <a id='n18' href='#n18'>18</a> <a id='n19' href='#n19'>19</a> <a id='n20' href='#n20'>20</a> <a id='n21' href='#n21'>21</a> <a id='n22' href='#n22'>22</a> <a id='n23' href='#n23'>23</a> <a id='n24' href='#n24'>24</a> <a id='n25' href='#n25'>25</a> <a id='n26' href='#n26'>26</a> <a id='n27' href='#n27'>27</a> <a id='n28' href='#n28'>28</a> <a id='n29' href='#n29'>29</a> <a id='n30' href='#n30'>30</a> <a id='n31' href='#n31'>31</a> <a id='n32' href='#n32'>32</a> <a id='n33' href='#n33'>33</a> <a id='n34' href='#n34'>34</a> <a id='n35' href='#n35'>35</a> <a id='n36' href='#n36'>36</a> <a id='n37' href='#n37'>37</a> <a id='n38' href='#n38'>38</a> <a id='n39' href='#n39'>39</a> <a id='n40' href='#n40'>40</a> <a id='n41' href='#n41'>41</a> <a id='n42' href='#n42'>42</a> <a id='n43' href='#n43'>43</a> <a id='n44' href='#n44'>44</a> <a id='n45' href='#n45'>45</a> <a id='n46' href='#n46'>46</a> <a id='n47' href='#n47'>47</a> <a id='n48' href='#n48'>48</a> <a id='n49' href='#n49'>49</a> <a id='n50' href='#n50'>50</a> <a id='n51' href='#n51'>51</a> <a id='n52' href='#n52'>52</a> <a id='n53' href='#n53'>53</a> <a id='n54' href='#n54'>54</a> <a id='n55' href='#n55'>55</a> <a id='n56' href='#n56'>56</a> <a id='n57' href='#n57'>57</a> <a id='n58' href='#n58'>58</a> <a id='n59' href='#n59'>59</a> <a id='n60' href='#n60'>60</a> <a id='n61' href='#n61'>61</a> <a id='n62' href='#n62'>62</a> <a id='n63' href='#n63'>63</a> <a id='n64' href='#n64'>64</a> <a id='n65' href='#n65'>65</a> <a id='n66' href='#n66'>66</a> <a id='n67' href='#n67'>67</a> <a id='n68' href='#n68'>68</a> <a id='n69' href='#n69'>69</a> <a id='n70' href='#n70'>70</a> <a id='n71' href='#n71'>71</a> <a id='n72' href='#n72'>72</a> <a id='n73' href='#n73'>73</a> <a id='n74' href='#n74'>74</a> <a id='n75' href='#n75'>75</a> </pre></td> <td class='lines'><pre><code>