apkdroid.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import requests
  2. import logging
  3. import re
  4. import os
  5. import shutil
  6. import webdav.client as wc
  7. davoptions = {
  8. 'webdav_hostname': "https://fdroid.lsd.cat",
  9. 'webdav_login': "login",
  10. 'webdav_password': "password"
  11. }
  12. repo_url = "https://fdroid.lsd.cat"
  13. repo_name = "lsd.cat Proprietary Apps Repo"
  14. repo_icon = "fdroid-icon.png"
  15. repo_description = """
  16. This is a repository to install proprietary apps via fdroid
  17. """
  18. repo_original_url = "https://MyFirstFDroidRepo.org/fdroid/repo"
  19. repo_original_name = "My First F-Droid Repo Demo"
  20. repo_original_icon = "fdroid-icon.png"
  21. repo_original_description = """
  22. This is a repository of apps to be used with F-Droid. Applications in this
  23. repository are either official binaries built by the original application
  24. developers, or are binaries built from source by the admin of f-droid.org
  25. using the tools on https://gitlab.com/u/fdroid.
  26. """
  27. keystore = None
  28. keystorepass = None
  29. repo = 'fdroid/'
  30. urls = [
  31. "https://www.whatsapp.com/android/",
  32. "https://help.netflix.com/en/node/57688",
  33. "https://download.spotify.com/android/SpotifyAndroid.apk",
  34. "https://updates.signal.org/android/latest.json",
  35. "https://wire.com/en/download/"
  36. ]
  37. def get_apk(baseurl):
  38. page = requests.get(baseurl)
  39. if page.headers['content-type'] == 'application/vnd.android.package-archive':
  40. name = baseurl.rsplit('/', 1)[-1]
  41. logging.info('Downloading ' + name)
  42. with open('repo/' + name, 'wb') as handle:
  43. for block in page.iter_content(1024):
  44. handle.write(block)
  45. else:
  46. url = re.findall('https\:\/\/(.*)\.apk', page.text)[0]
  47. get_apk('https://' + url + '.apk')
  48. def check_env(repo):
  49. if not shutil.which('fdroid'):
  50. logging.error('Please install fdroidserver')
  51. sys.exit(1)
  52. if os.path.isdir(repo) is False:
  53. try:
  54. os.mkdir(repo)
  55. except:
  56. logging.error('Cannot create repository directory')
  57. if ('repo' or 'config.py') not in os.listdir(repo):
  58. logging.info('Initializing a new repository')
  59. os.chdir(repo)
  60. os.system('fdroid init')
  61. with open('config.py', 'r') as file :
  62. filedata = file.read()
  63. filedata = filedata.replace(repo_original_url, repo_url)
  64. filedata = filedata.replace(repo_original_name, repo_name)
  65. filedata = filedata.replace(repo_original_description, repo_description)
  66. with open('config.py', 'w') as file:
  67. file.write(filedata)
  68. else:
  69. os.chdir(repo)
  70. logging.info('Repo already exists')
  71. # TODO import keystore and check keys
  72. def build(repo):
  73. os.system('fdroid update -c')
  74. def publish(repo, davoptions):
  75. client = wc.Client(davoptions)
  76. files = os.listdir('repo/')
  77. for file in files:
  78. if os.path.isfile(file):
  79. client.upload_sync(remote_path="/repo/" + file, local_path="repo/" +file)
  80. for size in ['/', '-120/', '-160/', '-240/', '-320/', '-480/', '-640/']:
  81. files = os.listdir('repo/icons' + size)
  82. for file in files:
  83. client.upload_sync(remote_path="/repo/icons" + size + file, local_path="repo/icons" + size + file)
  84. def main():
  85. check_env(repo)
  86. for url in urls:
  87. get_apk(url)
  88. build(repo)
  89. publish(repo, davoptions)
  90. main()