diff --git a/examples/config.py b/examples/config.py index 2aaaed10..54c326fe 100644 --- a/examples/config.py +++ b/examples/config.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# -*- coding: utf-8 -*- # Copy this file to config.py, then amend the settings below according to # your system configuration. @@ -148,6 +149,18 @@ The repository of older versions of applications from the main demo repository. # 'bar.info:/var/www/fdroid', # } +# Any mirrors of this repo, for example all of the servers declared in +# serverwebroot, will automatically be used by the client. If one +# mirror is not working, then the client will try another. If the +# client has Tor enabled, then the client will prefer mirrors with +# .onion addresses. This base URL will be used for both the main repo +# and the archive, if it is enabled. So these URLs should end in the +# 'fdroid' base of the F-Droid part of the web server like serverwebroot. +# +# mirrors = { +# 'https://foo.bar/fdroid', +# 'http://foobarfoobarfoobar.onion/fdroid', +# } # optionally specific which identity file to use when using rsync over SSH # diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index dc0055f2..bc8708df 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -132,7 +132,7 @@ class App(): self.UpdateCheckName = None self.UpdateCheckData = None self.CurrentVersion = '' - self.CurrentVersionCode = '0' + self.CurrentVersionCode = None self.NoSourceSince = '' self.id = None diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 6bbf0fae..7c5f8e28 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -27,6 +27,7 @@ import socket import zipfile import hashlib import pickle +import urlparse from datetime import datetime, timedelta from xml.dom.minidom import Document from argparse import ArgumentParser @@ -760,6 +761,15 @@ def make_index(apps, sortedids, apks, repodir, archive, categories): repoel = doc.createElement("repo") + mirrorcheckfailed = False + for mirror in config.get('mirrors', []): + base = os.path.basename(urlparse.urlparse(mirror).path.rstrip('/')) + if config.get('nonstandardwebroot') is not True and base != 'fdroid': + logging.error("mirror '" + mirror + "' does not end with 'fdroid'!") + mirrorcheckfailed = True + if mirrorcheckfailed: + sys.exit(1) + if archive: repoel.setAttribute("name", config['archive_name']) if config['repo_maxage'] != 0: @@ -767,6 +777,9 @@ def make_index(apps, sortedids, apks, repodir, archive, categories): repoel.setAttribute("icon", os.path.basename(config['archive_icon'])) repoel.setAttribute("url", config['archive_url']) addElement('description', config['archive_description'], doc, repoel) + urlbasepath = os.path.basename(urlparse.urlparse(config['archive_url']).path) + for mirror in config.get('mirrors', []): + addElement('mirror', urlparse.urljoin(mirror, urlbasepath), doc, repoel) else: repoel.setAttribute("name", config['repo_name']) @@ -775,8 +788,11 @@ def make_index(apps, sortedids, apks, repodir, archive, categories): repoel.setAttribute("icon", os.path.basename(config['repo_icon'])) repoel.setAttribute("url", config['repo_url']) addElement('description', config['repo_description'], doc, repoel) + urlbasepath = os.path.basename(urlparse.urlparse(config['repo_url']).path) + for mirror in config.get('mirrors', []): + addElement('mirror', urlparse.urljoin(mirror, urlbasepath), doc, repoel) - repoel.setAttribute("version", "14") + repoel.setAttribute("version", "15") repoel.setAttribute("timestamp", str(int(time.time()))) nosigningkey = False @@ -1268,6 +1284,8 @@ def main(): if app.Name is None: app.Name = bestapk['name'] app.icon = bestapk['icon'] if 'icon' in bestapk else None + if app.CurrentVersionCode is None: + app.CurrentVersionCode = str(bestver) # Sort the app list by name, then the web site doesn't have to by default. # (we had to wait until we'd scanned the apks to do this, because mostly the diff --git a/tests/metadata/info.guardianproject.urzip.txt b/tests/metadata/info.guardianproject.urzip.txt new file mode 100644 index 00000000..c7348959 --- /dev/null +++ b/tests/metadata/info.guardianproject.urzip.txt @@ -0,0 +1,25 @@ +Categories:Development,GuardianProject +License:GPLv3 +Web Site:https://dev.guardianproject.info/projects/urzip +Source Code:https://github.com/guardianproject/urzip +Issue Tracker:https://dev.guardianproject.info/projects/urzip/issues +Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk + +Auto Name:Urzip:本地应用的信息 +Summary:一个实用工具,获取已安装在您的设备上的应用的有关信息 +Description: +It’s Urzip 是一个获得已安装 APK 相关信息的实用工具。它从您的设备上已安装的所有应用开始,一键触摸即可显示 APK 的指纹,并且提供到达 virustotal.com 和 androidobservatory.org 的快捷链接,让您方便地了解特定 APK 的档案。它还可以让您导出签名证书和生成 ApkSignaturePin Pin 文件供 TrustedIntents 库使用。 + +★ Urzip 支持下列语言: Deutsch, English, español, suomi, 日本語, 한국어, Norsk, português (Portugal), Русский, Slovenščina, Türkçe +没看到您的语言?帮忙翻译本应用吧: +https://www.transifex.com/projects/p/urzip + +★ 致用户:我们还缺少你喜欢的功能?发现了一个 bug?请告诉我们!我们乐于听取您的意见。请发送电子邮件至: support@guardianproject.info 或者加入我们的聊天室 https://guardianproject.info/contact +. + +Repo Type:git +Repo:https://github.com/guardianproject/urzip.git + + + +Current Version Code:9999999 diff --git a/tests/run-tests b/tests/run-tests index 243fbf4c..de9c9a15 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -121,6 +121,23 @@ if [ `uname -s` == "Linux" ]; then fi +#------------------------------------------------------------------------------# +echo_header "test UTF-8 metadata" + +REPOROOT=`create_test_dir` +cd $REPOROOT + +$fdroid init +sed -i.tmp 's,^ *repo_description.*,repo_description = """获取已安装在您的设备上的应用的,' config.py +echo "mirrors = {'https://foo.bar/fdroid', 'http://secret.onion/fdroid'}" >> config.py +mkdir metadata +cp $WORKSPACE/tests/urzip.apk repo/ +cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.txt metadata/ + +$fdroid readmeta +$fdroid update + + #------------------------------------------------------------------------------# echo_header "test metadata checks"