From: Hans-Christoph Steiner Date: Tue, 28 Nov 2017 11:07:51 +0000 (+0100) Subject: server: allow user to specify custom s3cfg file (closes #413) X-Git-Tag: 1.0.0~61^2 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7eef6eac9330dd804924f1ae6631dfcfb03d8de8;p=fdroidserver.git server: allow user to specify custom s3cfg file (closes #413) This lets people do advanced S3 setups like CloudFront caching, and anything else s3cmd lets you do. --- diff --git a/examples/config.py b/examples/config.py index 0551e1c0..f36d51d2 100644 --- a/examples/config.py +++ b/examples/config.py @@ -216,11 +216,12 @@ The repository of older versions of applications from the main demo repository. # sync_from_local_copy_dir = True -# To upload the repo to an Amazon S3 bucket using `fdroid server update`. -# Warning, this deletes and recreates the whole fdroid/ directory each -# time. This is based on apache-libcloud, which supports basically all cloud -# storage services, so it should be easy to port the fdroid server tools to -# any of them. +# To upload the repo to an Amazon S3 bucket using `fdroid server +# update`. Warning, this deletes and recreates the whole fdroid/ +# directory each time. This prefers s3cmd, but can also use +# apache-libcloud. To customize how s3cmd interacts with the cloud +# provider, create a 's3cfg' file next to this file (config.py), and +# those settings will be used instead of any 'aws' variable below. # # awsbucket = 'myawsfdroid' # awsaccesskeyid = 'SEE0CHAITHEIMAUR2USA' diff --git a/fdroidserver/server.py b/fdroidserver/server.py index 116c27f8..bd5a4426 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -38,6 +38,9 @@ options = None BINARY_TRANSPARENCY_DIR = 'binary_transparency' +AUTO_S3CFG = '.fdroid-server-update-s3cfg' +USER_S3CFG = 's3cfg' + def update_awsbucket(repo_section): ''' @@ -72,12 +75,17 @@ def update_awsbucket_s3cmd(repo_section): logging.debug(_('Using s3cmd to sync with: {url}') .format(url=config['awsbucket'])) - configfilename = '.s3cfg' - fd = os.open(configfilename, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600) - os.write(fd, '[default]\n'.encode('utf-8')) - os.write(fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8')) - os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8')) - os.close(fd) + if os.path.exists(USER_S3CFG): + logging.info(_('Using "{path}" for configuring s3cmd.').format(path=USER_S3CFG)) + configfilename = USER_S3CFG + else: + fd = os.open(AUTO_S3CFG, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600) + logging.debug(_('Creating "{path}" for configuring s3cmd.').format(path=AUTO_S3CFG)) + os.write(fd, '[default]\n'.encode('utf-8')) + os.write(fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8')) + os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8')) + os.close(fd) + configfilename = AUTO_S3CFG s3bucketurl = 's3://' + config['awsbucket'] s3cmd = [config['s3cmd'], '--config=' + configfilename] @@ -151,6 +159,10 @@ def update_awsbucket_libcloud(repo_section): _('To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.py!')) awsbucket = config['awsbucket'] + if os.path.exists(USER_S3CFG): + raise FDroidException(_('"{path}" exists but s3cmd is not installed!') + .format(path=USER_S3CFG)) + cls = get_driver(Provider.S3) driver = cls(config['awsaccesskeyid'], config['awssecretkey']) try: