core: fixed problems with unset ssl dir for mercurial

This commit is contained in:
RhodeCode Admin 2025-01-08 13:43:00 +01:00
parent a10bc4b2cf
commit 7406c073dc
2 changed files with 202 additions and 214 deletions

View file

@ -35,8 +35,17 @@ from rhodecode import __dbversion__
from rhodecode.model import init_model
from rhodecode.model.user import UserModel
from rhodecode.model.db import (
User, Permission, RhodeCodeUi, RhodeCodeSetting, UserToPerm,
DbMigrateVersion, RepoGroup, UserRepoGroupToPerm, CacheKey, Repository)
User,
Permission,
RhodeCodeUi,
RhodeCodeSetting,
UserToPerm,
DbMigrateVersion,
RepoGroup,
UserRepoGroupToPerm,
CacheKey,
Repository,
)
from rhodecode.model.meta import Session, Base
from rhodecode.model.permission import PermissionModel
from rhodecode.model.repo import RepoModel
@ -52,15 +61,12 @@ def notify(msg):
Notification for migrations messages
"""
ml = len(msg) + (4 * 2)
print((('\n%s\n*** %s ***\n%s' % ('*' * ml, msg, '*' * ml)).upper()))
print((("\n%s\n*** %s ***\n%s" % ("*" * ml, msg, "*" * ml)).upper()))
class DbManage(object):
def __init__(self, log_sql, dbconf, root, tests=False,
SESSION=None, cli_args=None, enc_key=b''):
self.dbname = dbconf.split('/')[-1]
def __init__(self, log_sql, dbconf, root, tests=False, SESSION=None, cli_args=None, enc_key=b""):
self.dbname = dbconf.split("/")[-1]
self.tests = tests
self.root = root
self.dburi = dbconf
@ -72,15 +78,13 @@ class DbManage(object):
# sets .sa .engine
self.init_db(SESSION=SESSION)
self.ask_ok = self.get_ask_ok_func(self.cli_args.get('force_ask'))
self.ask_ok = self.get_ask_ok_func(self.cli_args.get("force_ask"))
def db_exists(self):
if not self.sa:
self.init_db()
try:
self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == '/')\
.scalar()
self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == "/").scalar()
return True
except Exception:
return False
@ -93,10 +97,10 @@ class DbManage(object):
return lambda *args, **kwargs: param
else:
from rhodecode.lib.utils import ask_ok
return ask_ok
def init_db(self, SESSION=None):
if SESSION:
self.sa = SESSION
self.engine = SESSION.bind
@ -119,24 +123,24 @@ class DbManage(object):
if self.tests:
destroy = True
else:
destroy = self.ask_ok('Are you sure that you want to destroy the old database? [y/n]')
destroy = self.ask_ok("Are you sure that you want to destroy the old database? [y/n]")
if not destroy:
log.info('db tables bootstrap: Nothing done.')
log.info("db tables bootstrap: Nothing done.")
sys.exit(0)
if destroy:
Base.metadata.drop_all(bind=engine)
checkfirst = not override
Base.metadata.create_all(bind=engine, checkfirst=checkfirst)
log.info('Created tables for %s', self.dbname)
log.info("Created tables for %s", self.dbname)
def set_db_version(self):
ver = DbMigrateVersion()
ver.version = __dbversion__
ver.repository_id = 'rhodecode_db_migrations'
ver.repository_path = 'versions'
ver.repository_id = "rhodecode_db_migrations"
ver.repository_path = "versions"
self.sa.add(ver)
log.info('db version set to: %s', __dbversion__)
log.info("db version set to: %s", __dbversion__)
def run_post_migration_tasks(self):
"""
@ -157,23 +161,24 @@ class DbManage(object):
from rhodecode.lib.dbmigrate.migrate.versioning import api
from rhodecode.lib.dbmigrate.migrate.exceptions import DatabaseNotControlledError
if 'sqlite' in self.dburi:
if "sqlite" in self.dburi:
print(
'********************** WARNING **********************\n'
'Make sure your version of sqlite is at least 3.7.X. \n'
'Earlier versions are known to fail on some migrations\n'
'*****************************************************\n')
"********************** WARNING **********************\n"
"Make sure your version of sqlite is at least 3.7.X. \n"
"Earlier versions are known to fail on some migrations\n"
"*****************************************************\n"
)
upgrade = self.ask_ok(
'You are about to perform a database upgrade. Make '
'sure you have backed up your database. '
'Continue ? [y/n]')
"You are about to perform a database upgrade. Make "
"sure you have backed up your database. "
"Continue ? [y/n]"
)
if not upgrade:
log.info('No upgrade performed')
log.info("No upgrade performed")
sys.exit(0)
repository_path = jn(dn(dn(dn(os.path.realpath(__file__)))),
'rhodecode/lib/dbmigrate')
repository_path = jn(dn(dn(dn(os.path.realpath(__file__)))), "rhodecode/lib/dbmigrate")
db_uri = self.dburi
if version:
@ -181,50 +186,45 @@ class DbManage(object):
try:
curr_version = api.db_version(db_uri, repository_path)
msg = (f'Found current database db_uri under version '
f'control with version {curr_version}')
msg = f"Found current database db_uri under version " f"control with version {curr_version}"
except (RuntimeError, DatabaseNotControlledError):
curr_version = 1
msg = f'Current database is not under version control. ' \
f'Setting as version {curr_version}'
msg = f"Current database is not under version control. " f"Setting as version {curr_version}"
api.version_control(db_uri, repository_path, curr_version)
notify(msg)
if curr_version == __dbversion__:
log.info('This database is already at the newest version')
log.info("This database is already at the newest version")
sys.exit(0)
upgrade_steps = list(range(curr_version + 1, __dbversion__ + 1))
notify(f'attempting to upgrade database from '
f'version {curr_version} to version {__dbversion__}')
notify(f"attempting to upgrade database from " f"version {curr_version} to version {__dbversion__}")
# CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE
final_step = 'latest'
final_step = "latest"
for step in upgrade_steps:
notify(f'performing upgrade step {step}')
notify(f"performing upgrade step {step}")
time.sleep(0.5)
api.upgrade(db_uri, repository_path, step)
self.sa.rollback()
notify(f'schema upgrade for step {step} completed')
notify(f"schema upgrade for step {step} completed")
final_step = step
self.run_post_migration_tasks()
notify(f'upgrade to version {final_step} successful')
notify(f"upgrade to version {final_step} successful")
def fix_repo_paths(self):
"""
Fixes an old RhodeCode version path into new one without a '*'
"""
paths = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == '/')\
.scalar()
paths = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == "/").scalar()
paths.ui_value = paths.ui_value.replace('*', '')
paths.ui_value = paths.ui_value.replace("*", "")
try:
self.sa.add(paths)
@ -238,12 +238,10 @@ class DbManage(object):
Fixes an old default user with some 'nicer' default values,
used mostly for anonymous access
"""
def_user = self.sa.query(User)\
.filter(User.username == User.DEFAULT_USER)\
.one()
def_user = self.sa.query(User).filter(User.username == User.DEFAULT_USER).one()
def_user.name = 'Anonymous'
def_user.lastname = 'User'
def_user.name = "Anonymous"
def_user.lastname = "User"
def_user.email = User.DEFAULT_USER_EMAIL
try:
@ -258,7 +256,7 @@ class DbManage(object):
Fixes rhodecode settings and adds ga_code key for google analytics
"""
hgsettings3 = RhodeCodeSetting('ga_code', '')
hgsettings3 = RhodeCodeSetting("ga_code", "")
try:
self.sa.add(hgsettings3)
@ -268,15 +266,14 @@ class DbManage(object):
raise
def create_admin_and_prompt(self):
# defaults
defaults = self.cli_args
username = defaults.get('username')
password = defaults.get('password')
email = defaults.get('email')
username = defaults.get("username")
password = defaults.get("password")
email = defaults.get("email")
if username is None:
username = input('Specify admin username:')
username = input("Specify admin username:")
if password is None:
password = self._get_admin_password()
if not password:
@ -285,42 +282,44 @@ class DbManage(object):
if not password:
sys.exit()
if email is None:
email = input('Specify admin email:')
api_key = self.cli_args.get('api_key')
self.create_user(username, password, email, True,
strict_creation_check=False,
api_key=api_key)
email = input("Specify admin email:")
api_key = self.cli_args.get("api_key")
self.create_user(username, password, email, True, strict_creation_check=False, api_key=api_key)
def _get_admin_password(self):
password = getpass.getpass('Specify admin password '
'(min 6 chars):')
confirm = getpass.getpass('Confirm password:')
password = getpass.getpass("Specify admin password " "(min 6 chars):")
confirm = getpass.getpass("Confirm password:")
if password != confirm:
log.error('passwords mismatch')
log.error("passwords mismatch")
return False
if len(password) < 6:
log.error('password is too short - use at least 6 characters')
log.error("password is too short - use at least 6 characters")
return False
return password
def create_test_admin_and_users(self):
log.info('creating admin and regular test users')
from rhodecode.bootstrap import TEST_USER_ADMIN_LOGIN, \
TEST_USER_ADMIN_PASS, TEST_USER_ADMIN_EMAIL, \
TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS, \
TEST_USER_REGULAR_EMAIL, TEST_USER_REGULAR2_LOGIN, \
TEST_USER_REGULAR2_PASS, TEST_USER_REGULAR2_EMAIL
log.info("creating admin and regular test users")
from rhodecode.bootstrap import (
TEST_USER_ADMIN_LOGIN,
TEST_USER_ADMIN_PASS,
TEST_USER_ADMIN_EMAIL,
TEST_USER_REGULAR_LOGIN,
TEST_USER_REGULAR_PASS,
TEST_USER_REGULAR_EMAIL,
TEST_USER_REGULAR2_LOGIN,
TEST_USER_REGULAR2_PASS,
TEST_USER_REGULAR2_EMAIL,
)
self.create_user(TEST_USER_ADMIN_LOGIN, TEST_USER_ADMIN_PASS,
TEST_USER_ADMIN_EMAIL, True, api_key=True)
self.create_user(TEST_USER_ADMIN_LOGIN, TEST_USER_ADMIN_PASS, TEST_USER_ADMIN_EMAIL, True, api_key=True)
self.create_user(TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS,
TEST_USER_REGULAR_EMAIL, False, api_key=True)
self.create_user(TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS, TEST_USER_REGULAR_EMAIL, False, api_key=True)
self.create_user(TEST_USER_REGULAR2_LOGIN, TEST_USER_REGULAR2_PASS,
TEST_USER_REGULAR2_EMAIL, False, api_key=True)
self.create_user(
TEST_USER_REGULAR2_LOGIN, TEST_USER_REGULAR2_PASS, TEST_USER_REGULAR2_EMAIL, False, api_key=True
)
def create_ui_settings(self, repo_store_path):
"""
@ -331,67 +330,65 @@ class DbManage(object):
# Build HOOKS
hooks = [
(RhodeCodeUi.HOOK_REPO_SIZE, 'python:vcsserver.hooks.repo_size'),
(RhodeCodeUi.HOOK_REPO_SIZE, "python:vcsserver.hooks.repo_size"),
# HG
(RhodeCodeUi.HOOK_PRE_PULL, 'python:vcsserver.hooks.pre_pull'),
(RhodeCodeUi.HOOK_PULL, 'python:vcsserver.hooks.log_pull_action'),
(RhodeCodeUi.HOOK_PRE_PUSH, 'python:vcsserver.hooks.pre_push'),
(RhodeCodeUi.HOOK_PRETX_PUSH, 'python:vcsserver.hooks.pre_push'),
(RhodeCodeUi.HOOK_PUSH, 'python:vcsserver.hooks.log_push_action'),
(RhodeCodeUi.HOOK_PUSH_KEY, 'python:vcsserver.hooks.key_push'),
(RhodeCodeUi.HOOK_PRE_PULL, "python:vcsserver.hooks.pre_pull"),
(RhodeCodeUi.HOOK_PULL, "python:vcsserver.hooks.log_pull_action"),
(RhodeCodeUi.HOOK_PRE_PUSH, "python:vcsserver.hooks.pre_push"),
(RhodeCodeUi.HOOK_PRETX_PUSH, "python:vcsserver.hooks.pre_push"),
(RhodeCodeUi.HOOK_PUSH, "python:vcsserver.hooks.log_push_action"),
(RhodeCodeUi.HOOK_PUSH_KEY, "python:vcsserver.hooks.key_push"),
]
for key, value in hooks:
hook_obj = settings_model.get_ui_by_key(key)
hooks2 = hook_obj if hook_obj else RhodeCodeUi()
hooks2.ui_section = 'hooks'
hooks2.ui_section = "hooks"
hooks2.ui_key = key
hooks2.ui_value = value
self.sa.add(hooks2)
# enable largefiles
largefiles = RhodeCodeUi()
largefiles.ui_section = 'extensions'
largefiles.ui_key = 'largefiles'
largefiles.ui_value = ''
largefiles.ui_section = "extensions"
largefiles.ui_key = "largefiles"
largefiles.ui_value = ""
self.sa.add(largefiles)
# enable hgevolve disabled by default
hgevolve = RhodeCodeUi()
hgevolve.ui_section = 'extensions'
hgevolve.ui_key = 'evolve'
hgevolve.ui_value = ''
hgevolve.ui_section = "extensions"
hgevolve.ui_key = "evolve"
hgevolve.ui_value = ""
hgevolve.ui_active = False
self.sa.add(hgevolve)
hgevolve = RhodeCodeUi()
hgevolve.ui_section = 'experimental'
hgevolve.ui_key = 'evolution'
hgevolve.ui_value = ''
hgevolve.ui_section = "experimental"
hgevolve.ui_key = "evolution"
hgevolve.ui_value = ""
hgevolve.ui_active = False
self.sa.add(hgevolve)
hgevolve = RhodeCodeUi()
hgevolve.ui_section = 'experimental'
hgevolve.ui_key = 'evolution.exchange'
hgevolve.ui_value = ''
hgevolve.ui_section = "experimental"
hgevolve.ui_key = "evolution.exchange"
hgevolve.ui_value = ""
hgevolve.ui_active = False
self.sa.add(hgevolve)
hgevolve = RhodeCodeUi()
hgevolve.ui_section = 'extensions'
hgevolve.ui_key = 'topic'
hgevolve.ui_value = ''
hgevolve.ui_section = "extensions"
hgevolve.ui_key = "topic"
hgevolve.ui_value = ""
hgevolve.ui_active = False
self.sa.add(hgevolve)
# enable hggit disabled by default
hggit = RhodeCodeUi()
hggit.ui_section = 'extensions'
hggit.ui_key = 'hggit'
hggit.ui_value = ''
hggit.ui_section = "extensions"
hggit.ui_key = "hggit"
hggit.ui_value = ""
hggit.ui_active = False
self.sa.add(hggit)
@ -400,8 +397,7 @@ class DbManage(object):
tags = ["/tags/*"]
for branch in branches:
settings_model.create_ui_section_value(
RhodeCodeUi.SVN_BRANCH_ID, branch)
settings_model.create_ui_section_value(RhodeCodeUi.SVN_BRANCH_ID, branch)
for tag in tags:
settings_model.create_ui_section_value(RhodeCodeUi.SVN_TAG_ID, tag)
@ -413,22 +409,13 @@ class DbManage(object):
:param skip_existing:
"""
defaults = [
('auth_plugins',
'egg:rhodecode-enterprise-ce#token,egg:rhodecode-enterprise-ce#rhodecode',
'list'),
('auth_authtoken_enabled',
'True',
'bool'),
('auth_rhodecode_enabled',
'True',
'bool'),
("auth_plugins", "egg:rhodecode-enterprise-ce#token,egg:rhodecode-enterprise-ce#rhodecode", "list"),
("auth_authtoken_enabled", "True", "bool"),
("auth_rhodecode_enabled", "True", "bool"),
]
for k, v, t in defaults:
if (skip_existing and
SettingsModel().get_setting_by_name(k) is not None):
log.debug('Skipping option %s', k)
if skip_existing and SettingsModel().get_setting_by_name(k) is not None:
log.debug("Skipping option %s", k)
continue
setting = RhodeCodeSetting(k, v, t)
self.sa.add(setting)
@ -437,15 +424,14 @@ class DbManage(object):
"""Creates default settings"""
for k, v, t in [
('default_repo_enable_locking', False, 'bool'),
('default_repo_enable_downloads', False, 'bool'),
('default_repo_enable_statistics', False, 'bool'),
('default_repo_private', False, 'bool'),
('default_repo_type', 'hg', 'unicode')]:
if (skip_existing and
SettingsModel().get_setting_by_name(k) is not None):
log.debug('Skipping option %s', k)
("default_repo_enable_locking", False, "bool"),
("default_repo_enable_downloads", False, "bool"),
("default_repo_enable_statistics", False, "bool"),
("default_repo_private", False, "bool"),
("default_repo_type", "hg", "unicode"),
]:
if skip_existing and SettingsModel().get_setting_by_name(k) is not None:
log.debug("Skipping option %s", k)
continue
setting = RhodeCodeSetting(k, v, t)
self.sa.add(setting)
@ -456,13 +442,15 @@ class DbManage(object):
g.group_name = g.get_new_name(g.name)
self.sa.add(g)
# get default perm
default = UserRepoGroupToPerm.query()\
.filter(UserRepoGroupToPerm.group == g)\
.filter(UserRepoGroupToPerm.user == def_usr)\
default = (
UserRepoGroupToPerm.query()
.filter(UserRepoGroupToPerm.group == g)
.filter(UserRepoGroupToPerm.user == def_usr)
.scalar()
)
if default is None:
log.debug('missing default permission for group %s adding', g)
log.debug("missing default permission for group %s adding", g)
perm_obj = RepoGroupModel()._create_default_perms(g)
self.sa.add(perm_obj)
@ -477,8 +465,7 @@ class DbManage(object):
if not default_user:
return
u2p = UserToPerm.query()\
.filter(UserToPerm.user == default_user).all()
u2p = UserToPerm.query().filter(UserToPerm.user == default_user).all()
fixed = False
if len(u2p) != len(Permission.DEFAULT_USER_PERMISSIONS):
for p in u2p:
@ -487,18 +474,18 @@ class DbManage(object):
self.populate_default_permissions()
return fixed
def config_prompt(self, test_repo_path='', retries=3):
def config_prompt(self, test_repo_path="", retries=3):
defaults = self.cli_args
_path = defaults.get('repos_location')
_path = defaults.get("repos_location")
if retries == 3:
log.info('Setting up repositories config')
log.info("Setting up repositories config")
if _path is not None:
path = _path
elif not self.tests and not test_repo_path:
path = input(
'Enter a valid absolute path to store repositories. '
'All repositories in that path will be added automatically:'
"Enter a valid absolute path to store repositories. "
"All repositories in that path will be added automatically:"
)
else:
path = test_repo_path
@ -507,29 +494,28 @@ class DbManage(object):
# check proper dir
if not os.path.isdir(path):
path_ok = False
log.error('Given path %s is not a valid directory', path)
log.error("Given path %s is not a valid directory", path)
elif not os.path.isabs(path):
path_ok = False
log.error('Given path %s is not an absolute path', path)
log.error("Given path %s is not an absolute path", path)
# check if path is at least readable.
if not os.access(path, os.R_OK):
path_ok = False
log.error('Given path %s is not readable', path)
log.error("Given path %s is not readable", path)
# check write access, warn user about non writeable paths
elif not os.access(path, os.W_OK) and path_ok:
log.warning('No write permission to given path %s', path)
log.warning("No write permission to given path %s", path)
q = (f'Given path {path} is not writeable, do you want to '
f'continue with read only mode ? [y/n]')
q = f"Given path {path} is not writeable, do you want to " f"continue with read only mode ? [y/n]"
if not self.ask_ok(q):
log.error('Canceled by user')
log.error("Canceled by user")
sys.exit(-1)
if retries == 0:
sys.exit('max retries reached')
sys.exit("max retries reached")
if not path_ok:
retries -= 1
return self.config_prompt(test_repo_path, retries)
@ -537,66 +523,59 @@ class DbManage(object):
real_path = os.path.normpath(os.path.realpath(path))
if real_path != os.path.normpath(path):
q = (f'Path looks like a symlink, RhodeCode Enterprise will store '
f'given path as {real_path} ? [y/n]')
q = f"Path looks like a symlink, RhodeCode Enterprise will store " f"given path as {real_path} ? [y/n]"
if not self.ask_ok(q):
log.error('Canceled by user')
log.error("Canceled by user")
sys.exit(-1)
return real_path
def create_settings(self, path):
self.create_ui_settings(path)
ui_config = [
('web', 'allow_archive', 'gz zip bz2'),
('web', 'allow_push', '*'),
('web', 'baseurl', '/'),
('paths', '/', path),
('phases', 'publish', 'True')
("web", "allow_archive", "gz zip bz2"),
("web", "allow_push", "*"),
("web", "baseurl", "/"),
("web", "cacerts", "/etc/rhodecode/conf/ca-bundle.crt"),
("paths", "/", path),
("phases", "publish", "True"),
]
for section, key, value in ui_config:
ui_conf = RhodeCodeUi()
setattr(ui_conf, 'ui_section', section)
setattr(ui_conf, 'ui_key', key)
setattr(ui_conf, 'ui_value', value)
setattr(ui_conf, "ui_section", section)
setattr(ui_conf, "ui_key", key)
setattr(ui_conf, "ui_value", value)
self.sa.add(ui_conf)
# rhodecode app settings
settings = [
('realm', 'RhodeCode', 'unicode'),
('title', '', 'unicode'),
('pre_code', '', 'unicode'),
('post_code', '', 'unicode'),
("realm", "RhodeCode", "unicode"),
("title", "", "unicode"),
("pre_code", "", "unicode"),
("post_code", "", "unicode"),
# Visual
('show_public_icon', True, 'bool'),
('show_private_icon', True, 'bool'),
('stylify_metatags', True, 'bool'),
('dashboard_items', 100, 'int'),
('admin_grid_items', 25, 'int'),
('markup_renderer', 'markdown', 'unicode'),
('repository_fields', True, 'bool'),
('show_version', True, 'bool'),
('show_revision_number', True, 'bool'),
('show_sha_length', 12, 'int'),
('use_gravatar', False, 'bool'),
('gravatar_url', User.DEFAULT_GRAVATAR_URL, 'unicode'),
('clone_uri_tmpl', Repository.DEFAULT_CLONE_URI, 'unicode'),
('clone_uri_id_tmpl', Repository.DEFAULT_CLONE_URI_ID, 'unicode'),
('clone_uri_ssh_tmpl', Repository.DEFAULT_CLONE_URI_SSH, 'unicode'),
('support_url', '', 'unicode'),
('update_url', RhodeCodeSetting.DEFAULT_UPDATE_URL, 'unicode'),
("show_public_icon", True, "bool"),
("show_private_icon", True, "bool"),
("stylify_metatags", True, "bool"),
("dashboard_items", 100, "int"),
("admin_grid_items", 25, "int"),
("markup_renderer", "markdown", "unicode"),
("repository_fields", True, "bool"),
("show_version", True, "bool"),
("show_revision_number", True, "bool"),
("show_sha_length", 12, "int"),
("use_gravatar", False, "bool"),
("gravatar_url", User.DEFAULT_GRAVATAR_URL, "unicode"),
("clone_uri_tmpl", Repository.DEFAULT_CLONE_URI, "unicode"),
("clone_uri_id_tmpl", Repository.DEFAULT_CLONE_URI_ID, "unicode"),
("clone_uri_ssh_tmpl", Repository.DEFAULT_CLONE_URI_SSH, "unicode"),
("support_url", "", "unicode"),
("update_url", RhodeCodeSetting.DEFAULT_UPDATE_URL, "unicode"),
# VCS Settings
('pr_merge_enabled', True, 'bool'),
('use_outdated_comments', True, 'bool'),
('diff_cache', True, 'bool'),
("pr_merge_enabled", True, "bool"),
("use_outdated_comments", True, "bool"),
("diff_cache", True, "bool"),
]
for key, val, type_ in settings:
@ -606,36 +585,43 @@ class DbManage(object):
self.create_auth_plugin_options()
self.create_default_options()
log.info('created ui config')
log.info("created ui config")
def create_user(self, username, password, email='', admin=False,
strict_creation_check=True, api_key=None):
log.info('creating user `%s`', username)
def create_user(self, username, password, email="", admin=False, strict_creation_check=True, api_key=None):
log.info("creating user `%s`", username)
user = UserModel().create_or_update(
username, password, email, firstname='RhodeCode', lastname='Admin',
active=True, admin=admin, extern_type="rhodecode",
strict_creation_check=strict_creation_check)
username,
password,
email,
firstname="RhodeCode",
lastname="Admin",
active=True,
admin=admin,
extern_type="rhodecode",
strict_creation_check=strict_creation_check,
)
if api_key:
log.info('setting a new default auth token for user `%s`', username)
log.info("setting a new default auth token for user `%s`", username)
UserModel().add_auth_token(
user=user, lifetime_minutes=-1,
role=UserModel.auth_token_role.ROLE_ALL,
description='BUILTIN TOKEN')
user=user, lifetime_minutes=-1, role=UserModel.auth_token_role.ROLE_ALL, description="BUILTIN TOKEN"
)
def create_default_user(self):
log.info('creating default user')
log.info("creating default user")
# create default user for handling default permissions.
user = UserModel().create_or_update(username=User.DEFAULT_USER,
password=str(uuid.uuid1())[:20],
email=User.DEFAULT_USER_EMAIL,
firstname='Anonymous',
lastname='User',
strict_creation_check=False)
user = UserModel().create_or_update(
username=User.DEFAULT_USER,
password=str(uuid.uuid1())[:20],
email=User.DEFAULT_USER_EMAIL,
firstname="Anonymous",
lastname="User",
strict_creation_check=False,
)
# based on configuration options activate/de-activate this user which
# controls anonymous access
if self.cli_args.get('public_access') is False:
log.info('Public access disabled')
if self.cli_args.get("public_access") is False:
log.info("Public access disabled")
user.active = False
Session().add(user)
Session().commit()
@ -646,7 +632,7 @@ class DbManage(object):
"""
# module.(access|create|change|delete)_[name]
# module.(none|read|write|admin)
log.info('creating permissions')
log.info("creating permissions")
PermissionModel(self.sa).create_permissions()
def populate_default_permissions(self):
@ -654,5 +640,5 @@ class DbManage(object):
Populate default permissions. It will create only the default
permissions that are missing, and not alter already defined ones
"""
log.info('creating default user permissions')
log.info("creating default user permissions")
PermissionModel(self.sa).create_default_user_permissions(user=User.DEFAULT_USER)

View file

@ -259,6 +259,8 @@ class RemoteRepo(object):
wire = copy.deepcopy(self._wire)
wire["config"] = wire["config"].serialize()
wire["config"].append(("vcs", "ssl_dir", self.cert_dir))
# mercurial specific ui settings for SSL_DIR
wire["config"].append(("web", "cacerts", self.cert_dir))
payload = {
"id": str(uuid.uuid4()),