rougail-tutorials/README.md

331 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- [Summary](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/branch/1.1/README.md)
- [[tutorial v1.1_200] Variable calculation with propertyerror](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_200/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_210~1..v1.1_210))
# [tutorial v1.1_210] Username is mandatory if a password is set
[Read the tutorial "Username is mandatory if a password is set" in the documentation](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#username-is-mandatory-if-a-password-is-set)
## Screenshot
<img src="foxyproxy.png" width=50% height=50% alt="Firefox Proxy setting"/>
## Clone and install
To test this tutorial, you need to download this repository and install Rougail:
```shell
git clone -b 1.1 https://forge.cloud.silique.fr/stove/rougail-tutorials.git
cd rougail-tutorials
python -m venv venv_rougail
. venv_rougail/bin/activate
pip install rougail-cli rougail-output-exporter rougail-output-doc rougail-user-data-yaml
```
Then switch to the tutorial page:
```shell
git switch --detach v1.1_210
```
## Structure
<p>
<a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./">.</a><br/>
├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/">firefox</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/00-proxy.yml">00-proxy.yml</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/10-manual.yml">10-manual.yml</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/20-manual.yml">20-manual.yml</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/30-auto.yml">30-auto.yml</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/40-no_proxy.yml">40-no_proxy.yml</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/50-prompt_authentication.yml">50-prompt_authentication.yml</a><br/>
│   ├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/55-proxy_dns_socks5.yml">55-proxy_dns_socks5.yml</a><br/>
│   └── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./firefox/60-dns_over_https.yml">60-dns_over_https.yml</a><br/>
├── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./foxyproxy/">foxyproxy</a><br/>
│   └── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./foxyproxy/00-foxyproxy.yml">00-foxyproxy.yml</a><br/>
└── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./types/">types</a><br/>
    └── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./types/proxy/">proxy</a><br/>
        └── <a href="https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/./types/proxy/00-type.yml">00-type.yml</a><br/>
<br/><br/></p>
Contents of the foxyproxy/00-foxyproxy.yml file
```yml
%YAML 1.2
---
version: 1.1
proxies:
description: Proxy configuration
_type: leadership
title:
description: Title or Description
mandatory: false
type:
description: Proxy Type
choices:
- HTTP
- HTTPS/SSL
- SOCKS4
- SOCKS5
- PAC URL
- WPAD
- System (use system settings)
- Direct (no proxy)
default: Direct (no proxy)
color:
description: Color
regexp: ^#(?:[0-9a-f]{3}){1,2}$
default:
jinja: >-
#{%- for i in range(6) -%}{{- '0123456789abcdef' | random -}}{%- endfor -%}
description: random color value
auto_save: true
address:
description: IP address, DNS name, server name
type: domainname
params:
allow_ip: true
allow_without_dot: true
default:
description: copy HTTP address if proxy is not "Manual"
variable: firefox.manual.http_proxy.address
propertyerror: false
disabled:
jinja: |-
{{ _.type not in ['HTTP', 'HTTPS/SSL', 'SOCKS4', 'SOCKS5'] }}
return_type: boolean
description: |-
if type not in:
- HTTP
- HTTPS/SSL
- SOCKS4
- SOCKS5
port:
description: Port
type: port
default:
description: copy HTTP port if proxy is not "Manual"
variable: firefox.manual.http_proxy.port
propertyerror: false
disabled:
jinja: |-
{{ _.type not in ['HTTP', 'HTTPS/SSL', 'SOCKS4', 'SOCKS5'] }}
return_type: boolean
description: |-
if type not in:
- HTTP
- HTTPS/SSL
- SOCKS4
- SOCKS5
username:
description: Username
type: unix_user
mandatory:
jinja: |-
{% if _.password is not propertyerror and _.password %}
true
{% else %}
false
{% endif %}
return_type: boolean
description: if a password is set
disabled:
jinja: |-
{{ _.type not in ['HTTP', 'HTTPS/SSL', 'SOCKS4', 'SOCKS5'] }}
return_type: boolean
description: |-
if type not in:
- HTTP
- HTTPS/SSL
- SOCKS4
- SOCKS5
password:
description: Password
type: secret
mandatory: false
disabled:
jinja: |-
{{ _.type not in ['HTTP', 'HTTPS/SSL', 'SOCKS4', 'SOCKS5'] }}
return_type: boolean
description: |-
if type not in:
- HTTP
- HTTPS/SSL
- SOCKS4
- SOCKS5
url:
description: URL
type: web_address
default:
description: copy HTTP address if proxy is "Auto"
variable: firefox.auto
propertyerror: false
disabled:
jinja: |-
{{ _.type not in ['PAC URL', 'WPAD'] }}
return_type: boolean
description: |-
if type is not in:
- PAC URL
- WPAD
...
```
***
### Let's generate the documentation
```shell
rougail -m firefox/ -s Firefox -xn FoxyProxy -xd 0 foxyproxy/ --types types/proxy --modes_level basic standard advanced -o doc
```
[View the documentation file](DOCUMENTATION.md)
***
### Let's generate the changelog
```shell
rougail -m firefox/ -s Firefox -xn FoxyProxy -xd 0 foxyproxy/ --types types/proxy --modes_level basic standard advanced -o doc --doc.contents changelog --doc.changelog.previous_json_file previous.yml
```
[View the changelog file](CHANGELOG.md)
***
## User datas
### Example 1
#### config/01/config.yml
```yml
---
```
***
#### Output
```shell
rougail -m firefox/ -s Firefox -xn FoxyProxy -xd 0 foxyproxy/ --types types/proxy --modes_level basic standard advanced -u yaml -yf config/01/config.yml
```
> [!NOTE]
>
> **Caption:**
> - Variable
> - <span style="color: #B8860B">Default value</span>
Variables:
- :open_file_folder: firefox (Firefox)
- :notebook: proxy_mode (Configure Proxy Access to the Internet): <span style="color: #B8860B">No proxy</span>
- :open_file_folder: dns_over_https (DNS over HTTPS)
- :notebook: enable_dns_over_https (Enable DNS over HTTPS): <span style="color: #B8860B">false</span>
- :open_file_folder: foxyproxy (FoxyProxy)
- :open_file_folder: proxies (Proxy configuration): <span style="color: #B8860B">[]</span>
***
### Example 2
#### config/02/config.yml
```yml
---
foxyproxy:
proxies:
- title: My company
type: HTTP
color: '#66cc66'
address: proxy.company.net
port: 8080
username: one_user
password: P4ssW0rD
- title: An other company
type: HTTP
address: proxy.company.net
port: 8080
```
***
#### Output
```shell
rougail -m firefox/ -s Firefox -xn FoxyProxy -xd 0 foxyproxy/ --types types/proxy --modes_level basic standard advanced -u yaml -yf config/02/config.yml
```
> [!NOTE]
>
> **Caption:**
> - Variable
> - <span style="color: #B8860B">Default value</span>
> - <span style="color: #006400">Modified value</span>
> - (:hourglass_flowing_sand: Original default value)
Variables:
- :open_file_folder: firefox (Firefox)
- :notebook: proxy_mode (Configure Proxy Access to the Internet): <span style="color: #B8860B">No proxy</span>
- :open_file_folder: dns_over_https (DNS over HTTPS)
- :notebook: enable_dns_over_https (Enable DNS over HTTPS): <span style="color: #B8860B">false</span>
- :open_file_folder: foxyproxy (FoxyProxy)
- :open_file_folder: proxies (Proxy configuration)
- :open_file_folder: title (Title or Description)
- :notebook: title (Title or Description): <span style="color: #006400">My company</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: type (Proxy Type): <span style="color: #006400">HTTP</span> ← loaded from the YAML file "config/02/config.yml" (:hourglass_flowing_sand: Direct (no proxy))
- :notebook: color (Color): <span style="color: #006400">#66cc66</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: address (IP address, DNS name, server name): <span style="color: #006400">proxy.company.net</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: port (Port): <span style="color: #006400">8080</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: username (Username): <span style="color: #006400">one_user</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: password (Password): <span style="color: #006400">**********</span> ← loaded from the YAML file "config/02/config.yml"
- :open_file_folder: title (Title or Description)
- :notebook: title (Title or Description): <span style="color: #006400">An other company</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: type (Proxy Type): <span style="color: #006400">HTTP</span> ← loaded from the YAML file "config/02/config.yml" (:hourglass_flowing_sand: Direct (no proxy))
- :notebook: color (Color): <span style="color: #006400">#b530a5</span>
- :notebook: address (IP address, DNS name, server name): <span style="color: #006400">proxy.company.net</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: port (Port): <span style="color: #006400">8080</span> ← loaded from the YAML file "config/02/config.yml"
- :notebook: username (Username): <span style="color: #B8860B">null</span>
- :notebook: password (Password): <span style="color: #B8860B">null</span>
***
### Example 3
#### config/03/config.yml
```yml
---
foxyproxy:
proxies:
- title: My company
type: HTTP
color: '#66cc66'
address: proxy.company.net
port: 8080
password: P4ssW0rD
- title: An other company
type: HTTP
address: proxy.company.net
port: 8080
```
***
#### Output
```shell
rougail -m firefox/ -s Firefox -xn FoxyProxy -xd 0 foxyproxy/ --types types/proxy --modes_level basic standard advanced -u yaml -yf config/03/config.yml
```
> [!CAUTION]
>
> - foxyproxy (FoxyProxy)
> - proxies (Proxy configuration)
> - username (Username): :stop_sign: <span style="color: #C23636">mandatory variable at index "0" but has no value</span>
***
- [[tutorial v1.1_211] redefines the behavior to password mandatory if the user is defined](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_211/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_211~1..v1.1_211))