Compare commits

...

2 Commits

Author SHA1 Message Date
3a894972f1 doc: enable json highlighting in reference examples
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
2024-03-29 09:36:36 +01:00
274bef13d8 feat: match proxy's from on whole targeted url
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
2024-03-29 09:21:01 +01:00
3 changed files with 86 additions and 60 deletions

View File

@ -22,9 +22,8 @@ Où:
- `"<subject>"` est une chaîne de caractère arbitraire ayant pour objectif d'identifier de manière unique l'utilisateur associé au jeton; - `"<subject>"` est une chaîne de caractère arbitraire ayant pour objectif d'identifier de manière unique l'utilisateur associé au jeton;
- `"<role>"` peut prendre une des deux valeurs `reader` ou `writer` correspondant aux droits suivants respectifs: - `"<role>"` peut prendre une des deux valeurs `reader` ou `writer` correspondant aux droits suivants respectifs:
- droit en lecture sur l'ensemble des entités (proxy, layer); - droit en lecture sur l'ensemble des entités (proxy, layer);
- droit en lecture ET en écriture sur l'ensemble des entités. - droit en lecture ET en écriture sur l'ensemble des entités.
## Points d'entrée ## Points d'entrée
@ -34,29 +33,29 @@ Créer un nouveau proxy
#### Exemple de corps de requête #### Exemple de corps de requête
```json5 ```json
{ {
"name": "myproxy", // OBLIGATOIRE - Nom du proxy "name": "myproxy", // OBLIGATOIRE - Nom du proxy
"to": "https://www.cadoles.com", // OBLIGATOIRE - Site distant ciblé par le proxy "to": "https://www.cadoles.com", // OBLIGATOIRE - Site distant ciblé par le proxy
"from": ["*"] // OPTIONNEL - Liste de patrons de filtrage associés au proxy "from": ["*"] // OPTIONNEL - Liste de patrons de filtrage associés au proxy
} }
``` ```
#### Exemple de résultat #### Exemple de résultat
```json5 ```json
{ {
"data": { "data": {
"proxy": { "proxy": {
"name": "myproxy", "name": "myproxy",
"weight": 0, "weight": 0,
"enabled": false, "enabled": false,
"to": "https://www.cadoles.com", "to": "https://www.cadoles.com",
"from": ["*"], "from": ["*"],
"createdAt": "2018-12-10T13:45:00.000Z", "createdAt": "2018-12-10T13:45:00.000Z",
"updatedAt": "2018-12-10T13:45:00.000Z" "updatedAt": "2018-12-10T13:45:00.000Z"
}
} }
}
} }
``` ```
@ -74,19 +73,19 @@ Récupérer les informations complètes sur un proxy
#### Exemple de résultat #### Exemple de résultat
```json5 ```json
{ {
"data": { "data": {
"proxy": { "proxy": {
"name": "myproxy", "name": "myproxy",
"weight": 0, "weight": 0,
"enabled": false, "enabled": false,
"to": "https://www.cadoles.com", "to": "https://www.cadoles.com",
"from": ["*"], "from": ["*"],
"createdAt": "2018-12-10T13:45:00.000Z", "createdAt": "2018-12-10T13:45:00.000Z",
"updatedAt": "2018-12-10T13:45:00.000Z" "updatedAt": "2018-12-10T13:45:00.000Z"
}
} }
}
} }
``` ```
@ -100,30 +99,30 @@ Modifier un proxy
#### Exemple de corps de requête #### Exemple de corps de requête
```json5 ```json
{ {
"to": "https://www.cadoles.com", // OPTIONNEL - Site distant ciblé par le proxy "to": "https://www.cadoles.com", // OPTIONNEL - Site distant ciblé par le proxy
"from": ["mylocalproxydomain:*"], // OPTIONNEL - Liste de patrons de filtrage associés au proxy "from": ["mylocalproxydomain:*"], // OPTIONNEL - Liste de patrons de filtrage associés au proxy
"weight": 100, // OPTIONNEL - Poids à associer au proxy "weight": 100, // OPTIONNEL - Poids à associer au proxy
"enabled": true, // OPTIONNEL - Activer/désactiver le proxy "enabled": true // OPTIONNEL - Activer/désactiver le proxy
} }
``` ```
#### Exemple de résultat #### Exemple de résultat
```json5 ```json
{ {
"data": { "data": {
"proxy": { "proxy": {
"name": "myproxy", "name": "myproxy",
"weight": 100, "weight": 100,
"enabled": true, "enabled": true,
"to": "https://www.cadoles.com", "to": "https://www.cadoles.com",
"from": ["mylocalproxydomain:*"], "from": ["mylocalproxydomain:*"],
"createdAt": "2018-12-10T13:45:00.000Z", "createdAt": "2018-12-10T13:45:00.000Z",
"updatedAt": "2020-10-02T15:09:00.000Z" "updatedAt": "2020-10-02T15:09:00.000Z"
}
} }
}
} }
``` ```
@ -141,17 +140,17 @@ Lister les proxies existants
#### Exemple de résultat #### Exemple de résultat
```json5 ```json
{ {
"data": { "data": {
"proxies": [ "proxies": [
{ {
"name": "myproxy", "name": "myproxy",
"weight": 0, "weight": 0,
"enabled": false, "enabled": false
} }
] ]
} }
} }
``` ```
@ -169,11 +168,11 @@ Supprimer le proxy
#### Exemple de résultat #### Exemple de résultat
```json5 ```json
{ {
"data": { "data": {
"proxyName": "myproxy" "proxyName": "myproxy"
} }
} }
``` ```

View File

@ -3,7 +3,6 @@ package director
import ( import (
"context" "context"
"net/http" "net/http"
"net/url"
"sort" "sort"
"forge.cadoles.com/Cadoles/go-proxy" "forge.cadoles.com/Cadoles/go-proxy"
@ -28,12 +27,23 @@ func (d *Director) rewriteRequest(r *http.Request) (*http.Request, error) {
return r, errors.WithStack(err) return r, errors.WithStack(err)
} }
url := getRequestURL(r)
ctx = logger.With(r.Context(), logger.F("url", url.String()))
var match *store.Proxy var match *store.Proxy
MAIN: MAIN:
for _, p := range proxies { for _, p := range proxies {
for _, from := range p.From { for _, from := range p.From {
if matches := wildcard.Match(r.Host, from); !matches { logger.Debug(
ctx, "matching request with proxy's from",
logger.F("from", from),
)
if matches := wildcard.Match(url.String(), from); !matches {
logger.Debug(
ctx, "proxy's from matched",
logger.F("from", from),
)
continue continue
} }

View File

@ -2,6 +2,7 @@ package director
import ( import (
"net/http" "net/http"
"net/url"
"forge.cadoles.com/Cadoles/go-proxy" "forge.cadoles.com/Cadoles/go-proxy"
"forge.cadoles.com/Cadoles/go-proxy/util" "forge.cadoles.com/Cadoles/go-proxy/util"
@ -16,3 +17,19 @@ func createMiddlewareChain(handler http.Handler, middlewares []proxy.Middleware)
return handler return handler
} }
func getRequestURL(r *http.Request) *url.URL {
scheme := "http"
if r.URL.Scheme != "" {
scheme = r.URL.Scheme
}
url := url.URL{
Host: r.Host,
Scheme: scheme,
Path: r.URL.Path,
RawQuery: r.URL.RawQuery,
}
return &url
}