mirror of
https://github.com/wallabag/wallabag.git
synced 2025-08-01 17:38:38 +00:00
Migrate to Symfony attributes
This commit is contained in:
parent
6a3780ce81
commit
2a60d8473d
46 changed files with 143 additions and 256 deletions
|
@ -42,7 +42,6 @@ $config
|
|||
'shipmonk/composer-dependency-analyser',
|
||||
'symfony/asset',
|
||||
'symfony/css-selector',
|
||||
'symfony/doctrine-bridge',
|
||||
'symfony/google-mailer',
|
||||
'symfony/intl',
|
||||
'symfony/phpunit-bridge',
|
||||
|
|
|
@ -15,7 +15,7 @@ return RectorConfig::configure()
|
|||
])
|
||||
->withRootFiles()
|
||||
->withImportNames(importShortClasses: false)
|
||||
->withAttributesSets(doctrine: true)
|
||||
->withAttributesSets(symfony: true, doctrine: true)
|
||||
->withConfiguredRule(ClassPropertyAssignToConstructorPromotionRector::class, [
|
||||
'inline_public' => true,
|
||||
])
|
||||
|
|
|
@ -7,7 +7,6 @@ use Psr\Log\LoggerInterface;
|
|||
use Psr\Log\NullLogger;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
use Wallabag\Entity\Entry;
|
||||
use Wallabag\Entity\Tag;
|
||||
use Wallabag\Event\EntrySavedEvent;
|
||||
use Wallabag\Import\AbstractImport;
|
||||
use Wallabag\Repository\UserRepository;
|
||||
|
|
|
@ -32,11 +32,10 @@ class AnnotationController extends AbstractFOSRestController
|
|||
*
|
||||
* @see Api\WallabagRestController
|
||||
*
|
||||
* @Route("/annotations/{entry}.{_format}", name="annotations_get_annotations", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("LIST_ANNOTATIONS", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/annotations/{entry}.{_format}', name: 'annotations_get_annotations', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getAnnotationsAction(Entry $entry, AnnotationRepository $annotationRepository)
|
||||
{
|
||||
$annotationRows = $annotationRepository->findByEntryIdAndUserId($entry->getId(), $this->getUser()->getId());
|
||||
|
@ -54,11 +53,10 @@ class AnnotationController extends AbstractFOSRestController
|
|||
*
|
||||
* @see Api\WallabagRestController
|
||||
*
|
||||
* @Route("/annotations/{entry}.{_format}", name="annotations_post_annotation", methods={"POST"}, defaults={"_format": "json"})
|
||||
* @IsGranted("CREATE_ANNOTATIONS", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/annotations/{entry}.{_format}', name: 'annotations_post_annotation', methods: ['POST'], defaults: ['_format' => 'json'])]
|
||||
public function postAnnotationAction(Request $request, Entry $entry)
|
||||
{
|
||||
$data = json_decode($request->getContent(), true);
|
||||
|
@ -89,11 +87,10 @@ class AnnotationController extends AbstractFOSRestController
|
|||
*
|
||||
* @see Api\WallabagRestController
|
||||
*
|
||||
* @Route("/annotations/{annotation}.{_format}", name="annotations_put_annotation", methods={"PUT"}, defaults={"_format": "json"})
|
||||
* @IsGranted("EDIT", subject="annotation")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/annotations/{annotation}.{_format}', name: 'annotations_put_annotation', methods: ['PUT'], defaults: ['_format' => 'json'])]
|
||||
public function putAnnotationAction(Request $request, Annotation $annotation)
|
||||
{
|
||||
try {
|
||||
|
@ -125,11 +122,10 @@ class AnnotationController extends AbstractFOSRestController
|
|||
*
|
||||
* @see Api\WallabagRestController
|
||||
*
|
||||
* @Route("/annotations/{annotation}.{_format}", name="annotations_delete_annotation", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
* @IsGranted("DELETE", subject="annotation")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/annotations/{annotation}.{_format}', name: 'annotations_delete_annotation', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteAnnotationAction(Annotation $annotation)
|
||||
{
|
||||
try {
|
||||
|
|
|
@ -34,12 +34,11 @@ class AnnotationRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/annotations/{entry}.{_format}", name="api_get_annotations", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("LIST_ANNOTATIONS", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/api/annotations/{entry}.{_format}', name: 'api_get_annotations', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getAnnotationsAction(Entry $entry)
|
||||
{
|
||||
return $this->forward('Wallabag\Controller\AnnotationController::getAnnotationsAction', [
|
||||
|
@ -100,11 +99,11 @@ class AnnotationRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/annotations/{entry}.{_format}", name="api_post_annotation", methods={"POST"}, defaults={"_format": "json"})
|
||||
* @IsGranted("CREATE_ANNOTATIONS", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/api/annotations/{entry}.{_format}', name: 'api_post_annotation', methods: ['POST'], defaults: ['_format' => 'json'])]
|
||||
public function postAnnotationAction(Request $request, Entry $entry)
|
||||
{
|
||||
return $this->forward('Wallabag\Controller\AnnotationController::postAnnotationAction', [
|
||||
|
@ -134,12 +133,11 @@ class AnnotationRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/annotations/{annotation}.{_format}", name="api_put_annotation", methods={"PUT"}, defaults={"_format": "json"})
|
||||
* @IsGranted("EDIT", subject="annotation")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/api/annotations/{annotation}.{_format}', name: 'api_put_annotation', methods: ['PUT'], defaults: ['_format' => 'json'])]
|
||||
public function putAnnotationAction(Annotation $annotation, Request $request)
|
||||
{
|
||||
return $this->forward('Wallabag\Controller\AnnotationController::putAnnotationAction', [
|
||||
|
@ -169,12 +167,11 @@ class AnnotationRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/annotations/{annotation}.{_format}", name="api_delete_annotation", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
* @IsGranted("DELETE", subject="annotation")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/api/annotations/{annotation}.{_format}', name: 'api_delete_annotation', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteAnnotationAction(Annotation $annotation)
|
||||
{
|
||||
return $this->forward('Wallabag\Controller\AnnotationController::deleteAnnotationAction', [
|
||||
|
|
|
@ -23,10 +23,9 @@ class ConfigRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/config.{_format}", name="api_get_config", methods={"GET"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/config.{_format}', name: 'api_get_config', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getConfigAction(SerializerInterface $serializer)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
|
|
@ -18,10 +18,9 @@ class DeveloperController extends AbstractController
|
|||
/**
|
||||
* List all clients and link to create a new one.
|
||||
*
|
||||
* @Route("/developer", name="developer", methods={"GET"})
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/developer', name: 'developer', methods: ['GET'])]
|
||||
public function indexAction(ClientRepository $repo)
|
||||
{
|
||||
$clients = $repo->findByUser($this->getUser()->getId());
|
||||
|
@ -34,10 +33,9 @@ class DeveloperController extends AbstractController
|
|||
/**
|
||||
* Create a client (an app).
|
||||
*
|
||||
* @Route("/developer/client/create", name="developer_create_client", methods={"GET", "POST"})
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/developer/client/create', name: 'developer_create_client', methods: ['GET', 'POST'])]
|
||||
public function createClientAction(Request $request, EntityManagerInterface $entityManager, TranslatorInterface $translator)
|
||||
{
|
||||
$client = new Client($this->getUser());
|
||||
|
@ -69,10 +67,9 @@ class DeveloperController extends AbstractController
|
|||
/**
|
||||
* Remove a client.
|
||||
*
|
||||
* @Route("/developer/client/delete/{id}", name="developer_delete_client", methods={"POST"}, requirements={"id" = "\d+"})
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/developer/client/delete/{id}', name: 'developer_delete_client', methods: ['POST'], requirements: ['id' => '\d+'])]
|
||||
public function deleteClientAction(Request $request, Client $client, EntityManagerInterface $entityManager, TranslatorInterface $translator)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('delete-client', $request->request->get('token'))) {
|
||||
|
@ -97,10 +94,9 @@ class DeveloperController extends AbstractController
|
|||
/**
|
||||
* Display developer how to use an existing app.
|
||||
*
|
||||
* @Route("/developer/howto/first-app", name="developer_howto_firstapp", methods={"GET"})
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/developer/howto/first-app', name: 'developer_howto_firstapp', methods: ['GET'])]
|
||||
public function howtoFirstAppAction()
|
||||
{
|
||||
return $this->render('Developer/howto_app.html.twig');
|
||||
|
|
|
@ -85,11 +85,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/exists.{_format}", name="api_get_entries_exists", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/exists.{_format}', name: 'api_get_entries_exists', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getEntriesExistsAction(Request $request, EntryRepository $entryRepository)
|
||||
{
|
||||
$returnId = (null === $request->query->get('return_id')) ? false : (bool) $request->query->get('return_id');
|
||||
|
@ -297,11 +297,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries.{_format}", name="api_get_entries", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries.{_format}', name: 'api_get_entries', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getEntriesAction(Request $request, EntryRepository $entryRepository)
|
||||
{
|
||||
$isArchived = (null === $request->query->get('archive')) ? null : (bool) $request->query->get('archive');
|
||||
|
@ -387,12 +387,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}.{_format}", name="api_get_entry", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("VIEW", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}.{_format}', name: 'api_get_entry', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getEntryAction(Entry $entry)
|
||||
{
|
||||
return $this->sendResponse($entry);
|
||||
|
@ -430,11 +429,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}/export.{_format}", name="api_get_entry_export", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("VIEW", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}/export.{_format}', name: 'api_get_entry_export', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getEntryExportAction(Entry $entry, Request $request, EntriesExport $entriesExport)
|
||||
{
|
||||
return $entriesExport
|
||||
|
@ -462,12 +461,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/list.{_format}", name="api_delete_entries_list", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
* @IsGranted("DELETE_ENTRIES")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/list.{_format}', name: 'api_delete_entries_list', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteEntriesListAction(Request $request, EntryRepository $entryRepository, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
$urls = json_decode($request->query->get('urls', '[]'));
|
||||
|
@ -520,13 +518,13 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/lists.{_format}", name="api_post_entries_list", methods={"POST"}, defaults={"_format": "json"})
|
||||
* @IsGranted("CREATE_ENTRIES")
|
||||
*
|
||||
* @throws HttpException When limit is reached
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/lists.{_format}', name: 'api_post_entries_list', methods: ['POST'], defaults: ['_format' => 'json'])]
|
||||
public function postEntriesListAction(Request $request, EntryRepository $entryRepository, EventDispatcherInterface $eventDispatcher, ContentProxy $contentProxy)
|
||||
{
|
||||
$urls = json_decode($request->query->get('urls', '[]'));
|
||||
|
@ -704,11 +702,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries.{_format}", name="api_post_entries", methods={"POST"}, defaults={"_format": "json"})
|
||||
* @IsGranted("CREATE_ENTRIES")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries.{_format}', name: 'api_post_entries', methods: ['POST'], defaults: ['_format' => 'json'])]
|
||||
public function postEntriesAction(
|
||||
Request $request,
|
||||
EntryRepository $entryRepository,
|
||||
|
@ -928,11 +926,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}.{_format}", name="api_patch_entries", methods={"PATCH"}, defaults={"_format": "json"})
|
||||
* @IsGranted("EDIT", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}.{_format}', name: 'api_patch_entries', methods: ['PATCH'], defaults: ['_format' => 'json'])]
|
||||
public function patchEntriesAction(Entry $entry, Request $request, ContentProxy $contentProxy, LoggerInterface $logger, TagsAssigner $tagsAssigner, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
$data = $this->retrieveValueFromRequest($request);
|
||||
|
@ -1042,12 +1040,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}/reload.{_format}", name="api_patch_entries_reload", methods={"PATCH"}, defaults={"_format": "json"})
|
||||
* @IsGranted("RELOAD", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}/reload.{_format}', name: 'api_patch_entries_reload', methods: ['PATCH'], defaults: ['_format' => 'json'])]
|
||||
public function patchEntriesReloadAction(Entry $entry, ContentProxy $contentProxy, LoggerInterface $logger, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
try {
|
||||
|
@ -1097,12 +1094,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}.{_format}", name="api_delete_entries", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
* @IsGranted("DELETE", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}.{_format}', name: 'api_delete_entries', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteEntriesAction(Entry $entry, Request $request, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
$expect = $request->query->get('expect', 'entry');
|
||||
|
@ -1149,12 +1145,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}/tags.{_format}", name="api_get_entries_tags", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("LIST_TAGS", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}/tags.{_format}', name: 'api_get_entries_tags', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getEntriesTagsAction(Entry $entry)
|
||||
{
|
||||
return $this->sendResponse($entry->getTags());
|
||||
|
@ -1192,11 +1187,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}/tags.{_format}", name="api_post_entries_tags", methods={"POST"}, defaults={"_format": "json"})
|
||||
* @IsGranted("TAG", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}/tags.{_format}', name: 'api_post_entries_tags', methods: ['POST'], defaults: ['_format' => 'json'])]
|
||||
public function postEntriesTagsAction(Request $request, Entry $entry, TagsAssigner $tagsAssigner)
|
||||
{
|
||||
$tags = $request->request->get('tags', '');
|
||||
|
@ -1242,11 +1237,11 @@ class EntryRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/{entry}/tags/{tag}.{_format}", name="api_delete_entries_tags", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
* @IsGranted("UNTAG", subject="entry")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/{entry}/tags/{tag}.{_format}', name: 'api_delete_entries_tags', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteEntriesTagsAction(Entry $entry, Tag $tag)
|
||||
{
|
||||
$entry->removeTag($tag);
|
||||
|
@ -1275,12 +1270,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/tags/list.{_format}", name="api_delete_entries_tags_list", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
* @IsGranted("DELETE_TAGS")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/tags/list.{_format}', name: 'api_delete_entries_tags_list', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteEntriesTagsListAction(Request $request, TagRepository $tagRepository, EntryRepository $entryRepository)
|
||||
{
|
||||
$list = json_decode($request->query->get('list', '[]'));
|
||||
|
@ -1341,12 +1335,11 @@ class EntryRestController extends WallabagRestController
|
|||
* description="Returned when successful"
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/entries/tags/lists.{_format}", name="api_post_entries_tags_list", methods={"POST"}, defaults={"_format": "json"})
|
||||
* @IsGranted("CREATE_TAGS")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/entries/tags/lists.{_format}', name: 'api_post_entries_tags_list', methods: ['POST'], defaults: ['_format' => 'json'])]
|
||||
public function postEntriesTagsListAction(Request $request, EntryRepository $entryRepository, TagsAssigner $tagsAssigner)
|
||||
{
|
||||
$list = json_decode($request->query->get('list', '[]'));
|
||||
|
|
|
@ -55,11 +55,11 @@ class SearchRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/search.{_format}", name="api_get_search", methods={"GET"}, defaults={"_format": "json"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/search.{_format}', name: 'api_get_search', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getSearchAction(Request $request, EntryRepository $entryRepository)
|
||||
{
|
||||
$term = $request->query->get('term');
|
||||
|
|
|
@ -26,10 +26,9 @@ class TagRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/tags.{_format}", name="api_get_tags", methods={"GET"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/tags.{_format}', name: 'api_get_tags', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getTagsAction(TagRepository $tagRepository)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
@ -63,10 +62,9 @@ class TagRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/tag/label.{_format}", name="api_delete_tag_label", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/tag/label.{_format}', name: 'api_delete_tag_label', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteTagLabelAction(Request $request, TagRepository $tagRepository, EntryRepository $entryRepository)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
@ -111,10 +109,9 @@ class TagRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/tags/label.{_format}", name="api_delete_tags_label", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/tags/label.{_format}', name: 'api_delete_tags_label', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteTagsLabelAction(Request $request, TagRepository $tagRepository, EntryRepository $entryRepository)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
@ -158,10 +155,9 @@ class TagRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/tags/{tag}.{_format}", name="api_delete_tag", methods={"DELETE"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/tags/{tag}.{_format}', name: 'api_delete_tag', methods: ['DELETE'], defaults: ['_format' => 'json'])]
|
||||
public function deleteTagAction(Tag $tag, TagRepository $tagRepository, EntryRepository $entryRepository)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
|
|
@ -23,10 +23,9 @@ class TaggingRuleRestController extends WallabagRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/taggingrule/export.{_format}", name="api_get_taggingrule_export", methods={"GET"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/api/taggingrule/export.{_format}', name: 'api_get_taggingrule_export', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getTaggingruleExportAction()
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
|
|
@ -50,10 +50,9 @@ class WallabagRestController extends AbstractFOSRestController
|
|||
*
|
||||
* @deprecated Should use info endpoint instead
|
||||
*
|
||||
* @Route("/api/version.{_format}", name="api_get_version", methods={"GET"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/version.{_format}', name: 'api_get_version', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getVersionAction()
|
||||
{
|
||||
$version = $this->getParameter('wallabag.version');
|
||||
|
@ -73,10 +72,9 @@ class WallabagRestController extends AbstractFOSRestController
|
|||
* )
|
||||
* )
|
||||
*
|
||||
* @Route("/api/info.{_format}", name="api_get_info", methods={"GET"}, defaults={"_format": "json"})
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
#[Route(path: '/api/info.{_format}', name: 'api_get_info', methods: ['GET'], defaults: ['_format' => 'json'])]
|
||||
public function getInfoAction(Config $craueConfig)
|
||||
{
|
||||
$info = new ApplicationInfo(
|
||||
|
|
|
@ -57,9 +57,9 @@ class ConfigController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/config", name="config", methods={"GET", "POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*/
|
||||
#[Route(path: '/config', name: 'config', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, Config $craueConfig, TaggingRuleRepository $taggingRuleRepository, IgnoreOriginUserRuleRepository $ignoreOriginUserRuleRepository, UserRepository $userRepository)
|
||||
{
|
||||
$config = $this->getConfig();
|
||||
|
@ -250,9 +250,9 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Disable 2FA using email.
|
||||
*
|
||||
* @Route("/config/otp/email/disable", name="disable_otp_email", methods={"POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*/
|
||||
#[Route(path: '/config/otp/email/disable', name: 'disable_otp_email', methods: ['POST'])]
|
||||
public function disableOtpEmailAction(Request $request)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('otp', $request->request->get('token'))) {
|
||||
|
@ -276,9 +276,9 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Enable 2FA using email.
|
||||
*
|
||||
* @Route("/config/otp/email", name="config_otp_email", methods={"POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*/
|
||||
#[Route(path: '/config/otp/email', name: 'config_otp_email', methods: ['POST'])]
|
||||
public function otpEmailAction(Request $request)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('otp', $request->request->get('token'))) {
|
||||
|
@ -305,9 +305,9 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Disable 2FA using OTP app.
|
||||
*
|
||||
* @Route("/config/otp/app/disable", name="disable_otp_app", methods={"POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*/
|
||||
#[Route(path: '/config/otp/app/disable', name: 'disable_otp_app', methods: ['POST'])]
|
||||
public function disableOtpAppAction(Request $request)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('otp', $request->request->get('token'))) {
|
||||
|
@ -333,9 +333,9 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Enable 2FA using OTP app, user will need to confirm the generated code from the app.
|
||||
*
|
||||
* @Route("/config/otp/app", name="config_otp_app", methods={"POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*/
|
||||
#[Route(path: '/config/otp/app', name: 'config_otp_app', methods: ['POST'])]
|
||||
public function otpAppAction(Request $request, GoogleAuthenticatorInterface $googleAuthenticator)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('otp', $request->request->get('token'))) {
|
||||
|
@ -393,9 +393,9 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Validate OTP code.
|
||||
*
|
||||
* @Route("/config/otp/app/check", name="config_otp_app_check", methods={"POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*/
|
||||
#[Route(path: '/config/otp/app/check', name: 'config_otp_app_check', methods: ['POST'])]
|
||||
public function otpAppCheckAction(Request $request, GoogleAuthenticatorInterface $googleAuthenticator)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('otp', $request->request->get('token'))) {
|
||||
|
@ -430,11 +430,10 @@ class ConfigController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/generate-token", name="generate_token", methods={"GET"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*
|
||||
* @return RedirectResponse|JsonResponse
|
||||
*/
|
||||
#[Route(path: '/generate-token', name: 'generate_token', methods: ['GET'])]
|
||||
public function generateTokenAction(Request $request)
|
||||
{
|
||||
$config = $this->getConfig();
|
||||
|
@ -456,11 +455,10 @@ class ConfigController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/revoke-token", name="revoke_token", methods={"GET"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*
|
||||
* @return RedirectResponse|JsonResponse
|
||||
*/
|
||||
#[Route(path: '/revoke-token', name: 'revoke_token', methods: ['GET'])]
|
||||
public function revokeTokenAction(Request $request)
|
||||
{
|
||||
$config = $this->getConfig();
|
||||
|
@ -484,11 +482,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Deletes a tagging rule and redirect to the config homepage.
|
||||
*
|
||||
* @Route("/tagging-rule/delete/{taggingRule}", name="delete_tagging_rule", methods={"GET"}, requirements={"taggingRule" = "\d+"})
|
||||
* @IsGranted("DELETE", subject="taggingRule")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/tagging-rule/delete/{taggingRule}', name: 'delete_tagging_rule', methods: ['GET'], requirements: ['taggingRule' => '\d+'])]
|
||||
public function deleteTaggingRuleAction(TaggingRule $taggingRule)
|
||||
{
|
||||
$this->entityManager->remove($taggingRule);
|
||||
|
@ -505,11 +502,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Edit a tagging rule.
|
||||
*
|
||||
* @Route("/tagging-rule/edit/{taggingRule}", name="edit_tagging_rule", methods={"GET"}, requirements={"taggingRule" = "\d+"})
|
||||
* @IsGranted("EDIT", subject="taggingRule")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/tagging-rule/edit/{taggingRule}', name: 'edit_tagging_rule', methods: ['GET'], requirements: ['taggingRule' => '\d+'])]
|
||||
public function editTaggingRuleAction(TaggingRule $taggingRule)
|
||||
{
|
||||
return $this->redirect($this->generateUrl('config') . '?tagging-rule=' . $taggingRule->getId() . '#set5');
|
||||
|
@ -518,11 +514,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Deletes an ignore origin rule and redirect to the config homepage.
|
||||
*
|
||||
* @Route("/ignore-origin-user-rule/delete/{ignoreOriginUserRule}", name="delete_ignore_origin_rule", methods={"GET"}, requirements={"ignoreOriginUserRule" = "\d+"})
|
||||
* @IsGranted("DELETE", subject="ignoreOriginUserRule")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/ignore-origin-user-rule/delete/{ignoreOriginUserRule}', name: 'delete_ignore_origin_rule', methods: ['GET'], requirements: ['ignoreOriginUserRule' => '\d+'])]
|
||||
public function deleteIgnoreOriginRuleAction(IgnoreOriginUserRule $ignoreOriginUserRule)
|
||||
{
|
||||
$this->entityManager->remove($ignoreOriginUserRule);
|
||||
|
@ -539,11 +534,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Edit an ignore origin rule.
|
||||
*
|
||||
* @Route("/ignore-origin-user-rule/edit/{ignoreOriginUserRule}", name="edit_ignore_origin_rule", methods={"GET"}, requirements={"ignoreOriginUserRule" = "\d+"})
|
||||
* @IsGranted("EDIT", subject="ignoreOriginUserRule")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/ignore-origin-user-rule/edit/{ignoreOriginUserRule}', name: 'edit_ignore_origin_rule', methods: ['GET'], requirements: ['ignoreOriginUserRule' => '\d+'])]
|
||||
public function editIgnoreOriginRuleAction(IgnoreOriginUserRule $ignoreOriginUserRule)
|
||||
{
|
||||
return $this->redirect($this->generateUrl('config') . '?ignore-origin-user-rule=' . $ignoreOriginUserRule->getId() . '#set6');
|
||||
|
@ -552,11 +546,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Remove all annotations OR tags OR entries for the current user.
|
||||
*
|
||||
* @Route("/reset/{type}", name="config_reset", methods={"POST"}, requirements={"id" = "annotations|tags|entries|tagging_rules"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/reset/{type}', name: 'config_reset', methods: ['POST'], requirements: ['id' => 'annotations|tags|entries|tagging_rules'])]
|
||||
public function resetAction(Request $request, string $type, AnnotationRepository $annotationRepository, EntryRepository $entryRepository, TaggingRuleRepository $taggingRuleRepository)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('reset-area', $request->request->get('token'))) {
|
||||
|
@ -608,13 +601,12 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Delete account for current user.
|
||||
*
|
||||
* @Route("/account/delete", name="delete_account", methods={"POST"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*
|
||||
* @throws AccessDeniedHttpException
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/account/delete', name: 'delete_account', methods: ['POST'])]
|
||||
public function deleteAccountAction(Request $request, UserRepository $userRepository, TokenStorageInterface $tokenStorage)
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('delete-account', $request->request->get('token'))) {
|
||||
|
@ -641,11 +633,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Switch view mode for current user.
|
||||
*
|
||||
* @Route("/config/view-mode", name="switch_view_mode", methods={"GET"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/config/view-mode', name: 'switch_view_mode', methods: ['GET'])]
|
||||
public function changeViewModeAction(Request $request)
|
||||
{
|
||||
$user = $this->getUser();
|
||||
|
@ -664,11 +655,10 @@ class ConfigController extends AbstractController
|
|||
*
|
||||
* @param string $language
|
||||
*
|
||||
* @Route("/locale/{language}", name="changeLocale", methods={"GET"})
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/locale/{language}', name: 'changeLocale', methods: ['GET'])]
|
||||
public function setLocaleAction(Request $request, ValidatorInterface $validator, $language = null)
|
||||
{
|
||||
$errors = $validator->validate($language, new LocaleConstraint(['canonicalize' => true]));
|
||||
|
@ -683,11 +673,10 @@ class ConfigController extends AbstractController
|
|||
/**
|
||||
* Export tagging rules for the logged in user.
|
||||
*
|
||||
* @Route("/tagging-rule/export", name="export_tagging_rule", methods={"GET"})
|
||||
* @IsGranted("EDIT_CONFIG")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/tagging-rule/export', name: 'export_tagging_rule', methods: ['GET'])]
|
||||
public function exportTaggingRulesAction()
|
||||
{
|
||||
$data = SerializerBuilder::create()->build()->serialize(
|
||||
|
|
|
@ -46,11 +46,10 @@ class EntryController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/mass", name="mass_action", methods={"POST"})
|
||||
* @IsGranted("EDIT_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/mass', name: 'mass_action', methods: ['POST'])]
|
||||
public function massAction(Request $request, TagRepository $tagRepository)
|
||||
{
|
||||
$values = $request->request->all();
|
||||
|
@ -132,14 +131,13 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/search/{page}", name="search", methods={"GET", "POST"}, defaults={"page" = 1})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* Default parameter for page is hardcoded (in duplication of the defaults from the Route)
|
||||
* because this controller is also called inside the layout template without any page as argument
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/search/{page}', name: 'search', methods: ['GET', 'POST'], defaults: ['page' => 1])]
|
||||
public function searchFormAction(Request $request, $page = 1, $currentRoute = null)
|
||||
{
|
||||
// fallback to retrieve currentRoute from query parameter instead of injected one (when using inside a template)
|
||||
|
@ -162,11 +160,10 @@ class EntryController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/new-entry", name="new_entry", methods={"GET", "POST"})
|
||||
* @IsGranted("CREATE_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/new-entry', name: 'new_entry', methods: ['GET', 'POST'])]
|
||||
public function addEntryFormAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
$entry = new Entry($this->getUser());
|
||||
|
@ -206,11 +203,10 @@ class EntryController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/bookmarklet", name="bookmarklet", methods={"GET"})
|
||||
* @IsGranted("CREATE_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/bookmarklet', name: 'bookmarklet', methods: ['GET'])]
|
||||
public function addEntryViaBookmarkletAction(Request $request)
|
||||
{
|
||||
$entry = new Entry($this->getUser());
|
||||
|
@ -230,11 +226,10 @@ class EntryController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/new", name="new", methods={"GET"})
|
||||
* @IsGranted("CREATE_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/new', name: 'new', methods: ['GET'])]
|
||||
public function addEntryAction()
|
||||
{
|
||||
return $this->render('Entry/new.html.twig');
|
||||
|
@ -243,11 +238,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Edit an entry content.
|
||||
*
|
||||
* @Route("/edit/{id}", name="edit", methods={"GET", "POST"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("EDIT", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/edit/{id}', name: 'edit', methods: ['GET', 'POST'], requirements: ['id' => '\d+'])]
|
||||
public function editEntryAction(Request $request, Entry $entry)
|
||||
{
|
||||
$form = $this->createForm(EditEntryType::class, $entry);
|
||||
|
@ -276,11 +270,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/all/list/{page}", name="all", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/all/list/{page}', name: 'all', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showAllAction(Request $request, $page)
|
||||
{
|
||||
return $this->showEntries('all', $request, $page);
|
||||
|
@ -291,11 +284,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/unread/list/{page}", name="unread", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/unread/list/{page}', name: 'unread', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showUnreadAction(Request $request, $page)
|
||||
{
|
||||
// load the quickstart if no entry in database
|
||||
|
@ -311,11 +303,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/archive/list/{page}", name="archive", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/archive/list/{page}', name: 'archive', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showArchiveAction(Request $request, $page)
|
||||
{
|
||||
return $this->showEntries('archive', $request, $page);
|
||||
|
@ -326,11 +317,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/starred/list/{page}", name="starred", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/starred/list/{page}', name: 'starred', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showStarredAction(Request $request, $page)
|
||||
{
|
||||
return $this->showEntries('starred', $request, $page);
|
||||
|
@ -341,11 +331,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/untagged/list/{page}", name="untagged", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/untagged/list/{page}', name: 'untagged', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showUntaggedEntriesAction(Request $request, $page)
|
||||
{
|
||||
return $this->showEntries('untagged', $request, $page);
|
||||
|
@ -356,11 +345,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/annotated/list/{page}", name="annotated", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/annotated/list/{page}', name: 'annotated', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showWithAnnotationsEntriesAction(Request $request, $page)
|
||||
{
|
||||
return $this->showEntries('annotated', $request, $page);
|
||||
|
@ -369,11 +357,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Shows random entry depending on the given type.
|
||||
*
|
||||
* @Route("/{type}/random", name="random_entry", methods={"GET"}, requirements={"type": "unread|starred|archive|untagged|annotated|all"})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/{type}/random', name: 'random_entry', methods: ['GET'], requirements: ['type' => 'unread|starred|archive|untagged|annotated|all'])]
|
||||
public function redirectRandomEntryAction(string $type = 'all')
|
||||
{
|
||||
try {
|
||||
|
@ -391,11 +378,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Shows entry content.
|
||||
*
|
||||
* @Route("/view/{id}", name="view", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("VIEW", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/view/{id}', name: 'view', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function viewAction(Entry $entry)
|
||||
{
|
||||
return $this->render(
|
||||
|
@ -408,11 +394,10 @@ class EntryController extends AbstractController
|
|||
* Reload an entry.
|
||||
* Refetch content from the website and make it readable again.
|
||||
*
|
||||
* @Route("/reload/{id}", name="reload_entry", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("RELOAD", subject="entry")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/reload/{id}', name: 'reload_entry', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function reloadAction(Entry $entry)
|
||||
{
|
||||
$this->updateEntry($entry, 'entry_reloaded');
|
||||
|
@ -436,11 +421,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Changes read status for an entry.
|
||||
*
|
||||
* @Route("/archive/{id}", name="archive_entry", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("ARCHIVE", subject="entry")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/archive/{id}', name: 'archive_entry', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function toggleArchiveAction(Request $request, Entry $entry)
|
||||
{
|
||||
$entry->toggleArchive();
|
||||
|
@ -464,11 +448,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Changes starred status for an entry.
|
||||
*
|
||||
* @Route("/star/{id}", name="star_entry", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("STAR", subject="entry")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/star/{id}', name: 'star_entry', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function toggleStarAction(Request $request, Entry $entry)
|
||||
{
|
||||
$entry->toggleStar();
|
||||
|
@ -493,11 +476,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Deletes entry and redirect to the homepage or the last viewed page.
|
||||
*
|
||||
* @Route("/delete/{id}", name="delete_entry", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("DELETE", subject="entry")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/delete/{id}', name: 'delete_entry', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function deleteEntryAction(Request $request, Entry $entry)
|
||||
{
|
||||
// generates the view url for this entry to check for redirection later
|
||||
|
@ -530,11 +512,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Get public URL for entry (and generate it if necessary).
|
||||
*
|
||||
* @Route("/share/{id}", name="share", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("SHARE", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/share/{id}', name: 'share', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function shareAction(Entry $entry)
|
||||
{
|
||||
if (null === $entry->getUid()) {
|
||||
|
@ -552,11 +533,10 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Disable public sharing for an entry.
|
||||
*
|
||||
* @Route("/share/delete/{id}", name="delete_share", methods={"GET"}, requirements={"id" = "\d+"})
|
||||
* @IsGranted("UNSHARE", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/share/delete/{id}', name: 'delete_share', methods: ['GET'], requirements: ['id' => '\d+'])]
|
||||
public function deleteShareAction(Entry $entry)
|
||||
{
|
||||
$entry->cleanUid();
|
||||
|
@ -572,12 +552,11 @@ class EntryController extends AbstractController
|
|||
/**
|
||||
* Ability to view a content publicly.
|
||||
*
|
||||
* @Route("/share/{uid}", name="share_entry", methods={"GET"}, requirements={"uid" = ".+"})
|
||||
* @Cache(maxage="25200", smaxage="25200", public=true)
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/share/{uid}', name: 'share_entry', methods: ['GET'], requirements: ['uid' => '.+'])]
|
||||
public function shareEntryAction(Entry $entry, Config $craueConfig)
|
||||
{
|
||||
if (!$craueConfig->get('share_public')) {
|
||||
|
@ -595,11 +574,10 @@ class EntryController extends AbstractController
|
|||
*
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/domain/{id}/{page}", name="same_domain", methods={"GET"}, requirements={"id" = "\d+"}, defaults={"page" = 1})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/domain/{id}/{page}', name: 'same_domain', methods: ['GET'], requirements: ['id' => '\d+'], defaults: ['page' => 1])]
|
||||
public function getSameDomainEntries(Request $request, $page = 1)
|
||||
{
|
||||
return $this->showEntries('same-domain', $request, $page);
|
||||
|
|
|
@ -21,14 +21,10 @@ class ExportController extends AbstractController
|
|||
/**
|
||||
* Gets one entry content.
|
||||
*
|
||||
* @Route("/export/{entry}.{format}", name="export_entry", methods={"GET"}, requirements={
|
||||
* "format": "epub|pdf|json|xml|txt|csv|md",
|
||||
* "entry": "\d+"
|
||||
* })
|
||||
* @IsGranted("EXPORT", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/export/{entry}.{format}', name: 'export_entry', methods: ['GET'], requirements: ['format' => 'epub|pdf|json|xml|txt|csv|md', 'entry' => '\d+'])]
|
||||
public function downloadEntryAction(Request $request, EntryRepository $entryRepository, EntriesExport $entriesExport, string $format, Entry $entry)
|
||||
{
|
||||
try {
|
||||
|
@ -45,14 +41,10 @@ class ExportController extends AbstractController
|
|||
/**
|
||||
* Export all entries for current user.
|
||||
*
|
||||
* @Route("/export/{category}.{format}", name="export_entries", methods={"GET"}, requirements={
|
||||
* "format": "epub|pdf|json|xml|txt|csv|md",
|
||||
* "category": "all|unread|starred|archive|tag_entries|untagged|search|annotated|same_domain"
|
||||
* })
|
||||
* @IsGranted("EXPORT_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/export/{category}.{format}', name: 'export_entries', methods: ['GET'], requirements: ['format' => 'epub|pdf|json|xml|txt|csv|md', 'category' => 'all|unread|starred|archive|tag_entries|untagged|search|annotated|same_domain'])]
|
||||
public function downloadEntriesAction(Request $request, EntryRepository $entryRepository, TagRepository $tagRepository, EntriesExport $entriesExport, string $format, string $category, int $entry = 0)
|
||||
{
|
||||
$method = ucfirst($category);
|
||||
|
|
|
@ -28,13 +28,12 @@ class FeedController extends AbstractController
|
|||
/**
|
||||
* Shows unread entries for current user.
|
||||
*
|
||||
* @Route("/feed/{username}/{token}/unread/{page}", name="unread_feed", methods={"GET"}, defaults={"page"=1, "_format"="xml"})
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @ParamConverter("user", class="Wallabag\Entity\User", converter="username_feed_token_converter")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/feed/{username}/{token}/unread/{page}', name: 'unread_feed', methods: ['GET'], defaults: ['page' => 1, '_format' => 'xml'])]
|
||||
public function showUnreadFeedAction(User $user, $page)
|
||||
{
|
||||
return $this->showEntries('unread', $user, $page);
|
||||
|
@ -43,13 +42,12 @@ class FeedController extends AbstractController
|
|||
/**
|
||||
* Shows read entries for current user.
|
||||
*
|
||||
* @Route("/feed/{username}/{token}/archive/{page}", name="archive_feed", methods={"GET"}, defaults={"page"=1, "_format"="xml"})
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @ParamConverter("user", class="Wallabag\Entity\User", converter="username_feed_token_converter")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/feed/{username}/{token}/archive/{page}', name: 'archive_feed', methods: ['GET'], defaults: ['page' => 1, '_format' => 'xml'])]
|
||||
public function showArchiveFeedAction(User $user, $page)
|
||||
{
|
||||
return $this->showEntries('archive', $user, $page);
|
||||
|
@ -58,13 +56,12 @@ class FeedController extends AbstractController
|
|||
/**
|
||||
* Shows starred entries for current user.
|
||||
*
|
||||
* @Route("/feed/{username}/{token}/starred/{page}", name="starred_feed", methods={"GET"}, defaults={"page"=1, "_format"="xml"})
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @ParamConverter("user", class="Wallabag\Entity\User", converter="username_feed_token_converter")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/feed/{username}/{token}/starred/{page}', name: 'starred_feed', methods: ['GET'], defaults: ['page' => 1, '_format' => 'xml'])]
|
||||
public function showStarredFeedAction(User $user, $page)
|
||||
{
|
||||
return $this->showEntries('starred', $user, $page);
|
||||
|
@ -73,13 +70,12 @@ class FeedController extends AbstractController
|
|||
/**
|
||||
* Shows all entries for current user.
|
||||
*
|
||||
* @Route("/feed/{username}/{token}/all/{page}", name="all_feed", methods={"GET"}, defaults={"page"=1, "_format"="xml"})
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @ParamConverter("user", class="Wallabag\Entity\User", converter="username_feed_token_converter")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/feed/{username}/{token}/all/{page}', name: 'all_feed', methods: ['GET'], defaults: ['page' => 1, '_format' => 'xml'])]
|
||||
public function showAllFeedAction(User $user, $page)
|
||||
{
|
||||
return $this->showEntries('all', $user, $page);
|
||||
|
@ -88,14 +84,13 @@ class FeedController extends AbstractController
|
|||
/**
|
||||
* Shows entries associated to a tag for current user.
|
||||
*
|
||||
* @Route("/feed/{username}/{token}/tags/{slug}/{page}", name="tag_feed", methods={"GET"}, defaults={"page"=1, "_format"="xml"})
|
||||
* @IsGranted("PUBLIC_ACCESS")
|
||||
*
|
||||
* @ParamConverter("user", class="Wallabag\Entity\User", converter="username_feed_token_converter")
|
||||
* @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/feed/{username}/{token}/tags/{slug}/{page}', name: 'tag_feed', methods: ['GET'], defaults: ['page' => 1, '_format' => 'xml'])]
|
||||
public function showTagsFeedAction(Request $request, User $user, Tag $tag, PreparePagerForEntries $preparePagerForEntries, $page)
|
||||
{
|
||||
$sort = $request->query->get('sort', 'created');
|
||||
|
|
|
@ -29,9 +29,9 @@ class IgnoreOriginInstanceRuleController extends AbstractController
|
|||
/**
|
||||
* Lists all IgnoreOriginInstanceRule entities.
|
||||
*
|
||||
* @Route("/ignore-origin-instance-rules", name="ignore_origin_instance_rules_index", methods={"GET"})
|
||||
* @IsGranted("LIST_IGNORE_ORIGIN_INSTANCE_RULES")
|
||||
*/
|
||||
#[Route(path: '/ignore-origin-instance-rules', name: 'ignore_origin_instance_rules_index', methods: ['GET'])]
|
||||
public function indexAction(IgnoreOriginInstanceRuleRepository $repository)
|
||||
{
|
||||
$rules = $repository->findAll();
|
||||
|
@ -44,11 +44,10 @@ class IgnoreOriginInstanceRuleController extends AbstractController
|
|||
/**
|
||||
* Creates a new ignore origin instance rule entity.
|
||||
*
|
||||
* @Route("/ignore-origin-instance-rules/new", name="ignore_origin_instance_rules_new", methods={"GET", "POST"})
|
||||
* @IsGranted("CREATE_IGNORE_ORIGIN_INSTANCE_RULES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/ignore-origin-instance-rules/new', name: 'ignore_origin_instance_rules_new', methods: ['GET', 'POST'])]
|
||||
public function newAction(Request $request)
|
||||
{
|
||||
$ignoreOriginInstanceRule = new IgnoreOriginInstanceRule();
|
||||
|
@ -77,11 +76,10 @@ class IgnoreOriginInstanceRuleController extends AbstractController
|
|||
/**
|
||||
* Displays a form to edit an existing ignore origin instance rule entity.
|
||||
*
|
||||
* @Route("/ignore-origin-instance-rules/{id}/edit", name="ignore_origin_instance_rules_edit", methods={"GET", "POST"})
|
||||
* @IsGranted("EDIT", subject="ignoreOriginInstanceRule")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/ignore-origin-instance-rules/{id}/edit', name: 'ignore_origin_instance_rules_edit', methods: ['GET', 'POST'])]
|
||||
public function editAction(Request $request, IgnoreOriginInstanceRule $ignoreOriginInstanceRule)
|
||||
{
|
||||
$deleteForm = $this->createDeleteForm($ignoreOriginInstanceRule);
|
||||
|
@ -110,11 +108,10 @@ class IgnoreOriginInstanceRuleController extends AbstractController
|
|||
/**
|
||||
* Deletes a site credential entity.
|
||||
*
|
||||
* @Route("/ignore-origin-instance-rules/{id}", name="ignore_origin_instance_rules_delete", methods={"DELETE"})
|
||||
* @IsGranted("DELETE", subject="ignoreOriginInstanceRule")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/ignore-origin-instance-rules/{id}', name: 'ignore_origin_instance_rules_delete', methods: ['DELETE'])]
|
||||
public function deleteAction(Request $request, IgnoreOriginInstanceRule $ignoreOriginInstanceRule)
|
||||
{
|
||||
$form = $this->createDeleteForm($ignoreOriginInstanceRule);
|
||||
|
|
|
@ -14,11 +14,10 @@ use Wallabag\Import\ImportInterface;
|
|||
abstract class BrowserController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* @Route("/import/browser", name="import_browser", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/import/browser', name: 'import_browser', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -22,9 +22,9 @@ class ChromeController extends BrowserController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/chrome", name="import_chrome", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/chrome', name: 'import_chrome', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -22,9 +22,9 @@ class DeliciousController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/delicious", name="import_delicious", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/delicious', name: 'import_delicious', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, DeliciousImport $delicious, Config $craueConfig, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -22,9 +22,9 @@ class ElcuratorController extends WallabagController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/elcurator", name="import_elcurator", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/elcurator', name: 'import_elcurator', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -22,9 +22,9 @@ class FirefoxController extends BrowserController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/firefox", name="import_firefox", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/firefox', name: 'import_firefox', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -14,11 +14,10 @@ use Wallabag\Import\ImportInterface;
|
|||
abstract class HtmlController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* @Route("/import/html", name="import_html", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/import/html', name: 'import_html', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -20,9 +20,9 @@ class ImportController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/", name="import", methods={"GET"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/', name: 'import', methods: ['GET'])]
|
||||
public function importAction(ImportChain $importChain)
|
||||
{
|
||||
return $this->render('Import/index.html.twig', [
|
||||
|
|
|
@ -22,9 +22,9 @@ class InstapaperController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/instapaper", name="import_instapaper", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/instapaper', name: 'import_instapaper', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, InstapaperImport $instapaper, Config $craueConfig, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -22,9 +22,9 @@ class OmnivoreController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/omnivore", name="import_omnivore", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/omnivore', name: 'import_omnivore', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, OmnivoreImport $omnivore, Config $craueConfig, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -22,9 +22,9 @@ class PinboardController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/pinboard", name="import_pinboard", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/pinboard', name: 'import_pinboard', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, PinboardImport $pinboard, Config $craueConfig, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -26,9 +26,9 @@ class PocketController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/pocket", name="import_pocket", methods={"GET"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/pocket', name: 'import_pocket', methods: ['GET'])]
|
||||
public function indexAction(PocketImport $pocketImport)
|
||||
{
|
||||
$pocket = $this->getPocketImportService($pocketImport);
|
||||
|
@ -48,9 +48,9 @@ class PocketController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/pocket/auth", name="import_pocket_auth", methods={"POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/pocket/auth', name: 'import_pocket_auth', methods: ['POST'])]
|
||||
public function authAction(Request $request, PocketImport $pocketImport)
|
||||
{
|
||||
$requestToken = $this->getPocketImportService($pocketImport)
|
||||
|
@ -79,9 +79,9 @@ class PocketController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/pocket/callback", name="import_pocket_callback", methods={"GET"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/pocket/callback', name: 'import_pocket_callback', methods: ['GET'])]
|
||||
public function callbackAction(PocketImport $pocketImport, TranslatorInterface $translator)
|
||||
{
|
||||
$message = 'flashes.import.notice.failed';
|
||||
|
|
|
@ -22,9 +22,9 @@ class PocketHtmlController extends HtmlController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/pocket_html", name="import_pocket_html", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/pocket_html', name: 'import_pocket_html', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -22,9 +22,9 @@ class ReadabilityController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/readability", name="import_readability", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/readability', name: 'import_readability', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, ReadabilityImport $readability, Config $craueConfig, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(UploadImportType::class);
|
||||
|
|
|
@ -22,9 +22,9 @@ class ShaarliController extends HtmlController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/shaarli", name="import_shaarli", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/shaarli', name: 'import_shaarli', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -22,9 +22,9 @@ class WallabagV1Controller extends WallabagController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/wallabag-v1", name="import_wallabag_v1", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/wallabag-v1', name: 'import_wallabag_v1', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -22,9 +22,9 @@ class WallabagV2Controller extends WallabagController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/import/wallabag-v2", name="import_wallabag_v2", methods={"GET", "POST"})
|
||||
* @IsGranted("IMPORT_ENTRIES")
|
||||
*/
|
||||
#[Route(path: '/import/wallabag-v2', name: 'import_wallabag_v2', methods: ['GET', 'POST'])]
|
||||
public function indexAction(Request $request, TranslatorInterface $translator)
|
||||
{
|
||||
return parent::indexAction($request, $translator);
|
||||
|
|
|
@ -34,9 +34,9 @@ class SiteCredentialController extends AbstractController
|
|||
/**
|
||||
* Lists all User entities.
|
||||
*
|
||||
* @Route("/site-credentials", name="site_credentials_index", methods={"GET"})
|
||||
* @IsGranted("LIST_SITE_CREDENTIALS")
|
||||
*/
|
||||
#[Route(path: '/site-credentials', name: 'site_credentials_index', methods: ['GET'])]
|
||||
public function indexAction(SiteCredentialRepository $repository)
|
||||
{
|
||||
$this->isSiteCredentialsEnabled();
|
||||
|
@ -51,11 +51,10 @@ class SiteCredentialController extends AbstractController
|
|||
/**
|
||||
* Creates a new site credential entity.
|
||||
*
|
||||
* @Route("/site-credentials/new", name="site_credentials_new", methods={"GET", "POST"})
|
||||
* @IsGranted("CREATE_SITE_CREDENTIALS")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/site-credentials/new', name: 'site_credentials_new', methods: ['GET', 'POST'])]
|
||||
public function newAction(Request $request)
|
||||
{
|
||||
$this->isSiteCredentialsEnabled();
|
||||
|
@ -89,11 +88,10 @@ class SiteCredentialController extends AbstractController
|
|||
/**
|
||||
* Displays a form to edit an existing site credential entity.
|
||||
*
|
||||
* @Route("/site-credentials/{id}/edit", name="site_credentials_edit", methods={"GET", "POST"})
|
||||
* @IsGranted("EDIT", subject="siteCredential")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/site-credentials/{id}/edit', name: 'site_credentials_edit', methods: ['GET', 'POST'])]
|
||||
public function editAction(Request $request, SiteCredential $siteCredential)
|
||||
{
|
||||
$this->isSiteCredentialsEnabled();
|
||||
|
@ -127,11 +125,10 @@ class SiteCredentialController extends AbstractController
|
|||
/**
|
||||
* Deletes a site credential entity.
|
||||
*
|
||||
* @Route("/site-credentials/{id}", name="site_credentials_delete", methods={"DELETE"})
|
||||
* @IsGranted("DELETE", subject="siteCredential")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Route(path: '/site-credentials/{id}', name: 'site_credentials_delete', methods: ['DELETE'])]
|
||||
public function deleteAction(Request $request, SiteCredential $siteCredential)
|
||||
{
|
||||
$this->isSiteCredentialsEnabled();
|
||||
|
|
|
@ -8,9 +8,9 @@ use Symfony\Component\Routing\Annotation\Route;
|
|||
class StaticController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* @Route("/howto", name="howto", methods={"GET"})
|
||||
* @IsGranted("IS_AUTHENTICATED_FULLY")
|
||||
*/
|
||||
#[Route(path: '/howto', name: 'howto', methods: ['GET'])]
|
||||
public function howtoAction()
|
||||
{
|
||||
$addonsUrl = $this->getParameter('addons_url');
|
||||
|
@ -24,9 +24,9 @@ class StaticController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/about", name="about", methods={"GET"})
|
||||
* @IsGranted("IS_AUTHENTICATED_FULLY")
|
||||
*/
|
||||
#[Route(path: '/about', name: 'about', methods: ['GET'])]
|
||||
public function aboutAction()
|
||||
{
|
||||
return $this->render(
|
||||
|
@ -39,9 +39,9 @@ class StaticController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/quickstart", name="quickstart", methods={"GET"})
|
||||
* @IsGranted("IS_AUTHENTICATED_FULLY")
|
||||
*/
|
||||
#[Route(path: '/quickstart', name: 'quickstart', methods: ['GET'])]
|
||||
public function quickstartAction()
|
||||
{
|
||||
return $this->render(
|
||||
|
|
|
@ -34,11 +34,10 @@ class TagController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @Route("/new-tag/{entry}", name="new_tag", methods={"POST"}, requirements={"entry" = "\d+"})
|
||||
* @IsGranted("TAG", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/new-tag/{entry}', name: 'new_tag', methods: ['POST'], requirements: ['entry' => '\d+'])]
|
||||
public function addTagFormAction(Request $request, Entry $entry, TranslatorInterface $translator)
|
||||
{
|
||||
$form = $this->createForm(NewTagType::class, new Tag());
|
||||
|
@ -84,11 +83,10 @@ class TagController extends AbstractController
|
|||
/**
|
||||
* Removes tag from entry.
|
||||
*
|
||||
* @Route("/remove-tag/{entry}/{tag}", name="remove_tag", methods={"GET"}, requirements={"entry" = "\d+", "tag" = "\d+"})
|
||||
* @IsGranted("UNTAG", subject="entry")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/remove-tag/{entry}/{tag}', name: 'remove_tag', methods: ['GET'], requirements: ['entry' => '\d+', 'tag' => '\d+'])]
|
||||
public function removeTagFromEntry(Request $request, Entry $entry, Tag $tag)
|
||||
{
|
||||
$entry->removeTag($tag);
|
||||
|
@ -108,11 +106,10 @@ class TagController extends AbstractController
|
|||
/**
|
||||
* Shows tags for current user.
|
||||
*
|
||||
* @Route("/tag/list", name="tag", methods={"GET"})
|
||||
* @IsGranted("LIST_TAGS")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/tag/list', name: 'tag', methods: ['GET'])]
|
||||
public function showTagAction(TagRepository $tagRepository, EntryRepository $entryRepository)
|
||||
{
|
||||
$allTagsWithNbEntries = $tagRepository->findAllTagsWithNbEntries($this->getUser()->getId());
|
||||
|
@ -133,13 +130,12 @@ class TagController extends AbstractController
|
|||
/**
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/tag/list/{slug}/{page}", name="tag_entries", methods={"GET"}, defaults={"page" = "1"})
|
||||
* @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
|
||||
* @IsGranted("LIST_ENTRIES")
|
||||
* @IsGranted("VIEW", subject="tag")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/tag/list/{slug}/{page}', name: 'tag_entries', methods: ['GET'], defaults: ['page' => '1'])]
|
||||
public function showEntriesForTagAction(Tag $tag, EntryRepository $entryRepository, PreparePagerForEntries $preparePagerForEntries, $page, Request $request)
|
||||
{
|
||||
$entriesByTag = $entryRepository->findAllByTagId(
|
||||
|
@ -174,12 +170,11 @@ class TagController extends AbstractController
|
|||
* Rename a given tag with a new label
|
||||
* Create a new tag with the new name and drop the old one.
|
||||
*
|
||||
* @Route("/tag/rename/{slug}", name="tag_rename", methods={"POST"})
|
||||
* @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
|
||||
* @IsGranted("EDIT", subject="tag")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/tag/rename/{slug}', name: 'tag_rename', methods: ['POST'])]
|
||||
public function renameTagAction(Tag $tag, Request $request, TagRepository $tagRepository, EntryRepository $entryRepository)
|
||||
{
|
||||
$form = $this->createForm(RenameTagType::class, new Tag());
|
||||
|
@ -228,11 +223,10 @@ class TagController extends AbstractController
|
|||
/**
|
||||
* Tag search results with the current search term.
|
||||
*
|
||||
* @Route("/tag/search/{filter}", name="tag_this_search", methods={"GET"})
|
||||
* @IsGranted("CREATE_TAGS")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/tag/search/{filter}', name: 'tag_this_search', methods: ['GET'])]
|
||||
public function tagThisSearchAction($filter, Request $request, EntryRepository $entryRepository)
|
||||
{
|
||||
$currentRoute = $request->query->has('currentRoute') ? $request->query->get('currentRoute') : '';
|
||||
|
@ -264,12 +258,11 @@ class TagController extends AbstractController
|
|||
/**
|
||||
* Delete a given tag for the current user.
|
||||
*
|
||||
* @Route("/tag/delete/{slug}", name="tag_delete", methods={"GET"})
|
||||
* @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
|
||||
* @IsGranted("DELETE", subject="tag")
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/tag/delete/{slug}', name: 'tag_delete', methods: ['GET'])]
|
||||
public function removeTagAction(Tag $tag, Request $request, EntryRepository $entryRepository)
|
||||
{
|
||||
foreach ($tag->getEntriesByUserId($this->getUser()->getId()) as $entry) {
|
||||
|
|
|
@ -38,9 +38,9 @@ class UserController extends AbstractController
|
|||
/**
|
||||
* Creates a new User entity.
|
||||
*
|
||||
* @Route("/users/new", name="user_new", methods={"GET", "POST"})
|
||||
* @IsGranted("CREATE_USERS")
|
||||
*/
|
||||
#[Route(path: '/users/new', name: 'user_new', methods: ['GET', 'POST'])]
|
||||
public function newAction(Request $request, UserManagerInterface $userManager, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
$user = $userManager->createUser();
|
||||
|
@ -75,9 +75,9 @@ class UserController extends AbstractController
|
|||
/**
|
||||
* Displays a form to edit an existing User entity.
|
||||
*
|
||||
* @Route("/users/{id}/edit", name="user_edit", methods={"GET", "POST"})
|
||||
* @IsGranted("EDIT", subject="user")
|
||||
*/
|
||||
#[Route(path: '/users/{id}/edit', name: 'user_edit', methods: ['GET', 'POST'])]
|
||||
public function editAction(Request $request, User $user, UserManagerInterface $userManager, GoogleAuthenticatorInterface $googleAuthenticator)
|
||||
{
|
||||
$deleteForm = $this->createDeleteForm($user);
|
||||
|
@ -118,9 +118,9 @@ class UserController extends AbstractController
|
|||
/**
|
||||
* Deletes a User entity.
|
||||
*
|
||||
* @Route("/users/{id}", name="user_delete", methods={"DELETE"})
|
||||
* @IsGranted("DELETE", subject="user")
|
||||
*/
|
||||
#[Route(path: '/users/{id}', name: 'user_delete', methods: ['DELETE'])]
|
||||
public function deleteAction(Request $request, User $user)
|
||||
{
|
||||
$form = $this->createDeleteForm($user);
|
||||
|
@ -142,14 +142,13 @@ class UserController extends AbstractController
|
|||
/**
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/users/list/{page}", name="user_index", methods={"GET"}, defaults={"page" = 1})
|
||||
* @IsGranted("LIST_USERS")
|
||||
*
|
||||
* Default parameter for page is hardcoded (in duplication of the defaults from the Route)
|
||||
* because this controller is also called inside the layout template without any page as argument
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
#[Route(path: '/users/list/{page}', name: 'user_index', methods: ['GET'], defaults: ['page' => 1])]
|
||||
public function searchFormAction(Request $request, UserRepository $userRepository, $page = 1)
|
||||
{
|
||||
$qb = $userRepository->createQueryBuilder('u');
|
||||
|
|
|
@ -55,14 +55,10 @@ class Annotation
|
|||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\Length(
|
||||
* max = 10000,
|
||||
* maxMessage = "validator.quote_length_too_high"
|
||||
* )
|
||||
*
|
||||
* @Groups({"entries_for_user", "export_all"})
|
||||
*/
|
||||
#[ORM\Column(name: 'quote', type: 'text')]
|
||||
#[Assert\Length(max: 10000, maxMessage: 'validator.quote_length_too_high')]
|
||||
private $quote;
|
||||
|
||||
/**
|
||||
|
|
|
@ -32,26 +32,20 @@ class Config
|
|||
/**
|
||||
* @var int
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\Range(
|
||||
* min = 1,
|
||||
* max = 100000,
|
||||
* maxMessage = "validator.item_per_page_too_high"
|
||||
* )
|
||||
*
|
||||
* @Groups({"config_api"})
|
||||
*/
|
||||
#[ORM\Column(name: 'items_per_page', type: 'integer', nullable: false)]
|
||||
#[Assert\NotBlank]
|
||||
#[Assert\Range(min: 1, max: 100000, maxMessage: 'validator.item_per_page_too_high')]
|
||||
private $itemsPerPage;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
*
|
||||
* @Groups({"config_api"})
|
||||
*/
|
||||
#[ORM\Column(name: 'language', type: 'string', nullable: false)]
|
||||
#[Assert\NotBlank]
|
||||
private $language;
|
||||
|
||||
/**
|
||||
|
@ -65,14 +59,10 @@ class Config
|
|||
/**
|
||||
* @var int|null
|
||||
*
|
||||
* @Assert\Range(
|
||||
* min = 1,
|
||||
* max = 100000,
|
||||
* maxMessage = "validator.feed_limit_too_high"
|
||||
* )
|
||||
* @Groups({"config_api"})
|
||||
*/
|
||||
#[ORM\Column(name: 'feed_limit', type: 'integer', nullable: true)]
|
||||
#[Assert\Range(min: 1, max: 100000, maxMessage: 'validator.feed_limit_too_high')]
|
||||
private $feedLimit;
|
||||
|
||||
/**
|
||||
|
|
|
@ -68,14 +68,11 @@ class Entry
|
|||
*
|
||||
* @var string|null
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\Url(
|
||||
* message = "The url '{{ value }}' is not a valid url",
|
||||
* )
|
||||
*
|
||||
* @Groups({"entries_for_user", "export_all"})
|
||||
*/
|
||||
#[ORM\Column(name: 'url', type: 'text', nullable: true)]
|
||||
#[Assert\NotBlank]
|
||||
#[Assert\Url(message: "The url '{{ value }}' is not a valid url")]
|
||||
private $url;
|
||||
|
||||
/**
|
||||
|
|
|
@ -25,14 +25,14 @@ class IgnoreOriginInstanceRule implements IgnoreOriginRuleInterface, RuleInterfa
|
|||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\Length(max=255)
|
||||
* @RulerZAssert\ValidRule(
|
||||
* allowed_variables={"host","_all"},
|
||||
* allowed_operators={"=","~"}
|
||||
* )
|
||||
*/
|
||||
#[ORM\Column(name: 'rule', type: 'string', nullable: false)]
|
||||
#[Assert\NotBlank]
|
||||
#[Assert\Length(max: 255)]
|
||||
private $rule;
|
||||
|
||||
/**
|
||||
|
|
|
@ -25,14 +25,14 @@ class IgnoreOriginUserRule implements IgnoreOriginRuleInterface, RuleInterface
|
|||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\Length(max=255)
|
||||
* @RulerZAssert\ValidRule(
|
||||
* allowed_variables={"host","_all"},
|
||||
* allowed_operators={"=","~"}
|
||||
* )
|
||||
*/
|
||||
#[ORM\Column(name: 'rule', type: 'string', nullable: false)]
|
||||
#[Assert\NotBlank]
|
||||
#[Assert\Length(max: 255)]
|
||||
private $rule;
|
||||
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
|
|
|
@ -27,27 +27,24 @@ class SiteCredential
|
|||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\Length(max=255)
|
||||
*/
|
||||
#[ORM\Column(name: 'host', type: 'string', length: 255)]
|
||||
#[Assert\NotBlank]
|
||||
#[Assert\Length(max: 255)]
|
||||
private $host;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
*/
|
||||
#[ORM\Column(name: 'username', type: 'text')]
|
||||
#[Assert\NotBlank]
|
||||
private $username;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
*/
|
||||
#[ORM\Column(name: 'password', type: 'text')]
|
||||
#[Assert\NotBlank]
|
||||
private $password;
|
||||
|
||||
/**
|
||||
|
|
|
@ -30,8 +30,6 @@ class TaggingRule implements RuleInterface
|
|||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\Length(max=255)
|
||||
* @RulerZAssert\ValidRule(
|
||||
* allowed_variables={"title", "url", "isArchived", "isStarred", "content", "language", "mimetype", "readingTime", "domainName"},
|
||||
* allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or", "matches", "notmatches"}
|
||||
|
@ -40,16 +38,17 @@ class TaggingRule implements RuleInterface
|
|||
* @Groups({"export_tagging_rule"})
|
||||
*/
|
||||
#[ORM\Column(name: 'rule', type: 'string', nullable: false)]
|
||||
#[Assert\NotBlank]
|
||||
#[Assert\Length(max: 255)]
|
||||
private $rule;
|
||||
|
||||
/**
|
||||
* @var array<string>
|
||||
*
|
||||
* @Assert\NotBlank()
|
||||
*
|
||||
* @Groups({"export_tagging_rule"})
|
||||
*/
|
||||
#[ORM\Column(name: 'tags', type: 'simple_array', nullable: false)]
|
||||
#[Assert\NotBlank]
|
||||
private $tags = [];
|
||||
|
||||
/**
|
||||
|
|
|
@ -22,13 +22,12 @@ use Wallabag\Repository\UserRepository;
|
|||
* User.
|
||||
*
|
||||
* @XmlRoot("user")
|
||||
*
|
||||
* @UniqueEntity("email")
|
||||
* @UniqueEntity("username")
|
||||
*/
|
||||
#[ORM\Table(name: '`user`')]
|
||||
#[ORM\Entity(repositoryClass: UserRepository::class)]
|
||||
#[ORM\HasLifecycleCallbacks]
|
||||
#[UniqueEntity('email')]
|
||||
#[UniqueEntity('username')]
|
||||
class User extends BaseUser implements EmailTwoFactorInterface, GoogleTwoFactorInterface, BackupCodeInterface
|
||||
{
|
||||
use EntityTimestampsTrait;
|
||||
|
|
|
@ -7,7 +7,6 @@ use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
|
|||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
use Wallabag\Entity\Entry;
|
||||
use Wallabag\Entity\Tag;
|
||||
use Wallabag\Entity\User;
|
||||
use Wallabag\Event\EntrySavedEvent;
|
||||
use Wallabag\Helper\ContentProxy;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue