File indexing completed on 2024-12-22 05:33:32

0001 <?php
0002 
0003 /**
0004  *  ocs-webserver
0005  *
0006  *  Copyright 2016 by pling GmbH.
0007  *
0008  *    This file is part of ocs-webserver.
0009  *
0010  *    This program is free software: you can redistribute it and/or modify
0011  *    it under the terms of the GNU Affero General Public License as
0012  *    published by the Free Software Foundation, either version 3 of the
0013  *    License, or (at your option) any later version.
0014  *
0015  *    This program is distributed in the hope that it will be useful,
0016  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0017  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0018  *    GNU Affero General Public License for more details.
0019  *
0020  *    You should have received a copy of the GNU Affero General Public License
0021  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0022  *
0023  * Created: 26.01.2017
0024  */
0025 class FileController extends Zend_Controller_Action
0026 {
0027 
0028     public function linkAction()
0029     {
0030         if(false == $this->validateLink($this->getParam('u'))) {
0031             $this->_helper->json(false);
0032         }
0033         $modelPpLoad = new Default_Model_PpLoad();
0034         $project_id = (int) $this->getParam('project_id');
0035         $url = $this->getParam('u');
0036         $filename = $this->getParam('fn') ? $this->getParam('fn') : $this->getFilenameFromUrl($this->getParam('u'));
0037         $fileDescription = $this->getParam('fd');
0038         $result = $modelPpLoad->uploadEmptyFileWithLink($project_id, $url, $filename, $fileDescription);
0039         $this->_helper->json($result);
0040     }
0041 
0042     public function gitlinkAction()
0043     {
0044         if(false == $this->validateGithubLink($this->getParam('u'))) {
0045             $this->_helper->json(false);
0046         }
0047         $modelPpLoad = new Default_Model_PpLoad();
0048         $project_id = (int) $this->getParam('project_id');
0049         $url = $this->getParam('u');
0050         $filename = $this->getParam('fn') ? $this->getParam('fn') : $this->getFilenameFromUrl($this->getParam('u'));
0051         $fileDescription = $this->getParam('fd');
0052         $result = $modelPpLoad->uploadEmptyFileWithLink($project_id, $url, $filename, $fileDescription);
0053         $this->_helper->json($result);
0054     }
0055 
0056     private function getFilenameFromUrl($getParam)
0057     {
0058         $url = parse_url($getParam);
0059         return isset($url['path']) ? basename($url['path']) : 'link';
0060     }
0061 
0062     private function validateGithubLink($getParam)
0063     {
0064         /** regex tested in https://regex101.com/r/VFsvSd/1 */
0065         $validate = new Zend_Validate_Regex('/^https:\/\/(?:(?:(?:www\.)?github)?|(?:raw\.githubusercontent)?)\.com\/.+$/');
0066         return $validate->isValid($getParam);
0067     }
0068 
0069     private function validateLink($getParam)
0070     {
0071         // However, you can allow "unwise" characters
0072         Zend_Uri::setConfig(array('allow_unwise' => true));
0073 
0074         return Zend_Uri::check($getParam);
0075     }
0076 
0077 }