Esempio n. 1
0
def main():
    serversJSON = PyAl.nonvolatile("servers.json")
    bundleID = PyAl.bundle()

    with open(serversJSON) as f:
        servers = json.load(f)

    if sys.argv[1] == "add":
        name = sys.argv[2]
        user = sys.argv[3]
        pw = sys.argv[4]
        address = sys.argv[5]
        path = sys.argv[6]
        if len(sys.argv) == 8:
            url = sys.argv[7]
            if not url.endswith("/"):
                url = url + "/"
        else:
            url = None

        if not path.endswith("/"):
            path = path + "/"

        serverData = {
            "user": user,
            "address": address,
            "path": path,
            "url": url
        }
        servers[name] = serverData

        k = PyAl.Keychain("%s.%s" % (bundleID, address))
        k.storePassword(user, pw)

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Added %s (%s@%s)" % (name, user, address)

    if sys.argv[1] == "remove":
        name = sys.argv[2]
        delServerData = servers.pop(name)

        k = PyAl.Keychain("%s.%s" % (bundleID, delServerData["address"]))
        k.deletePassword(delServerData["user"])

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Deleted %s (%s@%s)" % (name, delServerData["user"],
                                      delServerData["address"])

    if sys.argv[1] == "finder":
        name = sys.argv[2]
        serverData = servers[name]

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        pathList = subprocess.check_output(
            ["osascript", "getFinder.applescript"])
        pathList = pathList.split(" , ")

        cleanPaths = []
        for path in pathList:
            if len(path):
                newPath = path[1:]
                if "'" in newPath:
                    newPath = newPath.replace("'", "")
                if ", " in newPath:
                    newPath = newPath.replace(", ", "")
                if "\n" in newPath:
                    newPath = newPath.replace("\n", "")
                cleanPaths.append(newPath)
        doUpload(serverData, cleanPaths)

    if sys.argv[1] == "path":
        name = sys.argv[2]
        pathList = sys.argv[3]

        pathSplit = re.compile(" (?=/|~)")
        pathList = re.split(pathSplit, pathList)

        for path in pathList:
            if "~" in path:
                pathList.remove(path)
                path = os.path.expanduser(path)
                pathList.append(path)

        serverData = servers[name]

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        doUpload(serverData, pathList)

    if sys.argv[1] == "setdefault":
        name = sys.argv[2]
        serverData = servers[name]

        servers["default"] = serverData

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Designated %s (%s@%s) default." % (name, serverData["user"],
                                                  serverData["address"])

    if sys.argv[1] == "default":
        path = sys.argv[2]

        pathList = path.split("\t")

        try:
            serverData = servers["default"]
        except KeyError:
            print "No default server designated."
            return

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        doUpload(serverData, pathList)