mumble/scripts/mumble-build-number.py
Robert Adam 08ee2ab856 MAINT: Fix mumble-build-number.py script
Previously the script would assemble the query URL by taking the
individual parameters literally. However, for certain inputs this could
lead to an invalid URL, resulting in an error 400 (Bad Request) when
attempting to make this query to the server.

In order to avoid these situations, the parameters are now properly
encoded (quoted) before being inserted into the query URL. Thus, we
ensure to always produce valid URLs.
2022-08-14 23:03:21 +02:00

67 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Copyright 2022 The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.
#
# This script fetches the build number for a given commit
import argparse
import urllib.request
import urllib.parse
import sys
def fetch_build_number(commit = None, version = None, password = None):
if commit is None or version is None:
return None
parameter = {
"commit": commit,
"version": version
}
if not password is None:
parameter["token"] = password
query = "https://mumble.info/get-build-number?" + urllib.parse.urlencode(parameter)
try:
request = urllib.request.urlopen(query)
answer = request.read().decode("utf-8")
return int(answer)
except urllib.error.HTTPError:
# The request failed
return None
def main():
parser = argparse.ArgumentParser("This script will fetch the build number for the given commit hash")
parser.add_argument("--commit", help="The hash of the commit to fetch the build number for", metavar="HASH", required=True)
parser.add_argument("--version", help="The Mumble version the given commit belongs to (e.g. 1.4)", metavar="VERSION", required=True)
parser.add_argument("--password", help="The password to use in order to gain write access on the server")
parser.add_argument("--default", help="The default build number to use, in case none can be fetched. Note that this will cause this script to\
always succeed.", type=int)
args = parser.parse_args()
if not args.password is None and args.password.strip() == "":
# An empty password is considered to be no password at all
args.password = None
buildNumber = fetch_build_number(commit = args.commit, version = args.version, password = args.password)
if buildNumber is None and not args.default is None:
buildNumber = args.default
if buildNumber is None:
print("[ERROR]: Failed to fetch the build number for commit " + args.commit + " in Mumble v" + args.version, file=sys.stderr)
sys.exit(1)
else:
print(buildNumber)
sys.exit(0)
if __name__ == "__main__":
main()