File: http.py

package info (click to toggle)
python-keyring 25.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 552 kB
  • sloc: python: 1,923; sh: 17; makefile: 17
file content (39 lines) | stat: -rw-r--r-- 1,214 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"""
urllib2.HTTPPasswordMgr object using the keyring, for use with the
urllib2.HTTPBasicAuthHandler.

usage:
    import urllib2
    handlers = [urllib2.HTTPBasicAuthHandler(PasswordMgr())]
    urllib2.install_opener(handlers)
    urllib2.urlopen(...)

This will prompt for a password if one is required and isn't already
in the keyring. Then, it adds it to the keyring for subsequent use.
"""

import getpass

from . import delete_password, get_password, set_password


class PasswordMgr:
    def get_username(self, realm, authuri):
        return getpass.getuser()

    def add_password(self, realm, authuri, password):
        user = self.get_username(realm, authuri)
        set_password(realm, user, password)

    def find_user_password(self, realm, authuri):
        user = self.get_username(realm, authuri)
        password = get_password(realm, user)
        if password is None:
            prompt = f'password for {user}@{realm} for {authuri}: '
            password = getpass.getpass(prompt)
            set_password(realm, user, password)
        return user, password

    def clear_password(self, realm, authuri):
        user = self.get_username(realm, authuri)
        delete_password(realm, user)