Contributors mailing list archives

contributors@odoo-community.org

Avatar

Re: use "%d" in nginx with "dbfilter_from_header" module

by
Coop IT Easy SCRL fs, Rémy Taymans
- 01/01/2021 10:29:14
Dear Yves,

The value of the header X-Odoo-dbfilter should be a regular expression matching your database name. (https://github.com/OCA/server-tools/blob/13.0/dbfilter_from_header/override.py#L20)

The match performed by Odoo using the regular expression given in the dbfilter header ignore the url you are using for accessing the odoo instance.

Considering that the database is named according to the subdomain, the following nginx config should work :

  server_name foo.example.org;
  ...
  proxy_set_header X-Odoo-dbfilter foo;

This will match any database that *begins* with `foo`.

If the server_name of your nginx configuration file consist of something like :

  server_name *.example.org;

Then you should consider using a regular expression as a server_name value. With this regular expression, extract the subdomain in a variable that can be used as a value for the proxy header.

  server_name ~^(?<database>.+)\.example\.org$;
  ...
  proxy_set_header X-Odoo-dbfilter $database;

To get more info about regular expression in nginx configuration file, see : http://nginx.org/en/docs/http/server_names.html#regex_names

I have not tested the code given in this email, so use it with caution.  :)

Regards,

--
Rémy Taymans @ Coop IT Easy
+32 493 02 69 85 - <https://github.com/coopiteasy>
<https://coopiteasy.be>

Quoting Yves Goldberg (2020-12-31 11:02:05)
> hi all,
> How may I pass the equivalent of "dbfilter = *^%d.**" (odoo conf file option) to a nginx proxy_set_header for dbfilter (using module dbfilter_from_header [1]  (odoo 13)?
> I tried to use "<subdomain>" or $subdomain in my expression but It doesn't get substituted before being sent to odoo.
> i.e. unsuccessfully tried:
> proxy_set_header X-Odoo-dbfilter \b(?<subdomain>.*)\b\S+;
> proxy_set_header X-Odoo-dbfilter \b(?\<subdomain\>.*)\b\S+;  proxy_set_header X-Odoo-dbfilter \b(?\$subdomain.*)\b\S+;  proxy_set_header X-Odoo-dbfilter ^%d.*;
>
> anyone can help?
> the use case is that I would like to set this dbfilter for only some defined range of subdomains.
> TIA
>
> --  Yves Goldberg*    o   doo  * |  Official Partner   - OCA delegate      Open Source ERP, CRM & CMS         Chat with me [2]      T    +972 (3) 720 8818*  M   +972 (55) 966 1405    T  +32 (2) 588 2500       None [3] www.ygol.com       None [4]    None [5]       None [6]       None [7]     --

Reference