Esempio n. 1
0
    def __init__(self):

        self.DEBUG = False
        self.DEVELOPMENT = False
        self.TESTING = False

        # Mail server config
        self.MAIL_SERVER = 'smtp.gmail.com'
        self.MAIL_PORT = 465
        self.MAIL_USE_TLS = False
        self.MAIL_USE_SSL = True

        # Mail credentials and recipient
        try:
            kr = CryptFileKeyring()
            kr.file_path = os.path.join(os.getcwd(), 'keyring')
            self.MAIL_USERNAME = kr.get_password("scheduled_mail", "MAIL_USER")
            self.MAIL_PASSWORD = kr.get_password("scheduled_mail", "MAIL_PASSWORD")
            self.RECIPIENT = kr.get_password("scheduled_mail", "RECIPIENT")
        except ValueError as e:
            raise KeyringError("Error while accessing the keyring.") from e

        # Scheduler settings
        self.SCHEDULER_INTERVAL = 1

        # Config file for instances
        self.INSTANCE_PATH = "instances.json"
        self.INSTANCE_START_DATE = datetime(2018, 6, 19, 0, 0, 0)
Esempio n. 2
0
def get_password(system, username, lib='keyrings.cryptfile',
                 env='KEYRING_CRYPTFILE_PASSWORD', ask=True):
    """
    Restores a password.
    By default, uses :epkg:`keyring`.

    :param system: system
    :param username: username
    :param lib: which lib to use to store the password
    :param env: see below
    :param ask: ask for password if missing
    :return: password

    If `lib == 'keyrings.cryptfile'`, the function used the environment
    variable *env*, if present, no password is asked.
    """
    if lib == 'keyring':
        from keyring import get_password as lib_get_password
        pwd = lib_get_password(system, username)
        if pwd in (None, '', b''):
            raise RuntimeError(  # pragma: no cover
                "Unable to restore a password with keyring for '{}', '{}'.".format(
                    system, username))
        return pwd
    if lib == 'keyrings.cryptfile':
        from keyrings.cryptfile.cryptfile import CryptFileKeyring  # pylint: disable=E0401
        kr = CryptFileKeyring()
        kr.keyring_key = getenv("KEYRING_CRYPTFILE_PASSWORD")
        if kr.keyring_key is None and ask:
            kr.keyring_key = getpass()
        return kr.get_password(system, username)
    raise RuntimeError(
        "Unknown library '{}'.".format(lib))
class MinervaConfig(object):
    def __init__(self):
        self.settings_obj = {}
        self.descriptions = {
            'default':'Determines whether the passwords are set to default',
            'use_stored_credentials':'If value is "email" or "minerva", then use stored credentials regularly. Default: "false"'
        }
        self.defaults_obj = {
            'default':'true',
            'use_stored_credentials':'false'
        }
        self.kr = CryptFileKeyring()
    def __getitem__(self,key):
        return self.settings_obj[key]
    def __setitem__(self,key,value):
        self.settings_obj[key] = value
    def get_settings(self, keyring_pass='', inConsole=False):
        """Loads the settings from the computer's keyring"""
        
        if keyring_pass == '' and inConsole:
            self.kr.keyring_key = getpass.getpass() # only when in the console and no argument already given
        self.kr.keyring_key = keyring_pass

        # check if it's the first time for keys
        if self.kr.get_password('minervaclient_default','minerva') is None:
            self.default_settings()
        for key in self.descriptions.keys():
            self[key] = self.kr.get_password('minervaclient_'+key,'minerva')
    def set_settings(self):
        """Takes the current settings and persists the changes to computer storage"""
        for key, item in self.settings_obj.items():
            self.kr.set_password('minervaclient_'+key,'minerva',item)
    def default_settings(self, inConsole=False):
        """Resets the current settings to original"""
        for key, item in self.defaults_obj.items():
            self.kr.set_password('minervaclient_'+key,'minerva',item)
    def list_settings(self):
        result = [ i for i in self.settings_obj.keys() ]
        result.sort()
        return result
Esempio n. 4
0
class Crypt(object):
    def __init__(self):
        self.path = "/root/.local/share/webtentacle_keyring"
        self.mother_service = '?'
        self.kr = CryptFileKeyring()
        self.kr.keyring_key = '?'
        parser = argparse.ArgumentParser(
            description="Decrypt the system file",
            usage='''crypt decrypt --username <username>
            crypt encrypt --username <username> --password <password> 
            
The most commonly used decrypt commands are:
    crypt decrypt --username admin, returns password           
''')
        parser.add_argument('command', help='Subcommand to run')
        args = parser.parse_args(sys.argv[1:2])
        if not hasattr(self, args.command):
            print('Unrecognized command')
            parser.print_help()
            exit(1)
        getattr(self, args.command)()

    def decrypt(self):
        try:
            parser = argparse.ArgumentParser(
                description="decrypt service usernames's password")
            parser.add_argument('--username', '-u')
            args = parser.parse_args(sys.argv[2:])

            # invoke the keyring
            print(self.kr.get_password(self.mother_service, args.username),
                  end='')
        except Exception as msg:
            print("Error in keyring decryption, {}".format(str(msg)))
            sys.exit(2)

    def encrypt(self):
        try:
            parser = argparse.ArgumentParser(
                description="encrypt service username's passowrd")
            parser.add_argument('--username', '-u')
            parser.add_argument('--password', '-p')
            args = parser.parse_args(sys.argv[2:])
            self.kr.set_password(self.mother_service, args.username,
                                 args.password)
            return 0
        except Exception as msg:
            print("Error in keyring encryption, {}".format(str(msg)))
            sys.exit(2)
Esempio n. 5
0
def get_password(key: str, service: str):
    config = read_config()
    try:
        cryptfile_pw = config.get("cryptfile", "password")
    except configparser.NoSectionError:
        cryptfile_pw = None

    if cryptfile_pw is not None:
        # See https://github.com/frispete/keyrings.cryptfile#example-session
        # on how to set pws.
        kr = CryptFileKeyring()
        kr.keyring_key = base64_decode(cryptfile_pw)
        pw = kr.get_password(service, key)
        if not pw:
            code = f"import net_worth_tracker as nwt; nwt.utils.set_password('{service}', '{key}')"
            raise Exception(f'Use:\npython -c "{code}"')
    else:
        pw = keyring.get_password(service, key)
        if not pw:
            raise Exception(f"python -m keyring set {service} {key}")

    return pw
Esempio n. 6
0
from os import getenv
from keyrings.cryptfile.cryptfile import CryptFileKeyring
kr = CryptFileKeyring()
kr.keyring_key = getenv("KEYRING_CRYPTFILE_PASSWORD")
print(kr.get_password("web", "pyquickhelper,user"))
Esempio n. 7
0
from pathlib import Path

from keyrings.cryptfile.cryptfile import CryptFileKeyring
from PyQt5 import QtWidgets

from audio_app import VkAudioApp


def ui():
    app = QtWidgets.QApplication(sys.argv)
    window = VkAudioApp(info, cookie, keyring)
    window.show()
    app.exec_()


if __name__ == "__main__":
    keyring = CryptFileKeyring()
    keyring.keyring_key = os.getlogin()
    home = Path.home() / ".vk_downloader"
    try:
        home.mkdir(exist_ok=True)
    except (PermissionError, FileNotFoundError):
        home = tempfile.TemporaryDirectory()
    cookie = home / "vk_cookies.json"
    data = keyring.get_password("vk_music_downloader", os.getlogin())
    if isinstance(data, str):
        info = data.split("|")
    else:
        info = None
    ui()
Esempio n. 8
0
aplay = "aplay -q -D %s -f %s --disable-resample --disable-channels --disable-channels --disable-softvol final.wav" % (
    AUDIODEV, MySource.SampleFormat)
if HASPA is True:
    print("Using pasuspender to bypass pulseaudio.")
    aplay = pasuspender + aplay

HASMQA = (which('mqadec') is not None) and (which('mqarender') is not None)

session = tidalapi.Session()

login_attempts = 0
allowed_attempts = 3
while login_attempts < allowed_attempts:
    kr = CryptFileKeyring()
    username = input('TIDAL username: '******'TIDAL password: '******'TIDAL username: '******'\N{EIGHTH NOTE} Successfully logged in! \N{EIGHTH NOTE}')
            except UnicodeEncodeError:
                print('Successfully logged in!')
            break
        else:
            print(
Esempio n. 9
0
    def run(self, argv):
        # parse args, setup logging and prepare keyrings
        args = self.parser.parse_args(argv)
        self.setup_logging(args.verbose)
        inkr = CryptFileKeyring()
        outkr = CryptFileKeyring()
        outkr.aesmode = args.aesmode

        # prepare infile
        infile = args.infile
        if not infile:
            infile = inkr.file_path
        else:
            inkr.file_path = infile
            inkr.filename = os.path.basename(infile)
        if not os.path.exists(infile):
            self.errexit('%s not found' % infile)
        if not inkr._check_file():
            self.errexit('Failed to parse %s' % infile)
        log.info('infile %s: %s', infile, inkr.scheme)

        # prepare outfile
        outfile = args.outfile
        if not outfile:
            outfile = infile + '.%d' % os.getpid()
        if os.path.exists(outfile):
            if os.path.samefile(infile, outfile):
                self.errexit('infile and outfile must NOT be the same file')
            # outfile exists: rename
            os.rename(outfile, outfile + '~')
            log.info('%s renamed to %s~', outfile, outfile)
        outkr.file_path = outfile
        outkr.filename = os.path.basename(outfile)
        log.info('outfile %s: %s', outfile, outkr.scheme)

        # unlock the infile keyring
        try:
            inkr.keyring_key
        except ValueError as e:
            self.errexit('Unlock %s: %s' % (infile, e))

        # keep old password or request password for new keyring
        if args.keep:
            outkr._get_new_password = lambda: inkr.keyring_key
        else:
            outkr.keyring_key

        # process infile
        config = configparser.RawConfigParser()
        config.read(infile)
        for section in config.sections():
            log.debug('process section: [%s]', section)
            if section != escape('keyring-setting'):
                for username in config.options(section):
                    username = unescape(username)
                    section = unescape(section)
                    log.info('process: [%s] %s', section, username)
                    password = inkr.get_password(section, username)
                    if password:
                        outkr.set_password(section, username, password)
                        log.debug('[%s] %s: %s', section, username,  password)
                    else:
                        log.error('invalid entry: [%s]%s', section, username)

        return 0