@RvdAuth
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public Response listProjects(@Context HttpServletRequest request) {
    Principal loggedUser = securityContext.getUserPrincipal();
    List<ProjectItem> items;
    try {
      items = projectService.getAvailableProjectsByOwner(loggedUser.getName());
      projectService.fillStartUrlsForProjects(items, request);
    } catch (BadWorkspaceDirectoryStructure e) {
      logger.error(e.getMessage(), e);
      return Response.status(Status.INTERNAL_SERVER_ERROR).build();
    } catch (StorageException e) {
      logger.error(e.getMessage(), e);
      return Response.status(Status.INTERNAL_SERVER_ERROR).build();
    } catch (ProjectException e) {
      logger.error(e.getMessage(), e);
      return Response.status(Status.INTERNAL_SERVER_ERROR).build();
    }

    Gson gson = new Gson();
    return Response.ok(gson.toJson(items), MediaType.APPLICATION_JSON).build();
  }