home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / python-gnome2-desktop / examples / keyring.py
Encoding:
Python Source  |  2006-05-21  |  2.9 KB  |  95 lines

  1. #!/usr/bin/env python
  2. # -*- mode: python; coding: utf-8 -*-
  3. """
  4. Example showing how to store login/password in gnome keyring
  5. """
  6.  
  7. import gconf
  8. import gnomekeyring
  9. import gtk
  10.  
  11. GCONF_AUTH_KEY = "/apps/gnome-python-desktop/keyring_auth_token"
  12.  
  13. def do_something(login, password):
  14.     print "login: %s; password: %s" % (login, password)
  15.  
  16.  
  17. def get_login_password():
  18.     keyring = gnomekeyring.get_default_keyring_sync()
  19.     auth_token = gconf.client_get_default().get_int(GCONF_AUTH_KEY)
  20.     if auth_token > 0:
  21.         try:
  22.             secret = gnomekeyring.item_get_info_sync(keyring, auth_token).get_secret()
  23.         except gnomekeyring.DeniedError:
  24.             login = None
  25.             password = None
  26.             auth_token = 0
  27.         else:
  28.             login, password = secret.split('\n')
  29.     else:
  30.         login = None
  31.         password = None
  32.     
  33.     dialog = gtk.Dialog("Enter login", None, 0,
  34.                         (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
  35.                          gtk.STOCK_OK, gtk.RESPONSE_OK))
  36.     dialog.props.has_separator = False
  37.     dialog.set_default_response(gtk.RESPONSE_OK)
  38.  
  39.     hbox = gtk.HBox(False, 8)
  40.     hbox.set_border_width(8)
  41.     dialog.vbox.pack_start(hbox, False, False, 0)
  42.  
  43.     stock = gtk.image_new_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION,
  44.                                      gtk.ICON_SIZE_DIALOG)
  45.     hbox.pack_start(stock, False, False, 0)
  46.  
  47.     table = gtk.Table(2, 2)
  48.     table.set_row_spacings(4)
  49.     table.set_col_spacings(4)
  50.     hbox.pack_start(table, True, True, 0)
  51.  
  52.     label = gtk.Label("_Login")
  53.     label.set_use_underline(True)
  54.     table.attach(label, 0, 1, 0, 1)
  55.     local_entry1 = gtk.Entry()
  56.     local_entry1.set_activates_default(True)
  57.     if login is not None:
  58.         local_entry1.set_text(login)
  59.     table.attach(local_entry1, 1, 2, 0, 1)
  60.     label.set_mnemonic_widget(local_entry1)
  61.  
  62.     label = gtk.Label("_Password")
  63.     label.set_use_underline(True)
  64.     table.attach(label, 0, 1, 1, 2)
  65.     local_entry2 = gtk.Entry()
  66.     local_entry2.set_visibility(False)
  67.     local_entry2.set_activates_default(True)
  68.     if password is not None:
  69.         local_entry2.set_text(password)
  70.     table.attach(local_entry2, 1, 2, 1, 2)
  71.     label.set_mnemonic_widget(local_entry2)
  72.  
  73.     dialog.show_all()
  74.     while 1:
  75.         response = dialog.run()
  76.  
  77.         if response == gtk.RESPONSE_OK:
  78.             login = local_entry1.get_text()
  79.             password = local_entry2.get_text()
  80.             if not login or not password:
  81.                 continue
  82.             auth_token = gnomekeyring.item_create_sync(
  83.                 keyring,
  84.                 gnomekeyring.ITEM_GENERIC_SECRET,
  85.                 "GnomePythonDesktop keyring example, login information",
  86.                 dict(), "\n".join((login, password)), True)
  87.             gconf.client_get_default().set_int(GCONF_AUTH_KEY, auth_token)
  88.             return login, password
  89.         else:
  90.             raise SystemExit
  91.  
  92. if __name__ == '__main__':
  93.     login, password = get_login_password()
  94.     do_something(login, password)
  95.