mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-09 00:40:11 +01:00
Keep consistency in config defaults and writes
* Default paths are not expanded * When writing to config.py in "fdroid init", don't write expanded paths either * Support changes in e.g. $ANDROID_HOME after a config.py is generated thanks to the fix above
This commit is contained in:
parent
8d1c4c1d60
commit
88dc0b2bb5
@ -39,40 +39,56 @@ options = None
|
|||||||
env = None
|
env = None
|
||||||
|
|
||||||
|
|
||||||
def get_default_config():
|
default_config = {
|
||||||
return {
|
'sdk_path': "$ANDROID_HOME",
|
||||||
'sdk_path': os.getenv("ANDROID_HOME") or "",
|
'ndk_path': "$ANDROID_NDK",
|
||||||
'ndk_path': os.getenv("ANDROID_NDK") or "",
|
'build_tools': "20.0.0",
|
||||||
'build_tools': "20.0.0",
|
'ant': "ant",
|
||||||
'ant': "ant",
|
'mvn3': "mvn",
|
||||||
'mvn3': "mvn",
|
'gradle': 'gradle',
|
||||||
'gradle': 'gradle',
|
'sync_from_local_copy_dir': False,
|
||||||
'sync_from_local_copy_dir': False,
|
'update_stats': False,
|
||||||
'update_stats': False,
|
'stats_ignore': [],
|
||||||
'stats_ignore': [],
|
'stats_server': None,
|
||||||
'stats_server': None,
|
'stats_user': None,
|
||||||
'stats_user': None,
|
'stats_to_carbon': False,
|
||||||
'stats_to_carbon': False,
|
'repo_maxage': 0,
|
||||||
'repo_maxage': 0,
|
'build_server_always': False,
|
||||||
'build_server_always': False,
|
'keystore': os.path.join("$HOME", '.local', 'share', 'fdroidserver', 'keystore.jks'),
|
||||||
'keystore': os.path.join(os.getenv("HOME"), '.local', 'share', 'fdroidserver', 'keystore.jks'),
|
'smartcardoptions': [],
|
||||||
'smartcardoptions': [],
|
'char_limits': {
|
||||||
'char_limits': {
|
'Summary': 50,
|
||||||
'Summary': 50,
|
'Description': 1500
|
||||||
'Description': 1500
|
},
|
||||||
},
|
'keyaliases': {},
|
||||||
'keyaliases': {},
|
'repo_url': "https://MyFirstFDroidRepo.org/fdroid/repo",
|
||||||
'repo_url': "https://MyFirstFDroidRepo.org/fdroid/repo",
|
'repo_name': "My First FDroid Repo Demo",
|
||||||
'repo_name': "My First FDroid Repo Demo",
|
'repo_icon': "fdroid-icon.png",
|
||||||
'repo_icon': "fdroid-icon.png",
|
'repo_description': '''
|
||||||
'repo_description': '''
|
This is a repository of apps to be used with FDroid. Applications in this
|
||||||
This is a repository of apps to be used with FDroid. Applications in this
|
repository are either official binaries built by the original application
|
||||||
repository are either official binaries built by the original application
|
developers, or are binaries built from source by the admin of f-droid.org
|
||||||
developers, or are binaries built from source by the admin of f-droid.org
|
using the tools on https://gitlab.com/u/fdroid.
|
||||||
using the tools on https://gitlab.com/u/fdroid.
|
''',
|
||||||
''',
|
'archive_older': 0,
|
||||||
'archive_older': 0,
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
def fill_config_defaults(config):
|
||||||
|
for k, v in default_config.items():
|
||||||
|
if k not in config:
|
||||||
|
config[k] = v
|
||||||
|
|
||||||
|
# Expand environment variables
|
||||||
|
for k, v in config.items():
|
||||||
|
if type(v) != str:
|
||||||
|
continue
|
||||||
|
orig = v
|
||||||
|
v = os.path.expanduser(v)
|
||||||
|
v = os.path.expandvars(v)
|
||||||
|
if orig != v:
|
||||||
|
config[k] = v
|
||||||
|
config[k + '_orig'] = orig
|
||||||
|
|
||||||
|
|
||||||
def read_config(opts, config_file='config.py'):
|
def read_config(opts, config_file='config.py'):
|
||||||
@ -111,17 +127,7 @@ def read_config(opts, config_file='config.py'):
|
|||||||
if st.st_mode & stat.S_IRWXG or st.st_mode & stat.S_IRWXO:
|
if st.st_mode & stat.S_IRWXG or st.st_mode & stat.S_IRWXO:
|
||||||
logging.warn("unsafe permissions on {0} (should be 0600)!".format(config_file))
|
logging.warn("unsafe permissions on {0} (should be 0600)!".format(config_file))
|
||||||
|
|
||||||
defconfig = get_default_config()
|
fill_config_defaults(config)
|
||||||
for k, v in defconfig.items():
|
|
||||||
if k not in config:
|
|
||||||
config[k] = v
|
|
||||||
|
|
||||||
# Expand environment variables
|
|
||||||
for k, v in config.items():
|
|
||||||
if type(v) != str:
|
|
||||||
continue
|
|
||||||
v = os.path.expanduser(v)
|
|
||||||
config[k] = os.path.expandvars(v)
|
|
||||||
|
|
||||||
if not test_sdk_exists(config):
|
if not test_sdk_exists(config):
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
@ -193,7 +199,7 @@ def read_config(opts, config_file='config.py'):
|
|||||||
def test_sdk_exists(c):
|
def test_sdk_exists(c):
|
||||||
if c['sdk_path'] is None:
|
if c['sdk_path'] is None:
|
||||||
# c['sdk_path'] is set to the value of ANDROID_HOME by default
|
# c['sdk_path'] is set to the value of ANDROID_HOME by default
|
||||||
logging.error('No Android SDK found! ANDROID_HOME is not set and sdk_path is not in config.py!')
|
logging.error('No Android SDK found!')
|
||||||
logging.error('You can use ANDROID_HOME to set the path to your SDK, i.e.:')
|
logging.error('You can use ANDROID_HOME to set the path to your SDK, i.e.:')
|
||||||
logging.error('\texport ANDROID_HOME=/opt/android-sdk')
|
logging.error('\texport ANDROID_HOME=/opt/android-sdk')
|
||||||
return False
|
return False
|
||||||
|
@ -36,8 +36,11 @@ config = {}
|
|||||||
options = None
|
options = None
|
||||||
|
|
||||||
|
|
||||||
def write_to_config(key, value):
|
def write_to_config(config, key, value=None):
|
||||||
'''write a key/value to the local config.py'''
|
'''write a key/value to the local config.py'''
|
||||||
|
if value is None:
|
||||||
|
origkey = key + '_orig'
|
||||||
|
value = config[origkey] if origkey in config else config[key]
|
||||||
with open('config.py', 'r') as f:
|
with open('config.py', 'r') as f:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
pattern = '\n[\s#]*' + key + '\s*=\s*"[^"]*"'
|
pattern = '\n[\s#]*' + key + '\s*=\s*"[^"]*"'
|
||||||
@ -122,7 +125,8 @@ def main():
|
|||||||
examplesdir = prefix + '/examples'
|
examplesdir = prefix + '/examples'
|
||||||
|
|
||||||
fdroiddir = os.getcwd()
|
fdroiddir = os.getcwd()
|
||||||
test_config = common.get_default_config()
|
test_config = dict()
|
||||||
|
common.fill_config_defaults(test_config)
|
||||||
|
|
||||||
# track down where the Android SDK is, the default is to use the path set
|
# track down where the Android SDK is, the default is to use the path set
|
||||||
# in ANDROID_HOME if that exists, otherwise None
|
# in ANDROID_HOME if that exists, otherwise None
|
||||||
@ -154,7 +158,7 @@ def main():
|
|||||||
shutil.copy(os.path.join(examplesdir, 'fdroid-icon.png'), fdroiddir)
|
shutil.copy(os.path.join(examplesdir, 'fdroid-icon.png'), fdroiddir)
|
||||||
shutil.copyfile(os.path.join(examplesdir, 'config.py'), 'config.py')
|
shutil.copyfile(os.path.join(examplesdir, 'config.py'), 'config.py')
|
||||||
os.chmod('config.py', 0o0600)
|
os.chmod('config.py', 0o0600)
|
||||||
write_to_config('sdk_path', test_config['sdk_path'])
|
write_to_config(test_config, 'sdk_path')
|
||||||
else:
|
else:
|
||||||
logging.warn('Looks like this is already an F-Droid repo, cowardly refusing to overwrite it...')
|
logging.warn('Looks like this is already an F-Droid repo, cowardly refusing to overwrite it...')
|
||||||
logging.info('Try running `fdroid init` in an empty directory.')
|
logging.info('Try running `fdroid init` in an empty directory.')
|
||||||
@ -179,7 +183,7 @@ def main():
|
|||||||
test_config['build_tools'] = ''
|
test_config['build_tools'] = ''
|
||||||
else:
|
else:
|
||||||
test_config['build_tools'] = dirname
|
test_config['build_tools'] = dirname
|
||||||
write_to_config('build_tools', test_config['build_tools'])
|
write_to_config(test_config, 'build_tools')
|
||||||
if not common.test_build_tools_exists(test_config):
|
if not common.test_build_tools_exists(test_config):
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
|
||||||
@ -194,7 +198,7 @@ def main():
|
|||||||
logging.info('using ANDROID_NDK')
|
logging.info('using ANDROID_NDK')
|
||||||
ndk_path = os.environ['ANDROID_NDK']
|
ndk_path = os.environ['ANDROID_NDK']
|
||||||
if os.path.isdir(ndk_path):
|
if os.path.isdir(ndk_path):
|
||||||
write_to_config('ndk_path', ndk_path)
|
write_to_config(test_config, 'ndk_path')
|
||||||
# the NDK is optional so we don't prompt the user for it if its not found
|
# the NDK is optional so we don't prompt the user for it if its not found
|
||||||
|
|
||||||
# find or generate the keystore for the repo signing key. First try the
|
# find or generate the keystore for the repo signing key. First try the
|
||||||
@ -213,18 +217,18 @@ def main():
|
|||||||
if not os.path.exists(keystore):
|
if not os.path.exists(keystore):
|
||||||
logging.info('"' + keystore
|
logging.info('"' + keystore
|
||||||
+ '" does not exist, creating a new keystore there.')
|
+ '" does not exist, creating a new keystore there.')
|
||||||
write_to_config('keystore', keystore)
|
write_to_config(test_config, 'keystore', keystore)
|
||||||
repo_keyalias = None
|
repo_keyalias = None
|
||||||
if options.repo_keyalias:
|
if options.repo_keyalias:
|
||||||
repo_keyalias = options.repo_keyalias
|
repo_keyalias = options.repo_keyalias
|
||||||
write_to_config('repo_keyalias', repo_keyalias)
|
write_to_config(test_config, 'repo_keyalias', repo_keyalias)
|
||||||
if options.distinguished_name:
|
if options.distinguished_name:
|
||||||
keydname = options.distinguished_name
|
keydname = options.distinguished_name
|
||||||
write_to_config('keydname', keydname)
|
write_to_config(test_config, 'keydname', keydname)
|
||||||
if keystore == 'NONE': # we're using a smartcard
|
if keystore == 'NONE': # we're using a smartcard
|
||||||
write_to_config('repo_keyalias', '1') # seems to be the default
|
write_to_config(test_config, 'repo_keyalias', '1') # seems to be the default
|
||||||
disable_in_config('keypass', 'never used with smartcard')
|
disable_in_config('keypass', 'never used with smartcard')
|
||||||
write_to_config('smartcardoptions',
|
write_to_config(test_config, 'smartcardoptions',
|
||||||
('-storetype PKCS11 -providerName SunPKCS11-OpenSC '
|
('-storetype PKCS11 -providerName SunPKCS11-OpenSC '
|
||||||
+ '-providerClass sun.security.pkcs11.SunPKCS11 '
|
+ '-providerClass sun.security.pkcs11.SunPKCS11 '
|
||||||
+ '-providerArg opensc-fdroid.cfg'))
|
+ '-providerArg opensc-fdroid.cfg'))
|
||||||
@ -254,14 +258,14 @@ def main():
|
|||||||
if not os.path.exists(keystoredir):
|
if not os.path.exists(keystoredir):
|
||||||
os.makedirs(keystoredir, mode=0o700)
|
os.makedirs(keystoredir, mode=0o700)
|
||||||
password = genpassword()
|
password = genpassword()
|
||||||
write_to_config('keystorepass', password)
|
write_to_config(test_config, 'keystorepass', password)
|
||||||
write_to_config('keypass', password)
|
write_to_config(test_config, 'keypass', password)
|
||||||
if options.repo_keyalias is None:
|
if options.repo_keyalias is None:
|
||||||
repo_keyalias = socket.getfqdn()
|
repo_keyalias = socket.getfqdn()
|
||||||
write_to_config('repo_keyalias', repo_keyalias)
|
write_to_config(test_config, 'repo_keyalias', repo_keyalias)
|
||||||
if not options.distinguished_name:
|
if not options.distinguished_name:
|
||||||
keydname = 'CN=' + repo_keyalias + ', OU=F-Droid'
|
keydname = 'CN=' + repo_keyalias + ', OU=F-Droid'
|
||||||
write_to_config('keydname', keydname)
|
write_to_config(test_config, 'keydname', keydname)
|
||||||
genkey(keystore, repo_keyalias, password, keydname)
|
genkey(keystore, repo_keyalias, password, keydname)
|
||||||
|
|
||||||
logging.info('Built repo based in "' + fdroiddir + '"')
|
logging.info('Built repo based in "' + fdroiddir + '"')
|
||||||
|
Loading…
Reference in New Issue
Block a user