mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-24 02:39:20 -05:00
update documentation
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
If you like this application and want it to give back, there are many ways to contribute.
|
If you like this application and want it to give back, there are many ways to contribute.
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
!!! success "Contribution List"
|
!!! success "Contribution List"
|
||||||
If you help bring this project forward you deserve to be credited for it.
|
If you help bring this project forward you deserve to be credited for it.
|
||||||
Feel free to add yourself to `CONTRIBUTERS.md` or message me to add you if you have contributed anything.
|
Feel free to add yourself to `CONTRIBUTERS.md` or message me to add you if you have contributed anything.
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
|
|
||||||
@@ -11,23 +13,23 @@ Improve the translations for any of the existing languages.
|
|||||||
|
|
||||||
Add a new language to the long list of existing translations.
|
Add a new language to the long list of existing translations.
|
||||||
|
|
||||||
- Armenian
|
- Armenian
|
||||||
- Bulgarian
|
- Bulgarian
|
||||||
- Catalan
|
- Catalan
|
||||||
- Czech
|
- Czech
|
||||||
- Danish
|
- Danish
|
||||||
- Dutch
|
- Dutch
|
||||||
- English
|
- English
|
||||||
- French
|
- French
|
||||||
- German
|
- German
|
||||||
- Hungarian
|
- Hungarian
|
||||||
- Italian
|
- Italian
|
||||||
- Latvian
|
- Latvian
|
||||||
- Norwegian
|
- Norwegian
|
||||||
- Polish
|
- Polish
|
||||||
- Russian
|
- Russian
|
||||||
- Spanish
|
- Spanish
|
||||||
- Swedish
|
- Swedish
|
||||||
|
|
||||||
See [here](/contribute/translations) for further information on how to contribute translation to Tandoor.
|
See [here](/contribute/translations) for further information on how to contribute translation to Tandoor.
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
If you want to contribute bug fixes or small tweaks then your pull requests are always welcome!
|
If you want to contribute bug fixes or small tweaks then your pull requests are always welcome!
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
!!! danger "Discuss First!"
|
!!! danger "Discuss First!"
|
||||||
If you want to contribute larger features that introduce more complexity to the project please
|
If you want to contribute larger features that introduce more complexity to the project please
|
||||||
make sure to **first submit a technical description** outlining what and how you want to do it.
|
make sure to **first submit a technical description** outlining what and how you want to do it.
|
||||||
This allows me and the community to give feedback and manage the complexity of the overall
|
This allows me and the community to give feedback and manage the complexity of the overall
|
||||||
application. If you don't do this please don't be mad if I reject your PR.
|
application. If you don't do this please don't be mad if I reject your PR.
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
@@ -20,23 +22,25 @@ To contribute to the project you are required to use the following packages with
|
|||||||
- isort
|
- isort
|
||||||
- prettier
|
- prettier
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! tip "Manual Formatting"
|
!!! tip "Manual Formatting"
|
||||||
It is possible to run formatting manually, but it is recommended to setup your IDE to format on save.
|
It is possible to run formatting manually, but it is recommended to setup your IDE to format on save.
|
||||||
``` bash
|
``` bash
|
||||||
flake8 file.py --ignore=E501 | isort -q file.py | yapf -i file.py
|
flake8 file.py --ignore=E501 | isort -q file.py | yapf -i file.py
|
||||||
prettier --write file.vue
|
prettier --write file.vue
|
||||||
```
|
```
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
Django uses pytest-django to implement a full suite of testing. If you make any functional changes, please implment the appropriate
|
|
||||||
|
Django uses pytest-django to implement a full suite of testing. If you make any functional changes, please implment the appropriate
|
||||||
tests.
|
tests.
|
||||||
|
|
||||||
Tandoor is also actively soliciting contribors willing to setup vue3 testing. If you have knowledge in this area it would be greatly appreciated.
|
Tandoor is also actively soliciting contribors willing to setup vue3 testing. If you have knowledge in this area it would be greatly appreciated.
|
||||||
|
|
||||||
## API Client
|
## API Client
|
||||||
|
|
||||||
Tandoor uses [django-rest-framework](https://www.django-rest-framework.org/) for API implementation. Making contributions that impact the API requires an understanding of
|
Tandoor uses [django-rest-framework](https://www.django-rest-framework.org/) for API implementation. Making contributions that impact the API requires an understanding of
|
||||||
Viewsets and Serializers.
|
Viewsets and Serializers.
|
||||||
|
|
||||||
Also double check that your changes are actively reflected in the schema so that client apis are generated accurately.
|
Also double check that your changes are actively reflected in the schema so that client apis are generated accurately.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
!!! info
|
<!-- prettier-ignore-start -->
|
||||||
The dev setup is a little messy as this application combines the best (at least in my opinion) of both Django and Vue.js.
|
!!! info "Development Setup"
|
||||||
|
The dev setup is a little messy as this application combines the best (at least in my opinion) of both Django and Vue.js.
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
|
||||||
### Devcontainer Setup
|
### Devcontainer Setup
|
||||||
|
|
||||||
@@ -30,10 +32,17 @@ populated from default values.
|
|||||||
|
|
||||||
### Vue.js
|
### Vue.js
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
|
!!! warning "Feature Freeze"
|
||||||
|
With the exception of bug fixes, no changes will be accepted on the legacy `vue` front-end.
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
|
||||||
Most new frontend pages are build using [Vue.js](https://vuejs.org/).
|
Most new frontend pages are build using [Vue.js](https://vuejs.org/).
|
||||||
|
|
||||||
In order to work on these pages, you will have to install a Javascript package manager of your choice. The following examples use yarn.
|
In order to work on these pages, you will have to install a Javascript package manager of your choice. The following examples use yarn.
|
||||||
|
|
||||||
In the `vue` folder run `yarn install` to install the dependencies. After that you can use `yarn serve` to start the development server,
|
In the `vue` folder run `yarn install` followed by `yarn build` to install and build the legacy front-end.
|
||||||
and proceed to test your changes. If you do not wish to work on those pages, but instead want the application to work properly during
|
In the `vue3` folder run `yarn install` followed by `yarn build` to install and build the new front-end.
|
||||||
development, run `yarn build` to build the frontend pages once.
|
|
||||||
|
After that you can use `yarn serve` from the `vue3` folder to start the development server, and proceed to test your changes.
|
||||||
|
If you do not wish to work on those pages, but instead want the application to work properly during development, run `yarn build` to build the frontend pages once.
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ You can simply register an account and then follow these steps to add translatio
|
|||||||
3. Select Tandoor and on the top-right hand corner, select `Watch project Tandoor` (click on `Not watching`).
|
3. Select Tandoor and on the top-right hand corner, select `Watch project Tandoor` (click on `Not watching`).
|
||||||
4. Go back to the dashboard. It now shows you the relevant translations for your languages. Click on the pencil icon to get started.
|
4. Go back to the dashboard. It now shows you the relevant translations for your languages. Click on the pencil icon to get started.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! info "Creating a new language"
|
!!! info "Creating a new language"
|
||||||
To create a new language you must first select Tandoor (the project) and then a component.
|
To create a new language you must first select Tandoor (the project) and then a component.
|
||||||
Here you will have the option to add the language. Afterwards you can also simply add it to the other components as well.
|
Here you will have the option to add the language. Afterwards you can also simply add it to the other components as well.
|
||||||
Once a new language is (partially) finished let me know on GitHub so I can add it to the language-switcher in Tandoor itself.
|
Once a new language is (partially) finished let me know on GitHub so I can add it to the language-switcher in Tandoor itself.
|
||||||
|
|
||||||
There is also [a lot of documentation](https://docs.weblate.org/en/latest/user/translating.html) available from Weblate directly.
|
There is also [a lot of documentation](https://docs.weblate.org/en/latest/user/translating.html) available from Weblate directly.
|
||||||
|
|
||||||
|
|||||||
@@ -27,19 +27,19 @@ VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=esbenp.
|
|||||||
|
|
||||||
<!-- prettier-ignore -->
|
<!-- prettier-ignore -->
|
||||||
!!! hint
|
!!! hint
|
||||||
Adding a comma at the end of a list will trigger yapf to put each element of the list on a new line
|
Adding a comma at the end of a list will trigger yapf to put each element of the list on a new line
|
||||||
|
|
||||||
## VSCode Tasks
|
## VSCode Tasks
|
||||||
|
|
||||||
There are a number of built in tasks that are available. Here are a few of the key ones:
|
There are a number of built in tasks that are available. Here are a few of the key ones:
|
||||||
|
|
||||||
- `Setup Dev Server` - Runs all the prerequisite steps so that the dev server can be run inside VSCode.
|
- `Setup Dev Server` - Runs all the prerequisite steps so that the dev server can be run inside VSCode.
|
||||||
- `Setup Tests` - Runs all prerequisites so tests can be run inside VSCode.
|
- `Setup Tests` - Runs all prerequisites so tests can be run inside VSCode.
|
||||||
|
|
||||||
Once these are run, you should be able to run/debug a django server in VSCode as well as run/debug tests directly through VSCode.
|
Once these are run, you should be able to run/debug a django server in VSCode as well as run/debug tests directly through VSCode.
|
||||||
There are also a few other tasks specified in case you have specific development needs:
|
There are also a few other tasks specified in case you have specific development needs:
|
||||||
|
|
||||||
- `Run Dev Server` - Runs a django development server not connected to VSCode.
|
- `Run Dev Server` - Runs a django development server not connected to VSCode.
|
||||||
- `Run all pytests` - Runs all the pytests outside of VSCode.
|
- `Run all pytests` - Runs all the pytests outside of VSCode.
|
||||||
- `Yarn Serve` - Runs development Vue.js server not connected to VSCode. Useful if you want to make Vue changes and see them in realtime.
|
- `Yarn Serve` - Runs development Vue.js server not connected to VSCode. Useful if you want to make Vue changes and see them in realtime.
|
||||||
- `Serve Documentation` - Runs a documentation server. Useful if you want to see how changes to documentation show up.
|
- `Serve Documentation` - Runs a documentation server. Useful if you want to see how changes to documentation show up.
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
Besides the normal django username and password authentication this application supports multiple
|
Besides the normal django username and password authentication this application supports multiple
|
||||||
methods of central account management and authentication.
|
methods of central account management and authentication.
|
||||||
|
|
||||||
## Allauth
|
## Allauth
|
||||||
[Django Allauth](https://django-allauth.readthedocs.io/en/latest/index.html) is an awesome project that
|
|
||||||
|
[Django Allauth](https://django-allauth.readthedocs.io/en/latest/index.html) is an awesome project that
|
||||||
allows you to use a [huge number](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) of different
|
allows you to use a [huge number](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) of different
|
||||||
authentication providers.
|
authentication providers.
|
||||||
|
|
||||||
They basically explain everything in their documentation, but the following is a short overview on how to get started.
|
They basically explain everything in their documentation, but the following is a short overview on how to get started.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning "Public Providers"
|
!!! warning "Public Providers"
|
||||||
If you choose Google, Github or any other publicly available service as your authentication provider anyone
|
If you choose Google, Github or any other publicly available service as your authentication provider anyone
|
||||||
with an account on that site can create an account on your installation.
|
with an account on that site can create an account on your installation.
|
||||||
A new account does not have any permission but it is still **not recommended** to give public access to
|
A new account does not have any permission but it is still **not recommended** to give public access to
|
||||||
your installation.
|
your installation.
|
||||||
|
|
||||||
Choose a provider from the [list](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) and install it using the environment variable `SOCIAL_PROVIDERS` as shown
|
Choose a provider from the [list](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) and install it using the environment variable `SOCIAL_PROVIDERS` as shown
|
||||||
in the example below.
|
in the example below.
|
||||||
@@ -23,29 +25,31 @@ When at least one social provider is set up, the social login sign in buttons sh
|
|||||||
SOCIAL_PROVIDERS=allauth.socialaccount.providers.openid_connect,allauth.socialaccount.providers.nextcloud
|
SOCIAL_PROVIDERS=allauth.socialaccount.providers.openid_connect,allauth.socialaccount.providers.nextcloud
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning "Formatting"
|
!!! warning "Formatting"
|
||||||
The exact formatting is important so make sure to follow the steps explained here!
|
The exact formatting is important so make sure to follow the steps explained here!
|
||||||
|
|
||||||
### Configuration, via environment
|
### Configuration, via environment
|
||||||
|
|
||||||
Depending on your authentication provider you **might need** to configure it.
|
Depending on your authentication provider you **might need** to configure it.
|
||||||
This needs to be done through the settings system. To make the system flexible (allow multiple providers) and to
|
This needs to be done through the settings system. To make the system flexible (allow multiple providers) and to
|
||||||
not require another file to be mounted into the container the configuration ins done through a single
|
not require another file to be mounted into the container the configuration ins done through a single
|
||||||
environment variable. The downside of this approach is that the configuration needs to be put into a single line
|
environment variable. The downside of this approach is that the configuration needs to be put into a single line
|
||||||
as environment files loaded by docker compose don't support multiple lines for a single variable.
|
as environment files loaded by docker compose don't support multiple lines for a single variable.
|
||||||
|
|
||||||
The line data needs to either be in json or as Python dictionary syntax.
|
The line data needs to either be in json or as Python dictionary syntax.
|
||||||
|
|
||||||
Take the example configuration from the allauth docs, fill in your settings and then inline the whole object
|
Take the example configuration from the allauth docs, fill in your settings and then inline the whole object
|
||||||
(you can use a service like [www.freeformatter.com](https://www.freeformatter.com/json-formatter.html) for formatting).
|
(you can use a service like [www.freeformatter.com](https://www.freeformatter.com/json-formatter.html) for formatting).
|
||||||
Assign it to the additional `SOCIALACCOUNT_PROVIDERS` variable.
|
Assign it to the additional `SOCIALACCOUNT_PROVIDERS` variable.
|
||||||
|
|
||||||
|
|
||||||
The example below is for a generic OIDC provider with PKCE enabled. Most values need to be customized for your specifics!
|
The example below is for a generic OIDC provider with PKCE enabled. Most values need to be customized for your specifics!
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
SOCIALACCOUNT_PROVIDERS = "{ 'openid_connect': { 'OAUTH_PKCE_ENABLED': True, 'APPS': [ { 'provider_id': 'oidc', 'name': 'My-IDM', 'client_id': 'my_client_id', 'secret': 'my_client_secret', 'settings': { 'server_url': 'https://idm.example.com/oidc/recipes' } } ] } }"
|
SOCIALACCOUNT_PROVIDERS = "{ 'openid_connect': { 'OAUTH_PKCE_ENABLED': True, 'APPS': [ { 'provider_id': 'oidc', 'name': 'My-IDM', 'client_id': 'my_client_id', 'secret': 'my_client_secret', 'settings': { 'server_url': 'https://idm.example.com/oidc/recipes' } } ] } }"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! success "Improvements ?"
|
!!! success "Improvements ?"
|
||||||
There are most likely ways to achieve the same goal but with a cleaner or simpler system.
|
There are most likely ways to achieve the same goal but with a cleaner or simpler system.
|
||||||
If you know such a way feel free to let me know.
|
If you know such a way feel free to let me know.
|
||||||
@@ -62,16 +66,19 @@ Use your superuser account to configure your authentication backend by opening t
|
|||||||
Now the provider is configured and you should be able to sign up and sign in using the provider.
|
Now the provider is configured and you should be able to sign up and sign in using the provider.
|
||||||
Use the superuser account to grant permissions to the newly created users, or enable default access via `SOCIAL_DEFAULT_ACCESS` & `SOCIAL_DEFAULT_GROUP`.
|
Use the superuser account to grant permissions to the newly created users, or enable default access via `SOCIAL_DEFAULT_ACCESS` & `SOCIAL_DEFAULT_GROUP`.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! info "WIP"
|
!!! info "WIP"
|
||||||
I do not have a ton of experience with using various single signon providers and also cannot test all of them.
|
I do not have a ton of experience with using various single signon providers and also cannot test all of them.
|
||||||
If you have any Feedback or issues let me know.
|
If you have any Feedback or issues let me know.
|
||||||
|
|
||||||
### Third-party authentication example
|
### Third-party authentication example
|
||||||
|
|
||||||
Keycloak is a popular IAM solution and integration is straight forward thanks to Django Allauth. This example can also be used as reference for other third-party authentication solutions, as documented by Allauth.
|
Keycloak is a popular IAM solution and integration is straight forward thanks to Django Allauth. This example can also be used as reference for other third-party authentication solutions, as documented by Allauth.
|
||||||
|
|
||||||
At Keycloak, create a new client and assign a `Client-ID`, this client comes with a `Secret-Key`. Both values are required later on. Make sure to define the correct Redirection-URL for the service, for example `https://tandoor.example.com/*`. Depending on your Keycloak setup, you need to assign roles and groups to grant access to the service.
|
At Keycloak, create a new client and assign a `Client-ID`, this client comes with a `Secret-Key`. Both values are required later on. Make sure to define the correct Redirection-URL for the service, for example `https://tandoor.example.com/*`. Depending on your Keycloak setup, you need to assign roles and groups to grant access to the service.
|
||||||
|
|
||||||
To enable Keycloak as a sign in option, set those variables to define the social provider and specify its configuration:
|
To enable Keycloak as a sign in option, set those variables to define the social provider and specify its configuration:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
SOCIAL_PROVIDERS=allauth.socialaccount.providers.openid_connect
|
SOCIAL_PROVIDERS=allauth.socialaccount.providers.openid_connect
|
||||||
SOCIALACCOUNT_PROVIDERS='{"openid_connect":{"APPS":[{"provider_id":"keycloak","name":"Keycloak","client_id":"KEYCLOAK_CLIENT_ID","secret":"KEYCLOAK_CLIENT_SECRET","settings":{"server_url":"https://auth.example.org/realms/KEYCLOAK_REALM/.well-known/openid-configuration"}}]}}
|
SOCIALACCOUNT_PROVIDERS='{"openid_connect":{"APPS":[{"provider_id":"keycloak","name":"Keycloak","client_id":"KEYCLOAK_CLIENT_ID","secret":"KEYCLOAK_CLIENT_SECRET","settings":{"server_url":"https://auth.example.org/realms/KEYCLOAK_REALM/.well-known/openid-configuration"}}]}}
|
||||||
@@ -81,7 +88,8 @@ SOCIALACCOUNT_PROVIDERS='{"openid_connect":{"APPS":[{"provider_id":"keycloak","n
|
|||||||
You are now able to sign in using Keycloak after a restart of the service.
|
You are now able to sign in using Keycloak after a restart of the service.
|
||||||
|
|
||||||
### Linking accounts
|
### Linking accounts
|
||||||
To link an account to an already existing normal user go to the settings page of the user and link it.
|
|
||||||
|
To link an account to an already existing normal user go to the settings page of the user and link it.
|
||||||
Here you can also unlink your account if you no longer want to use a social login method.
|
Here you can also unlink your account if you no longer want to use a social login method.
|
||||||
|
|
||||||
## LDAP
|
## LDAP
|
||||||
@@ -89,13 +97,16 @@ Here you can also unlink your account if you no longer want to use a social logi
|
|||||||
LDAP authentication can be enabled in the `.env` file by setting `LDAP_AUTH=1`.
|
LDAP authentication can be enabled in the `.env` file by setting `LDAP_AUTH=1`.
|
||||||
If set, users listed in the LDAP instance will be able to sign in without signing up.
|
If set, users listed in the LDAP instance will be able to sign in without signing up.
|
||||||
These variables must be set to configure the connection to the LDAP instance:
|
These variables must be set to configure the connection to the LDAP instance:
|
||||||
|
|
||||||
```
|
```
|
||||||
AUTH_LDAP_SERVER_URI=ldap://ldap.example.org:389
|
AUTH_LDAP_SERVER_URI=ldap://ldap.example.org:389
|
||||||
AUTH_LDAP_BIND_DN=uid=admin,ou=users,dc=example,dc=org
|
AUTH_LDAP_BIND_DN=uid=admin,ou=users,dc=example,dc=org
|
||||||
AUTH_LDAP_BIND_PASSWORD=adminpassword
|
AUTH_LDAP_BIND_PASSWORD=adminpassword
|
||||||
AUTH_LDAP_USER_SEARCH_BASE_DN=ou=users,dc=example,dc=org
|
AUTH_LDAP_USER_SEARCH_BASE_DN=ou=users,dc=example,dc=org
|
||||||
```
|
```
|
||||||
|
|
||||||
Additional optional variables:
|
Additional optional variables:
|
||||||
|
|
||||||
```
|
```
|
||||||
AUTH_LDAP_USER_SEARCH_FILTER_STR=(uid=%(user)s)
|
AUTH_LDAP_USER_SEARCH_FILTER_STR=(uid=%(user)s)
|
||||||
AUTH_LDAP_USER_ATTR_MAP={'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}
|
AUTH_LDAP_USER_ATTR_MAP={'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}
|
||||||
@@ -107,11 +118,13 @@ AUTH_LDAP_TLS_CACERTFILE=/etc/ssl/certs/own-ca.pem
|
|||||||
|
|
||||||
## External Authentication
|
## External Authentication
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning "Security Impact"
|
!!! warning "Security Impact"
|
||||||
If you just set `REMOTE_USER_AUTH=1` without any additional configuration, _anybody_ can authenticate with _any_ username!
|
If you just set `REMOTE_USER_AUTH=1` without any additional configuration, _anybody_ can authenticate with _any_ username!
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! Info "Community Contributed Tutorial"
|
!!! Info "Community Contributed Tutorial"
|
||||||
This tutorial was provided by a community member. We are not able to provide any support! Please only use, if you know what you are doing!
|
This tutorial was provided by a community member. We are not able to provide any support! Please only use, if you know what you are doing!
|
||||||
|
|
||||||
In order use external authentication (i.e. using a proxy auth like Authelia, Authentik, etc.) you will need to:
|
In order use external authentication (i.e. using a proxy auth like Authelia, Authentik, etc.) you will need to:
|
||||||
|
|
||||||
@@ -121,6 +134,7 @@ In order use external authentication (i.e. using a proxy auth like Authelia, Aut
|
|||||||
Using any of the examples above will automatically generate a configuration file inside a docker volume.
|
Using any of the examples above will automatically generate a configuration file inside a docker volume.
|
||||||
Use `docker volume inspect recipes_nginx` to find out where your volume is stored.
|
Use `docker volume inspect recipes_nginx` to find out where your volume is stored.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning "Configuration File Volume"
|
!!! warning "Configuration File Volume"
|
||||||
The nginx config volume is generated when the container is first run. You can change the volume to a bind mount in the
|
The nginx config volume is generated when the container is first run. You can change the volume to a bind mount in the
|
||||||
`docker-compose.yml`, but then you will need to manually create it. See section `Volumes vs Bind Mounts` below
|
`docker-compose.yml`, but then you will need to manually create it. See section `Volumes vs Bind Mounts` below
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning
|
!!! warning
|
||||||
Automations are currently in a beta stage. They work pretty stable but if I encounter any
|
Automations are currently in a beta stage. They work pretty stable but if I encounter any
|
||||||
issues while working on them, I might change how they work breaking existing automations.
|
issues while working on them, I might change how they work breaking existing automations.
|
||||||
I will try to avoid this and am pretty confident it won't happen.
|
I will try to avoid this and am pretty confident it won't happen.
|
||||||
|
|
||||||
Automations allow Tandoor to automatically perform certain tasks, especially when importing recipes, that
|
Automations allow Tandoor to automatically perform certain tasks, especially when importing recipes, that
|
||||||
would otherwise have to be done manually. Currently, the following automations are supported.
|
would otherwise have to be done manually. Currently, the following automations are supported.
|
||||||
@@ -45,10 +46,11 @@ ChatGPT and similiar LLMs are also useful for creating RegEx patterns:
|
|||||||
`ChatGPT please create a Regex expression in the format of re.sub(<parameter 2>, <parameter 3>, <description>, count=1)
|
`ChatGPT please create a Regex expression in the format of re.sub(<parameter 2>, <parameter 3>, <description>, count=1)
|
||||||
that will change the string <example string here> into the string <desired result here>`
|
that will change the string <example string here> into the string <desired result here>`
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! info
|
!!! info
|
||||||
In order to prevent denial of service attacks on the RegEx engine the number of replace automations
|
In order to prevent denial of service attacks on the RegEx engine the number of replace automations
|
||||||
and the length of the inputs that are processed are limited. Those limits should never be reached
|
and the length of the inputs that are processed are limited. Those limits should never be reached
|
||||||
during normal usage.
|
during normal usage.
|
||||||
|
|
||||||
## Instruction Replace, Title Replace, Food Replace & Unit Replace
|
## Instruction Replace, Title Replace, Food Replace & Unit Replace
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning
|
!!! warning
|
||||||
Connectors are currently in a beta stage.
|
Connectors are currently in a beta stage.
|
||||||
|
|
||||||
@@ -6,6 +7,7 @@
|
|||||||
Connectors are a powerful add-on component to TandoorRecipes.
|
Connectors are a powerful add-on component to TandoorRecipes.
|
||||||
They allow for certain actions to be translated to api calls to external services.
|
They allow for certain actions to be translated to api calls to external services.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! danger
|
!!! danger
|
||||||
In order for this application to push data to external providers it needs to store authentication information.
|
In order for this application to push data to external providers it needs to store authentication information.
|
||||||
Please use read only/separate accounts or app passwords wherever possible.
|
Please use read only/separate accounts or app passwords wherever possible.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
The original intend of this application was to provide a search interface to my large collection of PDF scans of recipes.
|
The original intend of this application was to provide a search interface to my large collection of PDF scans of recipes.
|
||||||
This feature is now called External recipes.
|
This feature is now called External recipes.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! info
|
!!! info
|
||||||
Internal recipes are stored in a structured manner inside the database. They can be displayed using the standardized
|
Internal recipes are stored in a structured manner inside the database. They can be displayed using the standardized
|
||||||
interface and support features like shopping lists, scaling and steps.
|
interface and support features like shopping lists, scaling and steps.
|
||||||
@@ -12,76 +13,87 @@ Lastly you will need to sync with the external path and import recipes you desir
|
|||||||
|
|
||||||
## Storage
|
## Storage
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! danger
|
!!! danger
|
||||||
In order for this application to retrieve data from external providers it needs to store authentication information.
|
In order for this application to retrieve data from external providers it needs to store authentication information.
|
||||||
Please use read only/separate accounts or app passwords wherever possible.
|
Please use read only/separate accounts or app passwords wherever possible.
|
||||||
There are better ways to do this but they are currently not implemented
|
There are better ways to do this but they are currently not implemented
|
||||||
|
|
||||||
A `Storage Backend` is a remote storage location where files are **read** from.
|
A `Storage Backend` is a remote storage location where files are **read** from.
|
||||||
To add a new backend click on `username >> External Recipes >> Manage External Storage >> the + next to Storage Backend List`.
|
To add a new backend click on `username >> External Recipes >> Manage External Storage >> the + next to Storage Backend List`.
|
||||||
There click the plus button.
|
There click the plus button.
|
||||||
|
|
||||||
The basic configuration is the same for all providers.
|
The basic configuration is the same for all providers.
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
|----------|-------|
|
| ------ | -------------------------------------------------------------------- |
|
||||||
| Name | Your identifier for this storage source, can be everything you want. |
|
| Name | Your identifier for this storage source, can be everything you want. |
|
||||||
| Method | The desired method. |
|
| Method | The desired method. |
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! success
|
!!! success
|
||||||
Only the providers listed below are currently implemented. If you need anything else feel free to open
|
Only the providers listed below are currently implemented. If you need anything else feel free to open
|
||||||
an issue or pull request.
|
an issue or pull request.
|
||||||
|
|
||||||
### Local
|
### Local
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! info
|
!!! info
|
||||||
There is currently no way to upload files through the webinterface. This is a feature that might be added later.
|
There is currently no way to upload files through the webinterface. This is a feature that might be added later.
|
||||||
|
|
||||||
The local provider does not need any configuration (username, password, token or URL).
|
The local provider does not need any configuration (username, password, token or URL).
|
||||||
For the monitor you will need to define a valid path on your host system. (Path)
|
For the monitor you will need to define a valid path on your host system. (Path)
|
||||||
The Path depends on your setup and can be both relative and absolute.
|
The Path depends on your setup and can be both relative and absolute.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning "Volume"
|
!!! warning "Volume"
|
||||||
By default no data other than the mediafiles and the database is persisted. If you use the local provider
|
By default no data other than the mediafiles and the database is persisted. If you use the local provider
|
||||||
make sure to mount the path you choose to monitor to your host system in order to keep it persistent.
|
make sure to mount the path you choose to monitor to your host system in order to keep it persistent.
|
||||||
|
|
||||||
#### Docker
|
#### Docker
|
||||||
|
|
||||||
If you use docker the default directory is `/opt/recipes/`.
|
If you use docker the default directory is `/opt/recipes/`.
|
||||||
add
|
add
|
||||||
|
|
||||||
```
|
```
|
||||||
- ./externalfiles:/opt/recipes/externalfiles
|
- ./externalfiles:/opt/recipes/externalfiles
|
||||||
```
|
```
|
||||||
|
|
||||||
to your docker-compose.yml file under the `web_recipes >> volumes` section. This will create a folder in your docker directory named `externalfiles` under which you could choose to store external pdfs (you could of course store them anywhere, just change `./externalfiles` to your preferred location).
|
to your docker-compose.yml file under the `web_recipes >> volumes` section. This will create a folder in your docker directory named `externalfiles` under which you could choose to store external pdfs (you could of course store them anywhere, just change `./externalfiles` to your preferred location).
|
||||||
save the docker-compose.yml and restart your docker container.
|
save the docker-compose.yml and restart your docker container.
|
||||||
|
|
||||||
### Dropbox
|
### Dropbox
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
|----------|-------|
|
| -------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||||
| Username | Dropbox username |
|
| Username | Dropbox username |
|
||||||
| Token | Dropbox API Token. Can be found [here](https://dropbox.github.io/dropbox-api-v2-explorer/#auth_token/from_oauth1)|
|
| Token | Dropbox API Token. Can be found [here](https://dropbox.github.io/dropbox-api-v2-explorer/#auth_token/from_oauth1) |
|
||||||
|
|
||||||
### Nextcloud
|
### Nextcloud
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
!!! warning "Path"
|
!!! warning "Path"
|
||||||
It appears that the correct webdav path varies from installation to installation (for whatever reason).
|
It appears that the correct webdav path varies from installation to installation (for whatever reason).
|
||||||
In the Nextcloud webinterface click the `Settings` button in the bottom left corner, there your WebDav Url will be displayed.
|
In the Nextcloud webinterface click the `Settings` button in the bottom left corner, there your WebDav Url will be displayed.
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
|----------|-------|
|
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| Username | Nextcloud username |
|
| Username | Nextcloud username |
|
||||||
| Password | Nextcloud app password |
|
| Password | Nextcloud app password |
|
||||||
| Url | Nextcloud Server URL (e.g. `https://cloud.mydomain.com`) |
|
| Url | Nextcloud Server URL (e.g. `https://cloud.mydomain.com`) |
|
||||||
| Path | (optional) webdav path (e.g. `/remote.php/dav/files/vabene1111`). If no path is supplied `/remote.php/dav/files/` plus your username will be used. |
|
| Path | (optional) webdav path (e.g. `/remote.php/dav/files/vabene1111`). If no path is supplied `/remote.php/dav/files/` plus your username will be used. |
|
||||||
|
|
||||||
## Adding External Recipes
|
## Adding External Recipes
|
||||||
To add a new path from your Storage backend to the sync list, go to `username >> External Recipes` and
|
|
||||||
|
To add a new path from your Storage backend to the sync list, go to `username >> External Recipes` and
|
||||||
select the storage backend you want to use.
|
select the storage backend you want to use.
|
||||||
Then enter the path you want to monitor starting at the storage root (e.g. `/Folder/RecipesFolder`, or `/opt/recipes/externalfiles' in the docker example above) and save it.
|
Then enter the path you want to monitor starting at the storage root (e.g. `/Folder/RecipesFolder`, or `/opt/recipes/externalfiles' in the docker example above) and save it.
|
||||||
|
|
||||||
## Syncing Data
|
## Syncing Data
|
||||||
|
|
||||||
To sync the recipes app with the storage backends press `Sync now` under `username >> External Recipes`
|
To sync the recipes app with the storage backends press `Sync now` under `username >> External Recipes`
|
||||||
|
|
||||||
## Discovered Recipes
|
## Discovered Recipes
|
||||||
All files found by the sync can be found under `Manage Data >> Discovered recipes`.
|
|
||||||
|
All files found by the sync can be found under `Manage Data >> Discovered recipes`.
|
||||||
There you can either import all at once without modifying them or import one by one, adding tags while importing.
|
There you can either import all at once without modifying them or import one by one, adding tags while importing.
|
||||||
|
|||||||
Reference in New Issue
Block a user