5
from baseaccountmanager import BaseAccountManager, CannotSaveError
7
GCONF_AUTH_KEY = "/apps/cgmail/keyring_auth_token"
9
class KeyringAccounts(BaseAccountManager):
12
self.accounts_dicts = []
14
self.__retrieve_accounts_dicts()
19
def get_accounts_dicts(self):
20
return self.accounts_dicts
22
def __retrieve_accounts_dicts(self):
25
gnomekeyring.create_sync(keyring, None)
26
except gnomekeyring.AlreadyExistsError:
29
auth_token = gconf.client_get_default().get_int(GCONF_AUTH_KEY)
32
secret = gnomekeyring.item_get_info_sync(keyring,
33
auth_token).get_secret()
34
accounts = secret.split("\n")
35
for account in accounts:
37
params = account.split(";")
38
for element in params:
39
#param, value = element.split("=")
40
couple = element.split()
48
self.accounts_dicts.append(dict)
49
except gnomekeyring.DeniedError:
52
def remove_account(self, id):
55
for a in self.accounts_dicts:
59
del self.accounts_dicts[i]
63
def add_account(self, dic, force_id = None):
66
for d in self.accounts_dicts:
67
if int(d["id"]) > maxid:
70
dic["id"] = str(maxid + 1)
74
self.accounts_dicts.append(dic)
80
self.accounts_dicts = []
86
gnomekeyring.create_sync(keyring, None)
87
except gnomekeyring.AlreadyExistsError:
92
for dic in self.accounts_dicts:
93
for param, value in dic.iteritems():
94
if value.find(" ") != -1 or value.find(";") != -1 \
95
or value.find("\n") != -1:
96
print "Warning: reserved chars founded on ", value
97
print "You cannot use '=' or ';' or '\\n'"
98
print "trying to strip it"
99
value.replace("=", "").replace(";", "").replace("\n", "")
100
key += param + " " + value + ";"
103
key = key[:len(key) - 1]
106
key = key[:len(key) - 1]
109
auth_token = gnomekeyring.item_create_sync(
111
gnomekeyring.ITEM_GENERIC_SECRET,
112
"cgmail checker login informations",
113
dict(appname="cgmail, gmail checker"),
115
gconf.client_get_default().set_int(GCONF_AUTH_KEY, auth_token)
117
raise CannotSaveError()
120
if __name__ == "__main__":
122
k = KeyringAccounts()
123
# k.add_account({"username": "tesiot", "type": "gmail"})
124
# k.remove_account(2)
125
print k.get_accounts_dicts()