author | Pascal Volk <user@localhost.localdomain.org> |
Mon, 09 Jun 2014 20:09:44 +0000 | |
branch | v0.7.x |
changeset 758 | 332089388204 |
parent 735 | ddcad86f7386 |
permissions | -rw-r--r-- |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
1 |
# -*- coding: UTF-8 -*- |
703
58815c004a61
Updated copyright notices to include the year 2014.
Pascal Volk <user@localhost.localdomain.org>
parents:
675
diff
changeset
|
2 |
# Copyright (c) 2007 - 2014, Pascal Volk |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
3 |
# See COPYING for distribution information. |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
4 |
""" |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
5 |
VirtualMailManager.account |
302
32b4a39b5640
VMM/maillocation: Reworked class MailLocation to match the new
Pascal Volk <neverseen@users.sourceforge.net>
parents:
293
diff
changeset
|
6 |
~~~~~~~~~~~~~~~~~~~~~~~~~~ |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
8 |
Virtual Mail Manager's Account class to manage e-mail accounts. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
9 |
""" |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
10 |
|
532
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
11 |
from VirtualMailManager.common import version_str, \ |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
12 |
format_domain_default |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
306
diff
changeset
|
13 |
from VirtualMailManager.constants import \ |
252
af555e6967c8
VMM/Account: renamed function getAccountByID -> get_account_by_uid.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
250
diff
changeset
|
14 |
ACCOUNT_EXISTS, ACCOUNT_MISSING_PASSWORD, ALIAS_PRESENT, \ |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
306
diff
changeset
|
15 |
INVALID_ARGUMENT, INVALID_MAIL_LOCATION, NO_SUCH_ACCOUNT, \ |
451
2408a3cd4bea
VMM/account: Removed unused import.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
444
diff
changeset
|
16 |
NO_SUCH_DOMAIN, VMM_ERROR |
614
1ec3497a6733
VMM: Moved transport-validation to common.
Pascal Volk <user@localhost.localdomain.org>
parents:
613
diff
changeset
|
17 |
from VirtualMailManager.common import validate_transport |
442
abcd73f5e980
VMM/account: Sorted imports …
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
18 |
from VirtualMailManager.domain import Domain |
abcd73f5e980
VMM/account: Sorted imports …
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
19 |
from VirtualMailManager.emailaddress import EmailAddress |
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
20 |
from VirtualMailManager.errors import VMMError, AccountError as AErr |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
21 |
from VirtualMailManager.maillocation import MailLocation |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
22 |
from VirtualMailManager.password import pwhash |
442
abcd73f5e980
VMM/account: Sorted imports …
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
23 |
from VirtualMailManager.quotalimit import QuotaLimit |
abcd73f5e980
VMM/account: Sorted imports …
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
24 |
from VirtualMailManager.transport import Transport |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
25 |
from VirtualMailManager.serviceset import ServiceSet |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
27 |
__all__ = ('Account', 'get_account_by_uid') |
225
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
28 |
|
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
29 |
_ = lambda msg: msg |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
30 |
cfg_dget = lambda option: None |
225
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
31 |
|
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
32 |
|
121
7ccc05774118
Converted to new-style class, added __slots__, updated queries.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
115
diff
changeset
|
33 |
class Account(object): |
3
a9b44e04bf01
* VirtualMailManager/Account.py:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
0
diff
changeset
|
34 |
"""Class to manage e-mail accounts.""" |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
35 |
__slots__ = ('_addr', '_dbh', '_domain', '_mail', '_new', '_passwd', |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
36 |
'_qlimit', '_services', '_transport', '_note', '_uid') |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
37 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
38 |
def __init__(self, dbh, address): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
39 |
"""Creates a new Account instance. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
40 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
41 |
When an account with the given *address* could be found in the |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
42 |
database all relevant data will be loaded. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
43 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
44 |
Arguments: |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
45 |
|
694
b1bfd4d1d9c0
Dropped pyPgSQL support.
Pascal Volk <user@localhost.localdomain.org>
parents:
691
diff
changeset
|
46 |
`dbh` : psycopg2._psycopg.connection |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
47 |
A database connection for the database access. |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
48 |
`address` : VirtualMailManager.EmailAddress.EmailAddress |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
49 |
The e-mail address of the (new) Account. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
50 |
""" |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
51 |
if not isinstance(address, EmailAddress): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
52 |
raise TypeError("Argument 'address' is not an EmailAddress") |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
53 |
self._addr = address |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
54 |
self._dbh = dbh |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
55 |
self._domain = Domain(self._dbh, self._addr.domainname) |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
56 |
if not self._domain.gid: |
341
6709d0faf2f5
VMM/…: Unified messages and removed non-ASCII quotes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
338
diff
changeset
|
57 |
# TP: Hm, what “quotation marks” should be used? |
6709d0faf2f5
VMM/…: Unified messages and removed non-ASCII quotes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
338
diff
changeset
|
58 |
# If you are unsure have a look at: |
6709d0faf2f5
VMM/…: Unified messages and removed non-ASCII quotes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
338
diff
changeset
|
59 |
# http://en.wikipedia.org/wiki/Quotation_mark,_non-English_usage |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
60 |
raise AErr(_("The domain '%s' does not exist.") % |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
61 |
self._addr.domainname, NO_SUCH_DOMAIN) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
62 |
self._uid = 0 |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
63 |
self._mail = None |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
64 |
self._qlimit = None |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
65 |
self._services = None |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
66 |
self._transport = None |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
67 |
self._note = None |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
68 |
self._passwd = None |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
69 |
self._new = True |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
70 |
self._load() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
71 |
|
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
72 |
def __bool__(self): |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
73 |
"""Returns `True` if the Account is known, `False` if it's new.""" |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
74 |
return not self._new |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
75 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
76 |
def _load(self): |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
77 |
"""Load 'uid', 'mid', 'qid', 'ssid', 'tid' and 'note' from the |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
78 |
database and set _new to `False` - if the user could be found. """ |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
79 |
dbc = self._dbh.cursor() |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
80 |
dbc.execute('SELECT uid, mid, qid, ssid, tid, note FROM users ' |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
81 |
'WHERE gid = %s AND local_part = %s', |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
82 |
(self._domain.gid, self._addr.localpart)) |
9
e3d3dbeb5b84
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
8
diff
changeset
|
83 |
result = dbc.fetchone() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
84 |
dbc.close() |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
85 |
if result: |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
86 |
self._uid, _mid, _qid, _ssid, _tid, _note = result |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
87 |
|
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
88 |
def load_helper(ctor, own, field, dbresult): |
638
0de0b9e75c9f
VMM: Partial PEP-308-ification.
Pascal Volk <user@localhost.localdomain.org>
parents:
614
diff
changeset
|
89 |
cur = None if own is None else getattr(own, field) |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
90 |
if cur != dbresult: |
559
cc0f67f99780
VMM: The Python 2.4.x compatibility commit.
Pascal Volk <user@localhost.localdomain.org>
parents:
543
diff
changeset
|
91 |
kwargs = {field: dbresult} |
cc0f67f99780
VMM: The Python 2.4.x compatibility commit.
Pascal Volk <user@localhost.localdomain.org>
parents:
543
diff
changeset
|
92 |
if dbresult is None: |
cc0f67f99780
VMM: The Python 2.4.x compatibility commit.
Pascal Volk <user@localhost.localdomain.org>
parents:
543
diff
changeset
|
93 |
return dbresult |
cc0f67f99780
VMM: The Python 2.4.x compatibility commit.
Pascal Volk <user@localhost.localdomain.org>
parents:
543
diff
changeset
|
94 |
else: |
cc0f67f99780
VMM: The Python 2.4.x compatibility commit.
Pascal Volk <user@localhost.localdomain.org>
parents:
543
diff
changeset
|
95 |
return ctor(self._dbh, **kwargs) |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
96 |
|
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
97 |
self._qlimit = load_helper(QuotaLimit, self._qlimit, 'qid', _qid) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
98 |
self._services = load_helper(ServiceSet, self._services, 'ssid', |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
99 |
_ssid) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
100 |
self._transport = load_helper(Transport, self._transport, 'tid', |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
101 |
_tid) |
306
504fd29b4712
VMM/Account: s/prefix/mbformat/ and pass the dbh to MailLocation.__init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
302
diff
changeset
|
102 |
self._mail = MailLocation(self._dbh, mid=_mid) |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
103 |
self._note = _note |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
104 |
self._new = False |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
105 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
106 |
def _set_uid(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
107 |
"""Set the unique ID for the new Account.""" |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
108 |
assert self._uid == 0 |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
109 |
dbc = self._dbh.cursor() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
110 |
dbc.execute("SELECT nextval('users_uid')") |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
111 |
self._uid = dbc.fetchone()[0] |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
112 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
113 |
|
9
e3d3dbeb5b84
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
8
diff
changeset
|
114 |
def _prepare(self, maillocation): |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
115 |
"""Check and set different attributes - before we store the |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
116 |
information in the database. |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
117 |
""" |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
118 |
if maillocation.dovecot_version > cfg_dget('misc.dovecot_version'): |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
119 |
raise AErr(_("The mailbox format '%(mbfmt)s' requires Dovecot " |
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
120 |
">= v%(version)s.") % { |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
404
diff
changeset
|
121 |
'mbfmt': maillocation.mbformat, |
306
504fd29b4712
VMM/Account: s/prefix/mbformat/ and pass the dbh to MailLocation.__init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
302
diff
changeset
|
122 |
'version': version_str(maillocation.dovecot_version)}, |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
123 |
INVALID_MAIL_LOCATION) |
613
7b3494f1a2ef
VMM/account: Fixed account's transport check.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
124 |
transport = self._transport or self._domain.transport |
614
1ec3497a6733
VMM: Moved transport-validation to common.
Pascal Volk <user@localhost.localdomain.org>
parents:
613
diff
changeset
|
125 |
validate_transport(transport, maillocation) |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
126 |
self._mail = maillocation |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
127 |
self._set_uid() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
128 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
129 |
def _update_tables(self, column, value): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
130 |
"""Update various columns in the users table. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
131 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
132 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
133 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
134 |
`column` : basestring |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
135 |
Name of the table column. Currently: qid, ssid and tid |
670
f374ef062c94
VMM/*: Post-2to3 fix. Updated some error messages/comments.
Pascal Volk <user@localhost.localdomain.org>
parents:
662
diff
changeset
|
136 |
`value` : int |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
137 |
The referenced key |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
138 |
""" |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
139 |
if column not in ('qid', 'ssid', 'tid'): |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
140 |
raise ValueError('Unknown column: %r' % column) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
141 |
dbc = self._dbh.cursor() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
142 |
dbc.execute('UPDATE users SET %s = %%s WHERE uid = %%s' % column, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
143 |
(value, self._uid)) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
144 |
if dbc.rowcount > 0: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
145 |
self._dbh.commit() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
146 |
dbc.close() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
147 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
148 |
def _count_aliases(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
149 |
"""Count all alias addresses where the destination address is the |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
150 |
address of the Account.""" |
66
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
151 |
dbc = self._dbh.cursor() |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
152 |
dbc.execute('SELECT COUNT(destination) FROM alias WHERE destination ' |
374
ecdba68c7a2c
VMM/account: Account._count_aliases() cast the EmailAddress to str,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
153 |
'= %s', (str(self._addr),)) |
66
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
154 |
a_count = dbc.fetchone()[0] |
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
155 |
dbc.close() |
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
156 |
return a_count |
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
157 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
158 |
def _chk_state(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
159 |
"""Raise an AccountError if the Account is new - not yet saved in the |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
160 |
database.""" |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
161 |
if self._new: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
162 |
raise AErr(_("The account '%s' does not exist.") % self._addr, |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
163 |
NO_SUCH_ACCOUNT) |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
164 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
165 |
@property |
250
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
246
diff
changeset
|
166 |
def address(self): |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
246
diff
changeset
|
167 |
"""The Account's EmailAddress instance.""" |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
246
diff
changeset
|
168 |
return self._addr |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
246
diff
changeset
|
169 |
|
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
246
diff
changeset
|
170 |
@property |
329
41789df75339
VMM/account: Replaced property domain_directory by domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
171 |
def domain(self): |
41789df75339
VMM/account: Replaced property domain_directory by domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
172 |
"""The Domain to which the Account belongs to.""" |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
173 |
if self._domain: |
329
41789df75339
VMM/account: Replaced property domain_directory by domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
174 |
return self._domain |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
175 |
return None |
38
c44ea4526546
* 'VirtualMailManager/Alias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
176 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
177 |
@property |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
178 |
def gid(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
179 |
"""The Account's group ID.""" |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
180 |
if self._domain: |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
181 |
return self._domain.gid |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
182 |
return None |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
183 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
184 |
@property |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
185 |
def home(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
186 |
"""The Account's home directory.""" |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
187 |
if not self._new: |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
188 |
return '%s/%s' % (self._domain.directory, self._uid) |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
189 |
return None |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
190 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
191 |
@property |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
192 |
def mail_location(self): |
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
193 |
"""The Account's MailLocation.""" |
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
194 |
return self._mail |
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
195 |
|
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
196 |
@property |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
197 |
def note(self): |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
198 |
"""The Account's note.""" |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
199 |
return self._note |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
200 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
201 |
@property |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
202 |
def uid(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
203 |
"""The Account's unique ID.""" |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
204 |
return self._uid |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
205 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
206 |
def set_password(self, password): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
207 |
"""Set a password for the new Account. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
208 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
209 |
If you want to update the password of an existing Account use |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
210 |
Account.modify(). |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
211 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
212 |
Argument: |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
213 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
214 |
`password` : basestring |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
215 |
The password for the new Account. |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
216 |
""" |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
217 |
if not self._new: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
218 |
raise AErr(_("The account '%s' already exists.") % self._addr, |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
219 |
ACCOUNT_EXISTS) |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
220 |
if not isinstance(password, str) or not password: |
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
221 |
raise AErr(_("Could not accept password: '%s'") % password, |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
222 |
ACCOUNT_MISSING_PASSWORD) |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
223 |
self._passwd = password |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
224 |
|
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
225 |
def set_note(self, note): |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
226 |
"""Set the account's (optional) note. |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
227 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
228 |
Argument: |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
229 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
230 |
`note` : basestring or None |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
231 |
The note, or None to remove |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
232 |
""" |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
233 |
assert note is None or isinstance(note, str) |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
234 |
self._note = note |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
235 |
|
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
236 |
def save(self): |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
237 |
"""Save the new Account in the database.""" |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
238 |
if not self._new: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
239 |
raise AErr(_("The account '%s' already exists.") % self._addr, |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
240 |
ACCOUNT_EXISTS) |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
241 |
if not self._passwd: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
242 |
raise AErr(_("No password set for account: '%s'") % self._addr, |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
243 |
ACCOUNT_MISSING_PASSWORD) |
306
504fd29b4712
VMM/Account: s/prefix/mbformat/ and pass the dbh to MailLocation.__init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
302
diff
changeset
|
244 |
self._prepare(MailLocation(self._dbh, mbfmt=cfg_dget('mailbox.format'), |
504fd29b4712
VMM/Account: s/prefix/mbformat/ and pass the dbh to MailLocation.__init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
302
diff
changeset
|
245 |
directory=cfg_dget('mailbox.root'))) |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
246 |
dbc = self._dbh.cursor() |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
247 |
dbc.execute('INSERT INTO users (local_part, passwd, uid, gid, mid, ' |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
248 |
'qid, ssid, tid, note) ' |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
249 |
'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)', |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
250 |
(self._addr.localpart, |
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
251 |
pwhash(self._passwd, user=self._addr), self._uid, |
638
0de0b9e75c9f
VMM: Partial PEP-308-ification.
Pascal Volk <user@localhost.localdomain.org>
parents:
614
diff
changeset
|
252 |
self._domain.gid, self._mail.mid, |
0de0b9e75c9f
VMM: Partial PEP-308-ification.
Pascal Volk <user@localhost.localdomain.org>
parents:
614
diff
changeset
|
253 |
self._qlimit.qid if self._qlimit else None, |
0de0b9e75c9f
VMM: Partial PEP-308-ification.
Pascal Volk <user@localhost.localdomain.org>
parents:
614
diff
changeset
|
254 |
self._services.ssid if self._services else None, |
0de0b9e75c9f
VMM: Partial PEP-308-ification.
Pascal Volk <user@localhost.localdomain.org>
parents:
614
diff
changeset
|
255 |
self._transport.tid if self._transport else None, |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
256 |
self._note)) |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
257 |
self._dbh.commit() |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
258 |
dbc.close() |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
259 |
self._new = False |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
260 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
261 |
def modify(self, field, value): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
262 |
"""Update the Account's *field* to the new *value*. |
128
cf8116625866
Converted VirtualMailManager and Postconf to new-style classes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
121
diff
changeset
|
263 |
|
735
ddcad86f7386
VMM/account: Account.modify accepts a password hash.
Pascal Volk <user@localhost.localdomain.org>
parents:
726
diff
changeset
|
264 |
Possible values for *field* are: 'name', 'note' and 'pwhash'. |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
265 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
266 |
Arguments: |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
267 |
|
726
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
268 |
`field` : str |
735
ddcad86f7386
VMM/account: Account.modify accepts a password hash.
Pascal Volk <user@localhost.localdomain.org>
parents:
726
diff
changeset
|
269 |
The attribute name: 'name', 'note' or 'pwhash' |
726
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
270 |
`value` : str |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
271 |
The new value of the attribute. |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
272 |
""" |
735
ddcad86f7386
VMM/account: Account.modify accepts a password hash.
Pascal Volk <user@localhost.localdomain.org>
parents:
726
diff
changeset
|
273 |
if field not in ('name', 'note', 'pwhash'): |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
274 |
raise AErr(_("Unknown field: '%s'") % field, INVALID_ARGUMENT) |
735
ddcad86f7386
VMM/account: Account.modify accepts a password hash.
Pascal Volk <user@localhost.localdomain.org>
parents:
726
diff
changeset
|
275 |
if field == 'pwhash': |
ddcad86f7386
VMM/account: Account.modify accepts a password hash.
Pascal Volk <user@localhost.localdomain.org>
parents:
726
diff
changeset
|
276 |
field = 'passwd' |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
277 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
278 |
dbc = self._dbh.cursor() |
726
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
279 |
dbc.execute('UPDATE users SET %s = %%s WHERE uid = %%s' % field, |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
280 |
(value, self._uid)) |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
281 |
if dbc.rowcount > 0: |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
282 |
self._dbh.commit() |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
283 |
dbc.close() |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
284 |
|
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
285 |
def update_password(self, password, scheme=None): |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
286 |
"""Update the Account's password. |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
287 |
|
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
288 |
The given *password* will be hashed using password.pwhash. |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
289 |
When no *scheme* is specified, the configured scheme |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
290 |
(misc.password_scheme) will be used. |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
291 |
|
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
292 |
Arguments: |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
293 |
|
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
294 |
`password' : str |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
295 |
The Account's new plain text password |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
296 |
`scheme' : str |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
297 |
The password scheme used for password hashing; default None |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
298 |
""" |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
299 |
self._chk_state() |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
300 |
dbc = self._dbh.cursor() |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
301 |
dbc.execute('UPDATE users SET passwd = %s WHERE uid = %s', |
46b37d7c848a
VMM/account: Added method Account.update_password.
Pascal Volk <user@localhost.localdomain.org>
parents:
711
diff
changeset
|
302 |
(pwhash(password, scheme, self._addr), self.uid)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
303 |
if dbc.rowcount > 0: |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
304 |
self._dbh.commit() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
305 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
306 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
307 |
def update_quotalimit(self, quotalimit): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
308 |
"""Update the user's quota limit. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
309 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
310 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
311 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
312 |
`quotalimit` : VirtualMailManager.quotalimit.QuotaLimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
313 |
the new quota limit of the domain. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
314 |
""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
315 |
self._chk_state() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
316 |
if quotalimit == self._qlimit: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
317 |
return |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
318 |
self._qlimit = quotalimit |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
319 |
if quotalimit is not None: |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
320 |
assert isinstance(quotalimit, QuotaLimit) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
321 |
quotalimit = quotalimit.qid |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
322 |
self._update_tables('qid', quotalimit) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
323 |
|
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
324 |
def update_serviceset(self, serviceset): |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
325 |
"""Assign a different set of services to the Account. |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
326 |
|
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
327 |
Argument: |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
328 |
|
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
329 |
`serviceset` : VirtualMailManager.serviceset.ServiceSet |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
330 |
the new service set. |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
331 |
""" |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
332 |
self._chk_state() |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
333 |
if serviceset == self._services: |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
334 |
return |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
335 |
self._services = serviceset |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
336 |
if serviceset is not None: |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
337 |
assert isinstance(serviceset, ServiceSet) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
338 |
serviceset = serviceset.ssid |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
339 |
self._update_tables('ssid', serviceset) |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
340 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
341 |
def update_transport(self, transport): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
342 |
"""Sets a new transport for the Account. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
343 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
344 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
345 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
346 |
`transport` : VirtualMailManager.transport.Transport |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
347 |
the new transport |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
348 |
""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
349 |
self._chk_state() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
350 |
if transport == self._transport: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
351 |
return |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
352 |
self._transport = transport |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
353 |
if transport is not None: |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
354 |
assert isinstance(transport, Transport) |
614
1ec3497a6733
VMM: Moved transport-validation to common.
Pascal Volk <user@localhost.localdomain.org>
parents:
613
diff
changeset
|
355 |
validate_transport(transport, self._mail) |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
356 |
transport = transport.tid |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
357 |
self._update_tables('tid', transport) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
358 |
|
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
359 |
def _get_info_transport(self): |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
360 |
if self._transport: |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
361 |
return self._transport.transport |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
362 |
return format_domain_default(self._domain.transport.transport) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
363 |
|
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
364 |
def _get_info_serviceset(self): |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
365 |
if self._services: |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
366 |
services = self._services.services |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
367 |
fmt = lambda s: s |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
368 |
else: |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
369 |
services = self._domain.serviceset.services |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
370 |
fmt = format_domain_default |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
371 |
|
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
372 |
ret = {} |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
373 |
for service, state in services.items(): |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
374 |
# TP: A service (e.g. pop3 or imap) may be enabled/usable or |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
375 |
# disabled/unusable for a user. |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
376 |
ret[service] = fmt((_('disabled'), _('enabled'))[state]) |
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
377 |
return ret |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
378 |
|
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
379 |
def get_info(self): |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
380 |
"""Returns a dict with some information about the Account. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
381 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
382 |
The keys of the dict are: 'address', 'gid', 'home', 'imap' |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
389
diff
changeset
|
383 |
'mail_location', 'name', 'pop3', 'sieve', 'smtp', transport', 'uid', |
532
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
384 |
'uq_bytes', 'uq_messages', 'ql_bytes', 'ql_messages', and |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
385 |
'ql_domaindefault'. |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
386 |
""" |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
387 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
388 |
dbc = self._dbh.cursor() |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
389 |
dbc.execute('SELECT name, CASE WHEN bytes IS NULL THEN 0 ELSE bytes ' |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
390 |
'END, CASE WHEN messages IS NULL THEN 0 ELSE messages END ' |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
391 |
'FROM users LEFT JOIN userquota USING (uid) WHERE ' |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
392 |
'users.uid = %s', (self._uid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
393 |
info = dbc.fetchone() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
394 |
dbc.close() |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
395 |
if info: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
396 |
info = dict(list(zip(('name', 'uq_bytes', 'uq_messages'), info))) |
531
cf3eb03c1c4f
Modify Account class to handle NULL references
martin f. krafft <madduck@madduck.net>
parents:
528
diff
changeset
|
397 |
info.update(self._get_info_serviceset()) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
398 |
info['address'] = self._addr |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
399 |
info['gid'] = self._domain.gid |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
400 |
info['home'] = '%s/%s' % (self._domain.directory, self._uid) |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
401 |
info['mail_location'] = self._mail.mail_location |
532
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
402 |
if self._qlimit: |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
403 |
info['ql_bytes'] = self._qlimit.bytes |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
404 |
info['ql_messages'] = self._qlimit.messages |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
405 |
info['ql_domaindefault'] = False |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
406 |
else: |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
407 |
info['ql_bytes'] = self._domain.quotalimit.bytes |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
408 |
info['ql_messages'] = self._domain.quotalimit.messages |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
409 |
info['ql_domaindefault'] = True |
2bb40aaef94e
Modify userinfo output to indicate when domain defaults are displayed
martin f. krafft <madduck@madduck.net>
parents:
531
diff
changeset
|
410 |
info['transport'] = self._get_info_transport() |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
532
diff
changeset
|
411 |
info['note'] = self._note |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
412 |
info['uid'] = self._uid |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
413 |
return info |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
414 |
# nearly impossible‽ |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
415 |
raise AErr(_("Could not fetch information for account: '%s'") % |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
276
diff
changeset
|
416 |
self._addr, NO_SUCH_ACCOUNT) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
417 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
418 |
def get_aliases(self): |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
419 |
"""Return a list with all alias e-mail addresses, whose destination |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
420 |
is the address of the Account.""" |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
421 |
self._chk_state() |
90
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
422 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
276
diff
changeset
|
423 |
dbc.execute("SELECT address ||'@'|| domainname FROM alias, " |
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
276
diff
changeset
|
424 |
"domain_name WHERE destination = %s AND domain_name.gid = " |
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
276
diff
changeset
|
425 |
"alias.gid AND domain_name.is_primary ORDER BY address", |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
426 |
(str(self._addr),)) |
90
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
427 |
addresses = dbc.fetchall() |
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
428 |
dbc.close() |
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
429 |
aliases = [] |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
430 |
if addresses: |
144
4c6aa6c29dd7
Small optimizations in Account.getAliases() and Alias.getInfo().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
431 |
aliases = [alias[0] for alias in addresses] |
90
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
432 |
return aliases |
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
433 |
|
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
434 |
def delete(self, force=False): |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
435 |
"""Delete the Account from the database. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
436 |
|
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
437 |
Argument: |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
438 |
|
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
439 |
`force` : bool |
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
440 |
if *force* is `True`, all aliases, which points to the Account, |
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
441 |
will be also deleted. If there are aliases and *force* is |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
442 |
`False`, an AccountError will be raised. |
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
443 |
""" |
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
444 |
if not isinstance(force, bool): |
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
445 |
raise TypeError('force must be a bool') |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
446 |
self._chk_state() |
66
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
447 |
dbc = self._dbh.cursor() |
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
448 |
if force: |
661
29295afafa91
VMM/account: Fixed a typo in Account.delete().
Pascal Volk <user@localhost.localdomain.org>
parents:
614
diff
changeset
|
449 |
dbc.execute('DELETE FROM users WHERE uid = %s', (self._uid,)) |
65
5506433db9a3
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
450 |
# delete also all aliases where the destination address is the same |
5506433db9a3
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
451 |
# as for this account. |
114
e671210b04b8
Fixed a libpq.OperationalError in Account.delete()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
113
diff
changeset
|
452 |
dbc.execute("DELETE FROM alias WHERE destination = %s", |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
453 |
(str(self._addr),)) |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
454 |
self._dbh.commit() |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
455 |
else: # check first for aliases |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
456 |
a_count = self._count_aliases() |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
457 |
if a_count > 0: |
66
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
458 |
dbc.close() |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
459 |
raise AErr(_("There are %(count)d aliases with the " |
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
460 |
"destination address '%(address)s'.") % |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
461 |
{'count': a_count, 'address': self._addr}, |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
462 |
ALIAS_PRESENT) |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
463 |
dbc.execute('DELETE FROM users WHERE uid = %s', (self._uid,)) |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
464 |
self._dbh.commit() |
66
995d538a6eb5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
65
diff
changeset
|
465 |
dbc.close() |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
466 |
self._new = True |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
467 |
self._uid = 0 |
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
468 |
self._addr = self._dbh = self._domain = self._passwd = None |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
442
diff
changeset
|
469 |
self._mail = self._qlimit = self._services = self._transport = None |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
470 |
|
225
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
471 |
|
252
af555e6967c8
VMM/Account: renamed function getAccountByID -> get_account_by_uid.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
250
diff
changeset
|
472 |
def get_account_by_uid(uid, dbh): |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
473 |
"""Search an Account by its UID. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
474 |
|
252
af555e6967c8
VMM/Account: renamed function getAccountByID -> get_account_by_uid.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
250
diff
changeset
|
475 |
This function returns a dict (keys: 'address', 'gid' and 'uid'), if an |
af555e6967c8
VMM/Account: renamed function getAccountByID -> get_account_by_uid.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
250
diff
changeset
|
476 |
Account with the given *uid* exists. |
af555e6967c8
VMM/Account: renamed function getAccountByID -> get_account_by_uid.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
250
diff
changeset
|
477 |
|
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
478 |
Argument: |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
479 |
|
670
f374ef062c94
VMM/*: Post-2to3 fix. Updated some error messages/comments.
Pascal Volk <user@localhost.localdomain.org>
parents:
662
diff
changeset
|
480 |
`uid` : int |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
481 |
The Account unique ID. |
694
b1bfd4d1d9c0
Dropped pyPgSQL support.
Pascal Volk <user@localhost.localdomain.org>
parents:
691
diff
changeset
|
482 |
`dbh` : psycopg2._psycopg.connection |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
483 |
a database connection for the database access. |
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
484 |
""" |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
485 |
try: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
486 |
uid = int(uid) |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
487 |
except ValueError: |
670
f374ef062c94
VMM/*: Post-2to3 fix. Updated some error messages/comments.
Pascal Volk <user@localhost.localdomain.org>
parents:
662
diff
changeset
|
488 |
raise AErr(_('UID must be an integer.'), INVALID_ARGUMENT) |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
489 |
if uid < 1: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
490 |
raise AErr(_('UID must be greater than 0.'), INVALID_ARGUMENT) |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
491 |
dbc = dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
276
diff
changeset
|
492 |
dbc.execute("SELECT local_part||'@'|| domain_name.domainname AS address, " |
543
1b3bdce0bf87
Include account note in getuser output
martin f. krafft <madduck@madduck.net>
parents:
539
diff
changeset
|
493 |
"uid, users.gid, note FROM users LEFT JOIN domain_name ON " |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
276
diff
changeset
|
494 |
"(domain_name.gid = users.gid AND is_primary) WHERE uid = %s", |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
495 |
(uid,)) |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
496 |
info = dbc.fetchone() |
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
497 |
dbc.close() |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
498 |
if not info: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
499 |
raise AErr(_("There is no account with the UID: '%d'") % uid, |
245
f9a6b6701cf9
VMM/Account: reworked class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
236
diff
changeset
|
500 |
NO_SUCH_ACCOUNT) |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
638
diff
changeset
|
501 |
info = dict(list(zip(('address', 'uid', 'gid', 'note'), info))) |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
502 |
return info |
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
503 |
|
275
524f7ed5ad5b
VMM/Account: some modifications and small improvements in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
504 |
del _, cfg_dget |