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 $arFile) {
33 if ($arFile['content'] == '' && $arFile['name'] == '') {
38 $orignalName = $this->sanitizeFilename($arFile['original_name']);
39 $name = $this->sanitizeFilename($arFile['name']);
42 $name = $this->getNextNumberedFile('phork')
43 . '.' . $arFile['type'];
47 if (!isset($orignalName) || $orignalName == '') {
50 } else if (!$this->repo->hasFile($orignalName)) {
52 //FIXME: Show error message
54 } else if ($orignalName != $name) {
55 //FIXME: what to do with overwrites?
57 ->addArgument($orignalName)
63 $file = $this->repo->getFileByName($name, false);
64 if ($bNew || $file->getContent() != $arFile['content']) {
65 file_put_contents($file->getPath(), $arFile['content']);
66 $command = $vc->getCommand('add')
67 ->addArgument($file->getFilename())
74 $vc->getCommand('commit')
75 ->setOption('message', '')
76 ->setOption('allow-empty-message')
77 ->setOption('author', 'Anonymous <anonymous@phorkie>')
84 public function createRepo()
86 $rs = new Repositories();
87 $repo = $rs->createNew();
89 $vc->initRepository();
90 foreach (glob($repo->repoDir . '/.git/hooks/*') as $hookfile) {
96 public function getNextNumberedFile($prefix)
101 $files = glob($this->repo->repoDir . '/' . $prefix . $num . '.*');
102 } while (count($files));
104 return $prefix . $num;
108 * Removes malicious parts from a file name
110 * @param string $file File name from the user
112 * @return string Fixed and probably secure filename
114 public function sanitizeFilename($file)
117 $file = str_replace(array('\\', '//'), '/', $file);
118 $file = str_replace('/../', '/', $file);
119 if (substr($file, 0, 3) == '../') {
120 $file = substr($file, 3);
122 if (substr($file, 0, 1) == '../') {
123 $file = substr($file, 1);