From bd3c681b991d6932eee992544d17db1d820480f4 Mon Sep 17 00:00:00 2001 From: Christophe Monniez Date: Thu, 21 Apr 2022 08:45:43 +0000 Subject: [PATCH] [IMP] cli: add a command to generate a proxy token This commit adds a `genproxytoken` command to generate and set an access token for the proxy mode in the config file. X-original-commit: 41a7224b46b3b163789257efd4583ef2d74479ba Part-of: odoo/odoo#92195 --- odoo/cli/__init__.py | 1 + odoo/cli/genproxytoken.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 odoo/cli/genproxytoken.py diff --git a/odoo/cli/__init__.py b/odoo/cli/__init__.py index 277e25197e2..2bfeb98a75e 100644 --- a/odoo/cli/__init__.py +++ b/odoo/cli/__init__.py @@ -15,3 +15,4 @@ from . import start from . import populate from . import tsconfig from . import neutralize +from . import genproxytoken diff --git a/odoo/cli/genproxytoken.py b/odoo/cli/genproxytoken.py new file mode 100644 index 00000000000..2d904c53e47 --- /dev/null +++ b/odoo/cli/genproxytoken.py @@ -0,0 +1,35 @@ +import argparse +import os +import secrets +import sys +import textwrap + +from passlib.hash import pbkdf2_sha512 + +from . import Command +from odoo.tools import config + + +class GenProxyToken(Command): + def __init__(self): + self.command_name = "genproxytoken" + + def generate_token(self, length=16): + token = secrets.token_hex(int(length / 2)) + split_size = int(length / 4) + return '-'.join(textwrap.wrap(token, split_size)) + + def run(self, cmdargs): + parser = argparse.ArgumentParser( + prog="%s %s" % (sys.argv[0].split(os.path.sep)[-1], self.command_name), + description="Generate and (re)set proxy access token in config file" + ) + parser.add_argument('-c', '--config', type=str, help="Specify an alternate config file") + parser.add_argument('--token-length', type=int, help="Token Length", default=16) + args, _ = parser.parse_known_args() + if args.config: + config.rcfile = args.config + token = self.generate_token(length=args.token_length) + config['proxy_access_token'] = pbkdf2_sha512.hash(token) + config.save() + sys.stdout.write(f'{token}\n')