8 public function __construct(Repository $repo = null)
14 * Processes the POST data, changes description and files
16 * @return boolean True if the post was successful
18 public function process($postData)
20 if (!isset($postData['files'])) {
25 $this->repo = $this->createRepo();
28 $vc = $this->repo->getVc();
29 $this->repo->setDescription($postData['description']);
32 foreach ($postData['files'] as $num => $arFile) {
33 $orignalName = $this->sanitizeFilename($arFile['original_name']);
34 $name = $this->sanitizeFilename($arFile['name']);
37 $name = $this->getNextNumberedFile('phork')
38 . '.' . $arFile['type'];
42 if (!isset($orignalName) || $orignalName == '') {
45 } else if (!$this->repo->hasFile($orignalName)) {
47 //FIXME: Show error message
49 } else if ($orignalName != $name) {
50 //FIXME: what to do with overwrites?
52 ->addArgument($orignalName)
58 $file = $this->repo->getFileByName($name, false);
59 if ($bNew || $file->getContent() != $arFile['content']) {
60 file_put_contents($file->getPath(), $arFile['content']);
61 $command = $vc->getCommand('add')
62 ->addArgument($file->getFilename())
69 $vc->getCommand('commit')
70 ->setOption('message', '')
71 ->setOption('allow-empty-message')
72 ->setOption('author', 'Anonymous <anonymous@phorkie>')
79 public function createRepo()
81 $rs = new Repositories();
82 $repo = $rs->createNew();
84 $vc->initRepository();
85 foreach (glob($repo->repoDir . '/.git/hooks/*') as $hookfile) {
91 public function getNextNumberedFile($prefix)
96 $files = glob($this->repo->repoDir . '/' . $prefix . $num . '.*');
97 } while (count($files));
99 return $prefix . $num;
103 * Removes malicious parts from a file name
105 * @param string $file File name from the user
107 * @return string Fixed and probably secure filename
109 public function sanitizeFilename($file)
112 $file = str_replace(array('\\', '//'), '/', $file);
113 $file = str_replace('/../', '/', $file);
114 if (substr($file, 0, 3) == '../') {
115 $file = substr($file, 3);
117 if (substr($file, 0, 1) == '../') {
118 $file = substr($file, 1);