From d48af5b679df1f5a14e1bfc73907a36f185eb746 Mon Sep 17 00:00:00 2001 From: ameotoko Date: Tue, 9 Nov 2021 17:58:26 +0100 Subject: [PATCH] add README.md and license --- LICENSE | 0 README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ screenshot.png | Bin 0 -> 22468 bytes 3 files changed, 56 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 screenshot.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..eaece8f --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Backend Redirect + +Backend Redirect Bundle is an extension for [Contao CMS](https://contao.org). + +## Installation + +Use [Composer](https://getcomposer.org) to add the bundle to your Contao application: + +```bash +composer require ameotoko/backend-redirect +``` + +## Usage + +This bundle adds a backend route to your application (`/contao/redirect` by default). You can supply a query string to it, and it will redirect you to a correspondent backend module after adding proper request token and `ref`. If you have to login, you'll be redirected to `/contao/login` first. + +## Why? + +Sometimes you might want to let your backend users to access a record editing form, using a direct link, like `/contao?do=members&act=edit&id=42`. For instance, your application might be sending notifications to your editors, where they can click on such a link in the email and proceed directly to editing the record. + +Currently, Contao's backend firewall will not let you do it directly – it will force your editors to go through a confirmation screen like this: + +![](screenshot.png?raw=true) + +which is not a good UX for your editors. With this extension, you can give them links like this: + +``` +https://example.com/contao/redirect?do=user&act=edit&id=1 +``` + +It will redirect to: + +``` +https://example.com/contao?do=user&act=edit&id=1&rt=a48be7155094538da5fe2.dO1lxYXxmvHGRIblveDcaZfHJMYJpQbWLaMMtb1oO8g.E4QDt-6hwr-pd9Sn8IGROeW2e544_36kcptUx-4QXvodviGcwqvbrv8o9Q +``` + +## Configuration + +You can customize the URL path using route prefix: + +```yaml +# config/routes.yaml +app_redirect: + resource: '@AmeotokoBackendRedirectBundle/Resources/config/_definition.yaml' + prefix: /contao/my-redirect +``` + +The endpoint will now be `https://example.com/contao/my-redirect`. + +## Contributing +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. + +Please make sure to update tests as appropriate. + +## License +[MIT](https://choosealicense.com/licenses/mit/) diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d4128347627c44452dcca8738541e6178828e8f8 GIT binary patch literal 22468 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 VSk#WV)e-j9)l$<_tyQ*(`Y+)OHd6oq literal 0 HcmV?d00001