Acrolinx/AcrolinxURLProvider.py (33 lines of code) (raw):
#!/usr/bin/env python3
#
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""See docstring for AcrolinxURLProvider class"""
from __future__ import absolute_import, division, print_function, unicode_literals
from autopkglib import ProcessorError
from autopkglib.URLGetter import URLGetter
__all__ = ["AcrolinxURLProvider"]
URL = "https://{}:{}@download.acrolinx.com:1443/api/deliverablePackages/575b1d0d401ae30b00e90f40/download/latest?preserve_credentials=true&proxy=true"
class AcrolinxURLProvider(URLGetter):
"""Provides a download URL for Acrolinx."""
description = __doc__
input_variables = {
"username": {"required": True, "description": "Username for authentication."},
"password": {"required": True, "description": "Password for authentication"},
}
output_variables = {"url": {"description": "Download URL for Acrolinx."}}
def main(self):
"""Find the download URL"""
username = self.env["username"]
password = self.env["password"]
url = URL.format(username, password)
# Fetch the API data
curl_cmd = self.prepare_curl_cmd()
curl_cmd.extend(["--head", url])
raw_headers = self.download_with_curl(curl_cmd)
header = self.parse_headers(raw_headers)
# Use semantic versioning for the version string, although historically this
# hasn't been anything particularly problematic
acrolinx_url = header.get("http_redirected")
if not acrolinx_url:
self.output(f"Header: {header}")
raise ProcessorError(
"Header did not contain an 'http_redirected' "
"value containing the expected Acrolinx URL. Check your "
"username and password."
)
self.output(f"Found URL: {acrolinx_url}")
self.env["url"] = acrolinx_url
if __name__ == "__main__":
PROCESSOR = AcrolinxURLProvider()
PROCESSOR.execute_shell()