diff -r bf87d34a675c -r b05a3e28cf24 contrib/automation/hgautomation/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/automation/hgautomation/__init__.py Fri Mar 15 11:24:08 2019 -0700 @@ -0,0 +1,59 @@ +# __init__.py - High-level automation interfaces +# +# Copyright 2019 Gregory Szorc +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +# no-check-code because Python 3 native. + +import pathlib +import secrets + +from .aws import ( + AWSConnection, +) + + +class HGAutomation: + """High-level interface for Mercurial automation. + + Holds global state, provides access to other primitives, etc. + """ + + def __init__(self, state_path: pathlib.Path): + self.state_path = state_path + + state_path.mkdir(exist_ok=True) + + def default_password(self): + """Obtain the default password to use for remote machines. + + A new password will be generated if one is not stored. + """ + p = self.state_path / 'default-password' + + try: + with p.open('r', encoding='ascii') as fh: + data = fh.read().strip() + + if data: + return data + + except FileNotFoundError: + pass + + password = secrets.token_urlsafe(24) + + with p.open('w', encoding='ascii') as fh: + fh.write(password) + fh.write('\n') + + p.chmod(0o0600) + + return password + + def aws_connection(self, region: str): + """Obtain an AWSConnection instance bound to a specific region.""" + + return AWSConnection(self, region)