feat: reusable rule engine to prevent memory reallocation
All checks were successful
Cadoles/bouncer/pipeline/pr-develop This commit looks good
All checks were successful
Cadoles/bouncer/pipeline/pr-develop This commit looks good
This commit is contained in:
@ -24,15 +24,15 @@ Bouncer utilise le projet [`expr`](https://expr-lang.org/) comme DSL. En plus de
|
||||
|
||||
#### Communes
|
||||
|
||||
##### `add_header(name string, value string)`
|
||||
##### `add_header(ctx, name string, value string)`
|
||||
|
||||
Ajouter une valeur à un entête HTTP via son nom `name` et sa valeur `value`.
|
||||
|
||||
##### `set_header(name string, value string)`
|
||||
##### `set_header(ctx, name string, value string)`
|
||||
|
||||
Définir la valeur d'un entête HTTP via son nom `name` et sa valeur `value`. La valeur précédente est écrasée.
|
||||
|
||||
##### `del_headers(pattern string)`
|
||||
##### `del_headers(ctx, pattern string)`
|
||||
|
||||
Supprimer un ou plusieurs entêtes HTTP dont le nom correspond au patron `pattern`.
|
||||
|
||||
@ -40,11 +40,11 @@ Le patron est défini par une chaîne comprenant un ou plusieurs caractères `*`
|
||||
|
||||
#### Requête
|
||||
|
||||
##### `set_host(host string)`
|
||||
##### `set_host(ctx, host string)`
|
||||
|
||||
Modifier la valeur de l'entête `Host` de la requête.
|
||||
|
||||
##### `set_url(url string)`
|
||||
##### `set_url(ctx, url string)`
|
||||
|
||||
Modifier l'URL du serveur cible.
|
||||
|
||||
@ -58,7 +58,28 @@ Les règles ont accès aux variables suivantes pendant leur exécution. **Ces do
|
||||
|
||||
#### Requête
|
||||
|
||||
##### `request`
|
||||
##### `vars.original_url`
|
||||
|
||||
L'URL originale, avant réécriture du `Host` par Bouncer.
|
||||
|
||||
```js
|
||||
{
|
||||
scheme: "string", // Schéma HTTP de l'URL
|
||||
opaque: "string", // Données opaque de l'URL
|
||||
user: { // Identifiants d'URL (Basic Auth)
|
||||
username: "",
|
||||
password: ""
|
||||
},
|
||||
host: "string", // Nom d'hôte (<domaine>:<port>) de l'URL
|
||||
path: "string", // Chemin de l'URL (format assaini)
|
||||
rawPath: "string", // Chemin de l'URL (format brut)
|
||||
raw_query: "string", // Variables d'URL (format brut)
|
||||
fragment : "string", // Fragment d'URL (format assaini)
|
||||
raw_fragment : "string" // Fragment d'URL (format brut)
|
||||
}
|
||||
```
|
||||
|
||||
##### `vars.request`
|
||||
|
||||
La requête en cours de traitement.
|
||||
|
||||
@ -67,61 +88,65 @@ La requête en cours de traitement.
|
||||
method: "string", // Méthode HTTP
|
||||
host: "string", // Nom d'hôte (`Host`) associé à la requête
|
||||
url: { // URL associée à la requête sous sa forme structurée
|
||||
"scheme": "string", // Schéma HTTP de l'URL
|
||||
"opaque": "string", // Données opaque de l'URL
|
||||
"user": { // Identifiants d'URL (Basic Auth)
|
||||
"username": "",
|
||||
"password": ""
|
||||
scheme: "string", // Schéma HTTP de l'URL
|
||||
opaque: "string", // Données opaque de l'URL
|
||||
user: { // Identifiants d'URL (Basic Auth)
|
||||
username: "",
|
||||
password: ""
|
||||
},
|
||||
"host": "string", // Nom d'hôte (<domaine>:<port>) de l'URL
|
||||
"path": "string", // Chemin de l'URL (format assaini)
|
||||
"rawPath": "string", // Chemin de l'URL (format brut)
|
||||
"rawQuery": "string", // Variables d'URL (format brut)
|
||||
"fragment" : "string", // Fragment d'URL (format assaini)
|
||||
"rawFragment" : "string" // Fragment d'URL (format brut)
|
||||
host: "string", // Nom d'hôte (<domaine>:<port>) de l'URL
|
||||
path: "string", // Chemin de l'URL (format assaini)
|
||||
rawPath: "string", // Chemin de l'URL (format brut)
|
||||
raw_query: "string", // Variables d'URL (format brut)
|
||||
fragment : "string", // Fragment d'URL (format assaini)
|
||||
raw_fragment : "string" // Fragment d'URL (format brut)
|
||||
},
|
||||
rawUrl: "string", // URL associée à la requête (format assaini)
|
||||
raw_url: "string", // URL associée à la requête (format assaini)
|
||||
proto: "string", // Numéro de version du protocole utilisé
|
||||
protoMajor: "int", // Numéro de version majeure du protocole utilisé
|
||||
protoMinor: "int", // Numéro de version mineur du protocole utilisé
|
||||
proto_major: "int", // Numéro de version majeure du protocole utilisé
|
||||
proto_minor: "int", // Numéro de version mineur du protocole utilisé
|
||||
header: { // Table associative des entêtes HTTP associés à la requête
|
||||
"string": ["string"]
|
||||
},
|
||||
contentLength: "int", // Taille du corps de la requête
|
||||
transferEncoding: ["string"], // MIME-Type(s) d'encodage du corps de la requête
|
||||
content_length: "int", // Taille du corps de la requête
|
||||
transfer_encoding: ["string"], // MIME-Type(s) d'encodage du corps de la requête
|
||||
trailer: { // Table associative des entêtes HTTP associés à la requête, transmises après le corps de la requête
|
||||
"string": ["string"]
|
||||
},
|
||||
remoteAddr: "string", // Adresse du client HTTP à l'origine de la requête
|
||||
requestUri: "string" // URL "brute" associée à la requêtes (avant opérations d'assainissement, utiliser "url" plutôt)
|
||||
remote_addr: "string", // Adresse du client HTTP à l'origine de la requête
|
||||
request_uri: "string" // URL "brute" associée à la requêtes (avant opérations d'assainissement, utiliser "url" plutôt)
|
||||
}
|
||||
```
|
||||
|
||||
#### Réponse
|
||||
|
||||
##### `response`
|
||||
##### `vars.response`
|
||||
|
||||
La réponse en cours de traitement.
|
||||
|
||||
```js
|
||||
{
|
||||
statusCode: "int", // Code de statut de la réponse
|
||||
status_code: "int", // Code de statut de la réponse
|
||||
status: "string", // Message associé au code de statut
|
||||
proto: "string", // Numéro de version du protocole utilisé
|
||||
protoMajor: "int", // Numéro de version majeure du protocole utilisé
|
||||
protoMinor: "int", // Numéro de version mineur du protocole utilisé
|
||||
proto_major: "int", // Numéro de version majeure du protocole utilisé
|
||||
proto_minor: "int", // Numéro de version mineur du protocole utilisé
|
||||
header: { // Table associative des entêtes HTTP associés à la requête
|
||||
"string": ["string"]
|
||||
},
|
||||
contentLength: "int", // Taille du corps de la réponse
|
||||
transferEncoding: ["string"], // MIME-Type(s) d'encodage du corps de la requête
|
||||
content_length: "int", // Taille du corps de la réponse
|
||||
transfer_encoding: ["string"], // MIME-Type(s) d'encodage du corps de la requête
|
||||
trailer: { // Table associative des entêtes HTTP associés à la requête, transmises après le corps de la requête
|
||||
"string": ["string"]
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
##### `request`
|
||||
##### `vars.request`
|
||||
|
||||
_Voir section précédente._
|
||||
|
||||
##### `vars.original_url`
|
||||
|
||||
_Voir section précédente._
|
||||
|
||||
|
Reference in New Issue
Block a user