* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace GitList\Controller; use Gitlist\Application as GitlistApp; use Gitter\Repository; use Silex\Application; use Silex\Api\ControllerProviderInterface; use Symfony\Component\HttpFoundation\Request; use TheSeer\Tokenizer\Exception; class GitController implements ControllerProviderInterface { public function connect(Application $app) { $route = $app['controllers_factory']; $route->post('{repo}/git-helper/{branch}/{action}', function (Request $request, $repo, $branch = '', $action) use ($app) { $repository = ($app['git']->getRepositoryFromName($app['git.repos'], $repo)); $hadError = false; try { if ($repository instanceof Repository && $app instanceof GitlistApp) { $filename = trim($request->get('filename')); $value = $request->get('value'); $email = $request->get('email'); $name = $request->get('name'); $comment = $request->get('comment'); switch ($action) { case 'save': $objectResult = $repository->changeFile($app->getCachePath(), $repo, $branch, $filename, $value, $name, $email, $comment); return json_encode($objectResult); case 'delete': $objectResult = $repository->deleteFile($app->getCachePath(), $repo, $branch, $filename, $name, $email, $comment); return json_encode($objectResult); break; case 'new-file-or-directory': $objectResult = $repository->newFileOrDirectory($app->getCachePath(), $repo, $branch, $filename, $name, $email, $comment); return json_encode($objectResult); break; case 'file-binary': $objectResult = $repository->newFileBinary($app->getCachePath(), $repo, $branch, $filename, $name, $email, $comment, $request->get('override') === '1' ? true : false, $_FILES['upload-file']); return json_encode($objectResult); /* return json_encode((object)[ 'filename' => $filename, 'email' => $email, 'name' => $name, 'comment' => $comment, 'upload-file' => $_FILES['upload-file'], 'override' => $request->get('override'), ]); */ break; case 'fetch-origin': try { $objectResult = $repository->fetchOrigin(); return json_encode($objectResult); } catch (\Exception $e) { return json_encode(((object)[ 'status' => 'error', 'error' => true, //'temporaryDirectory' => $tempRepo, 'message' => $e->getMessage(), 'trace' => $e->getTrace(), //'$filename' => $filename, //'$value' => $value, ])); } break; default: return json_encode((object)[ 'status' => 'error', 'error' => true, 'message' => 'Un-implemented action "' . $action . '".', ]); } } } catch (\Throwable $e) { $hadError = $e; } finally { if ($hadError !== false) { return json_encode((object)[ 'status' => 'error', 'error' => true, 'message' => $hadError->getMessage(), ]); } } }); return $route; } }