# Part of Odoo. See LICENSE file for full copyright and licensing details. import argparse import os import secrets import sys import textwrap from pathlib import Path from passlib.hash import pbkdf2_sha512 from . import Command from odoo.tools import config class GenProxyToken(Command): """ Generate and (re)set proxy access token in config file """ 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=f'{Path(sys.argv[0]).name} {self.name}', description=self.__doc__.strip() ) 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')