core: fixed problems with unset ssl dir for mercurial
This commit is contained in:
parent
a10bc4b2cf
commit
7406c073dc
2 changed files with 202 additions and 214 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue