#!/bin/python # Setup Parser import parsers.paperMC import argparse import shutil import hashlib from os import error parser = argparse.ArgumentParser(description='A command-line tool to update a Minecraft Server.') parser.add_argument('api', metavar='api', help='which API to use') parser.add_argument('project', metavar='project', help='which project to query for') parser.add_argument('action', metavar='action', help='what action to execute') parser.add_argument('subAction', metavar='subAction', help='what sub action to execute') parser.add_argument('-o', nargs="?", help='Optional: Specify output filepath') args = parser.parse_args() print("mcUp.py, written by Caleb Fontenot") print(args.o) # PaperMC command functions def paperMC(project, action, subAction): if action == "get": if subAction == "versions": print(parsers.paperMC.getVersions(project)) elif subAction == "latest": latestVersion = parsers.paperMC.getLatest(project) buildNumber = parsers.paperMC.getBuildNumber(project, latestVersion) print("Latest version of "+project+" is "+latestVersion+" build #"+str(buildNumber[-1])) if action == "download": if subAction == "latest": latestVersion = parsers.paperMC.getLatest(project) output = parsers.paperMC.getJarInfo(project, latestVersion) if args.o != None: # Check if user set an output filepath output_file = args.o else: output_file = output["name"] with parsers.paperMC.downloadVersion(project, latestVersion) as raw: with open(output_file, 'wb') as file_object: shutil.copyfileobj(raw.raw, file_object) print("Downloaded "+latestVersion+" to "+output_file) #Calculate hash, compare with API given hash h_sha256 = hashlib.sha256() with open(output_file, 'rb') as file_object: chunk = 0 while chunk != b'': chunk = file_object.read(1024) h_sha256.update(chunk) if h_sha256.hexdigest() == output["sha256"]: print("sha256sum of downloaded file matches the sum that the API gave, jar is safe to use") else: raise error # Determine which API to use: if args.api == "paperMC": paperMC(args.project, args.action, args.subAction) else: print("Error: Unknown API: "+args.api)