author | Pascal Volk <user@localhost.localdomain.org> |
Sat, 09 Feb 2013 17:24:12 +0000 | |
branch | v0.7.x |
changeset 693 | 2e19ab98118a |
parent 691 | 932cd76bf879 |
child 694 | b1bfd4d1d9c0 |
permissions | -rw-r--r-- |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
1 |
# -*- coding: UTF-8 -*- |
675
d24f094d1cb5
Updated copyright notices to include the year 2013.
Pascal Volk <user@localhost.localdomain.org>
parents:
615
diff
changeset
|
2 |
# Copyright (c) 2007 - 2013, Pascal Volk |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
3 |
# See COPYING for distribution information. |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
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.domain |
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
6 |
~~~~~~~~~~~~~~~~~~~~~~~~~ |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
8 |
Virtual Mail Manager's Domain class to manage e-mail domains. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
9 |
""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
10 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
11 |
import os |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
12 |
import re |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
13 |
from random import choice |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
14 |
|
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
294
diff
changeset
|
15 |
from VirtualMailManager.constants import \ |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
16 |
ACCOUNT_AND_ALIAS_PRESENT, DOMAIN_ALIAS_EXISTS, DOMAIN_EXISTS, \ |
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
17 |
DOMAIN_INVALID, DOMAIN_TOO_LONG, NO_SUCH_DOMAIN, VMM_ERROR |
615
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
18 |
from VirtualMailManager.common import validate_transport |
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
19 |
from VirtualMailManager.errors import VMMError, DomainError as DomErr |
615
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
20 |
from VirtualMailManager.maillocation import MailLocation |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
21 |
from VirtualMailManager.quotalimit import QuotaLimit |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
22 |
from VirtualMailManager.serviceset import ServiceSet |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
23 |
from VirtualMailManager.transport import Transport |
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
24 |
|
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
26 |
MAILDIR_CHARS = '0123456789abcdefghijklmnopqrstuvwxyz' |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
27 |
RE_DOMAIN = re.compile(r"^(?:[a-z0-9-]{1,63}\.){1,}[a-z]{2,6}$") |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
28 |
_ = lambda msg: msg |
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
29 |
cfg_dget = lambda option: None |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
31 |
|
122
30abf0abf8f8
Converted to new-style class, added __slots__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
110
diff
changeset
|
32 |
class Domain(object): |
3
a9b44e04bf01
* VirtualMailManager/Account.py:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
0
diff
changeset
|
33 |
"""Class to manage e-mail domains.""" |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
34 |
__slots__ = ('_directory', '_gid', '_name', '_qlimit', '_services', |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
35 |
'_transport', '_note', '_dbh', '_new') |
225
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
222
diff
changeset
|
36 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
37 |
def __init__(self, dbh, domainname): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
38 |
"""Creates a new Domain instance. |
122
30abf0abf8f8
Converted to new-style class, added __slots__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
110
diff
changeset
|
39 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
40 |
Loads all relevant data from the database, if the domain could be |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
41 |
found. To create a new domain call the methods set_directory() and |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
42 |
set_transport() before save(). |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
43 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
44 |
A DomainError will be thrown when the *domainname* is the name of |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
45 |
an alias domain. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
46 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
47 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
48 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
49 |
`dbh` : pyPgSQL.PgSQL.Connection |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
50 |
a database connection for the database access |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
51 |
`domainname` : basestring |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
52 |
The name of the domain |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
53 |
""" |
199
0684790fff7c
VMM: renamed function chk_domainname() -> check_domainname().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
54 |
self._name = check_domainname(domainname) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
55 |
self._dbh = dbh |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
56 |
self._gid = 0 |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
57 |
self._qlimit = None |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
58 |
self._services = None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
59 |
self._transport = None |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
60 |
self._directory = None |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
61 |
self._note = None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
62 |
self._new = True |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
63 |
self._load() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
64 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
65 |
def _load(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
66 |
"""Load information from the database and checks if the domain name |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
67 |
is the primary one. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
69 |
Raises a DomainError if Domain._name isn't the primary name of the |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
70 |
domain. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
71 |
""" |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
72 |
dbc = self._dbh.cursor() |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
73 |
dbc.execute('SELECT dd.gid, qid, ssid, tid, domaindir, is_primary, ' |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
74 |
'note ' |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
75 |
'FROM domain_data dd, domain_name dn WHERE domainname = ' |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
76 |
'%s AND dn.gid = dd.gid', (self._name,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
77 |
result = dbc.fetchone() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
78 |
dbc.close() |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
79 |
if result: |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
80 |
if not result[5]: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
81 |
raise DomErr(_("The domain '%s' is an alias domain.") % |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
82 |
self._name, DOMAIN_ALIAS_EXISTS) |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
83 |
self._gid, self._directory = result[0], result[4] |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
84 |
self._qlimit = QuotaLimit(self._dbh, qid=result[1]) |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
85 |
self._services = ServiceSet(self._dbh, ssid=result[2]) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
86 |
self._transport = Transport(self._dbh, tid=result[3]) |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
87 |
self._note = result[6] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
88 |
self._new = False |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
89 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
90 |
def _set_gid(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
91 |
"""Sets the ID of the domain - if not set yet.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
92 |
assert self._gid == 0 |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
93 |
dbc = self._dbh.cursor() |
43
92a6132940f5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
35
diff
changeset
|
94 |
dbc.execute("SELECT nextval('domain_gid')") |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
95 |
self._gid = dbc.fetchone()[0] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
96 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
97 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
98 |
def _check_for_addresses(self): |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
99 |
"""Checks dependencies for deletion. Raises a DomainError if there |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
100 |
are accounts, aliases and/or relocated users. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
101 |
""" |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
102 |
dbc = self._dbh.cursor() |
492
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
103 |
dbc.execute('SELECT ' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
104 |
'(SELECT count(gid) FROM users WHERE gid = %(gid)u)' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
105 |
' as account_count, ' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
106 |
'(SELECT count(gid) FROM alias WHERE gid = %(gid)u)' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
107 |
' as alias_count, ' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
108 |
'(SELECT count(gid) FROM relocated WHERE gid = %(gid)u)' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
109 |
' as relocated_count' |
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
110 |
% {'gid': self._gid}) |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
111 |
result = dbc.fetchall() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
112 |
dbc.close() |
492
e5c2b3647971
Modify address check query to obtain well-defined result
martin f. krafft <madduck@madduck.net>
parents:
453
diff
changeset
|
113 |
result = result[0] |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
114 |
if any(result): |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
115 |
keys = ('account_count', 'alias_count', 'relocated_count') |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
116 |
raise DomErr(_('There are %(account_count)u accounts, ' |
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
117 |
'%(alias_count)u aliases and %(relocated_count)u ' |
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
118 |
'relocated users.') % dict(list(zip(keys, result))), |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
199
diff
changeset
|
119 |
ACCOUNT_AND_ALIAS_PRESENT) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
120 |
|
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
121 |
def _chk_state(self, must_exist=True): |
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
122 |
"""Checks the state of the Domain instance and will raise a |
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
123 |
VirtualMailManager.errors.DomainError: |
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
124 |
- if *must_exist* is `True` and the domain doesn't exist |
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
125 |
- or *must_exist* is `False` and the domain exists |
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
126 |
""" |
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
127 |
if must_exist and self._new: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
128 |
raise DomErr(_("The domain '%s' does not exist.") % self._name, |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
129 |
NO_SUCH_DOMAIN) |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
130 |
elif not must_exist and not self._new: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
131 |
raise DomErr(_("The domain '%s' already exists.") % self._name, |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
132 |
DOMAIN_EXISTS) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
133 |
|
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
134 |
def _update_tables(self, column, value): |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
135 |
"""Update table columns in the domain_data table.""" |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
136 |
dbc = self._dbh.cursor() |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
137 |
dbc.execute('UPDATE domain_data SET %s = %%s WHERE gid = %%s' % column, |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
138 |
(value, self._gid)) |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
139 |
if dbc.rowcount > 0: |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
140 |
self._dbh.commit() |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
141 |
dbc.close() |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
142 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
143 |
def _update_tables_ref(self, column, value, force=False): |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
144 |
"""Update various columns in the domain_data table. When *force* is |
534
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
145 |
`True`, the corresponding column in the users table will be reset to |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
146 |
NULL. |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
147 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
148 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
149 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
150 |
`column` : basestring |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
151 |
Name of the table column. Currently: qid, ssid and tid |
671
a9d86ccac044
VMM/*: Post-2to3 fix. Updated some error messages/comments.
Pascal Volk <user@localhost.localdomain.org>
parents:
653
diff
changeset
|
152 |
`value` : int |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
153 |
The referenced key |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
154 |
`force` : bool |
534
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
155 |
reset existing users. Default: `False` |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
156 |
""" |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
157 |
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:
379
diff
changeset
|
158 |
raise ValueError('Unknown column: %r' % column) |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
159 |
self._update_tables(column, value) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
160 |
if force: |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
161 |
dbc = self._dbh.cursor() |
534
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
162 |
dbc.execute('UPDATE users SET %s = NULL WHERE gid = %%s' % column, |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
163 |
(self._gid,)) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
164 |
if dbc.rowcount > 0: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
165 |
self._dbh.commit() |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
166 |
dbc.close() |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
167 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
168 |
@property |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
169 |
def gid(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
170 |
"""The GID of the Domain.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
171 |
return self._gid |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
172 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
173 |
@property |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
174 |
def name(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
175 |
"""The Domain's name.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
176 |
return self._name |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
177 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
178 |
@property |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
179 |
def directory(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
180 |
"""The Domain's directory.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
181 |
return self._directory |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
182 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
183 |
@property |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
184 |
def quotalimit(self): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
185 |
"""The Domain's quota limit.""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
186 |
return self._qlimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
187 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
188 |
@property |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
189 |
def serviceset(self): |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
190 |
"""The Domain's serviceset.""" |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
191 |
return self._services |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
192 |
|
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
193 |
@property |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
194 |
def transport(self): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
195 |
"""The Domain's transport.""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
196 |
return self._transport |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
197 |
|
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
198 |
@property |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
199 |
def note(self): |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
200 |
"""The Domain's note.""" |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
201 |
return self._note |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
202 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
203 |
def set_directory(self, basedir): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
204 |
"""Set the path value of the Domain's directory, inside *basedir*. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
205 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
206 |
Argument: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
207 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
208 |
`basedir` : basestring |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
209 |
The base directory of all domains |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
210 |
""" |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
211 |
self._chk_state(False) |
363
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
212 |
assert self._directory is None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
213 |
self._set_gid() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
214 |
self._directory = os.path.join(basedir, choice(MAILDIR_CHARS), |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
215 |
str(self._gid)) |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
216 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
217 |
def set_quotalimit(self, quotalimit): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
218 |
"""Set the quota limit for the new Domain. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
219 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
220 |
Argument: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
221 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
222 |
`quotalimit` : VirtualMailManager.quotalimit.QuotaLimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
223 |
The quota limit of the new Domain. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
224 |
""" |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
225 |
self._chk_state(False) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
226 |
assert isinstance(quotalimit, QuotaLimit) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
227 |
self._qlimit = quotalimit |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
228 |
|
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
229 |
def set_serviceset(self, serviceset): |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
230 |
"""Set the services for the new Domain. |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
231 |
|
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
232 |
Argument: |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
233 |
|
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
234 |
`serviceset` : VirtualMailManager.serviceset.ServiceSet |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
235 |
The service set for the new Domain. |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
236 |
""" |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
237 |
self._chk_state(False) |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
238 |
assert isinstance(serviceset, ServiceSet) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
239 |
self._services = serviceset |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
240 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
241 |
def set_transport(self, transport): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
242 |
"""Set the transport for the new Domain. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
243 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
244 |
Argument: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
245 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
246 |
`transport` : VirtualMailManager.Transport |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
247 |
The transport of the new Domain |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
248 |
""" |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
249 |
self._chk_state(False) |
363
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
250 |
assert isinstance(transport, Transport) |
615
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
251 |
validate_transport(transport, |
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
252 |
MailLocation(self._dbh, |
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
253 |
mbfmt=cfg_dget('mailbox.format'), |
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
254 |
directory=cfg_dget('mailbox.root'))) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
255 |
self._transport = transport |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
256 |
|
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
257 |
def set_note(self, note): |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
258 |
"""Set the domain's (optional) note. |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
259 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
260 |
Argument: |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
261 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
262 |
`note` : basestring or None |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
263 |
The note, or None to remove |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
264 |
""" |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
265 |
self._chk_state(False) |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
266 |
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:
534
diff
changeset
|
267 |
self._note = note |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
268 |
|
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
269 |
def save(self): |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
270 |
"""Stores the new domain in the database.""" |
453
f2934105181b
VMM/domain: Extended Domain._chk_state() to support both states.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
271 |
self._chk_state(False) |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
272 |
assert all((self._directory, self._qlimit, self._services, |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
273 |
self._transport)) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
274 |
dbc = self._dbh.cursor() |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
275 |
dbc.execute('INSERT INTO domain_data (gid, qid, ssid, tid, domaindir, ' |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
276 |
'note) ' |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
277 |
'VALUES (%s, %s, %s, %s, %s, %s)', (self._gid, |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
278 |
self._qlimit.qid, self._services.ssid, self._transport.tid, |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
279 |
self._directory, self._note)) |
379
7518d927d443
VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
280 |
dbc.execute('INSERT INTO domain_name (domainname, gid, is_primary) ' |
7518d927d443
VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
281 |
'VALUES (%s, %s, TRUE)', (self._name, self._gid)) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
282 |
self._dbh.commit() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
283 |
dbc.close() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
284 |
self._new = False |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
285 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
286 |
def delete(self, force=False): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
287 |
"""Deletes the domain. |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
288 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
289 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
290 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
291 |
`force` : bool |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
292 |
force the deletion of all available accounts, aliases and |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
293 |
relocated users. When *force* is `False` and there are accounts, |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
294 |
aliases and/or relocated users a DomainError will be raised. |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
295 |
Default `False` |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
296 |
""" |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
297 |
if not isinstance(force, bool): |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
298 |
raise TypeError('force must be a bool') |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
299 |
self._chk_state() |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
300 |
if not force: |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
301 |
self._check_for_addresses() |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
302 |
dbc = self._dbh.cursor() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
303 |
for tbl in ('alias', 'users', 'relocated', 'domain_name', |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
304 |
'domain_data'): |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
305 |
dbc.execute("DELETE FROM %s WHERE gid = %u" % (tbl, self._gid)) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
306 |
self._dbh.commit() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
307 |
dbc.close() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
308 |
self._gid = 0 |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
309 |
self._directory = self._qlimit = self._transport = None |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
310 |
self._services = None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
311 |
self._new = True |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
312 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
313 |
def update_quotalimit(self, quotalimit, force=False): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
314 |
"""Update the quota limit of the Domain. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
315 |
|
534
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
316 |
If *force* is `True`, accounts-specific overrides will be reset |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
317 |
for all existing accounts of the domain. Otherwise, the limit |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
318 |
will only affect accounts that use the default. |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
319 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
320 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
321 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
322 |
`quotalimit` : VirtualMailManager.quotalimit.QuotaLimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
323 |
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:
379
diff
changeset
|
324 |
`force` : bool |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
325 |
enforce new quota limit for all accounts, default `False` |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
326 |
""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
327 |
self._chk_state() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
328 |
assert isinstance(quotalimit, QuotaLimit) |
402
8984b1f4e6e3
VMM/domain: Execute the database updates of
Pascal Volk <neverseen@users.sourceforge.net>
parents:
392
diff
changeset
|
329 |
if not force and quotalimit == self._qlimit: |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
330 |
return |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
331 |
self._update_tables_ref('qid', quotalimit.qid, force) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
332 |
self._qlimit = quotalimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
333 |
|
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
334 |
def update_serviceset(self, serviceset, force=False): |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
335 |
"""Assign a different set of services to the Domain, |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
336 |
|
534
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
337 |
If *force* is `True`, accounts-specific overrides will be reset |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
338 |
for all existing accounts of the domain. Otherwise, the service |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
339 |
set will only affect accounts that use the default. |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
340 |
|
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
341 |
Arguments: |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
342 |
`serviceset` : VirtualMailManager.serviceset.ServiceSet |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
343 |
the new set of services |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
344 |
`force` |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
345 |
enforce the serviceset for all accounts, default `False` |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
346 |
""" |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
347 |
self._chk_state() |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
348 |
assert isinstance(serviceset, ServiceSet) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
349 |
if not force and serviceset == self._services: |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
350 |
return |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
351 |
self._update_tables_ref('ssid', serviceset.ssid, force) |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
352 |
self._services = serviceset |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
353 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
354 |
def update_transport(self, transport, force=False): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
355 |
"""Sets a new transport for the Domain. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
356 |
|
534
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
357 |
If *force* is `True`, accounts-specific overrides will be reset |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
358 |
for all existing accounts of the domain. Otherwise, the transport |
6a27c7529cd7
Change 'force' argument to reset user records for tid/ssid/qid
martin f. krafft <madduck@madduck.net>
parents:
515
diff
changeset
|
359 |
setting will only affect accounts that use the default. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
360 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
361 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
362 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
363 |
`transport` : VirtualMailManager.Transport |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
364 |
the new transport |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
365 |
`force` : bool |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
366 |
enforce new transport setting for all accounts, default `False` |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
367 |
""" |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
368 |
self._chk_state() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
369 |
assert isinstance(transport, Transport) |
402
8984b1f4e6e3
VMM/domain: Execute the database updates of
Pascal Volk <neverseen@users.sourceforge.net>
parents:
392
diff
changeset
|
370 |
if not force and transport == self._transport: |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
371 |
return |
615
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
372 |
validate_transport(transport, |
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
373 |
MailLocation(self._dbh, |
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
374 |
mbfmt=cfg_dget('mailbox.format'), |
5882bfdf83e8
VMM/domain: Enabled transport-validation.
Pascal Volk <user@localhost.localdomain.org>
parents:
611
diff
changeset
|
375 |
directory=cfg_dget('mailbox.root'))) |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
376 |
self._update_tables_ref('tid', transport.tid, force) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
377 |
self._transport = transport |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
378 |
|
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
379 |
def update_note(self, note): |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
380 |
"""Sets a new note for the Domain. |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
381 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
382 |
Arguments: |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
383 |
|
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
384 |
`transport` : basestring or None |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
385 |
the new note |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
386 |
""" |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
387 |
self._chk_state() |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
388 |
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:
534
diff
changeset
|
389 |
if note == self._note: |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
390 |
return |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
391 |
self._update_tables('note', note) |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
392 |
self._note = note |
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
393 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
394 |
def get_info(self): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
395 |
"""Returns a dictionary with information about the domain.""" |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
396 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
397 |
dbc = self._dbh.cursor() |
447
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
398 |
dbc.execute('SELECT aliasdomains "alias domains", accounts, aliases, ' |
515
09fa019bb330
Include catch-all count in domaininfo output
martin f. krafft <madduck@madduck.net>
parents:
510
diff
changeset
|
399 |
'relocated, catchall "catch-all dests" ' |
09fa019bb330
Include catch-all count in domaininfo output
martin f. krafft <madduck@madduck.net>
parents:
510
diff
changeset
|
400 |
'FROM vmm_domain_info WHERE gid = %s', (self._gid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
401 |
info = dbc.fetchone() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
402 |
dbc.close() |
515
09fa019bb330
Include catch-all count in domaininfo output
martin f. krafft <madduck@madduck.net>
parents:
510
diff
changeset
|
403 |
keys = ('alias domains', 'accounts', 'aliases', 'relocated', |
09fa019bb330
Include catch-all count in domaininfo output
martin f. krafft <madduck@madduck.net>
parents:
510
diff
changeset
|
404 |
'catch-all dests') |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
405 |
info = dict(list(zip(keys, info))) |
392
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
406 |
info['gid'] = self._gid |
447
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
407 |
info['domain name'] = self._name |
392
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
408 |
info['transport'] = self._transport.transport |
447
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
409 |
info['domain directory'] = self._directory |
392
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
410 |
info['bytes'] = self._qlimit.bytes |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
411 |
info['messages'] = self._qlimit.messages |
447
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
412 |
services = self._services.services |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
413 |
services = [s.upper() for s in services if services[s]] |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
414 |
if services: |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
415 |
services.sort() |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
416 |
else: |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
417 |
services.append('None') |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
418 |
info['active services'] = ' '.join(services) |
539
5806fb74130b
Add note field to Account/Domain and CLI
martin f. krafft <madduck@madduck.net>
parents:
534
diff
changeset
|
419 |
info['note'] = self._note |
392
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
420 |
return info |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
421 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
422 |
def get_accounts(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
423 |
"""Returns a list with all accounts of the domain.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
424 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
425 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
426 |
dbc.execute('SELECT local_part from users where gid = %s ORDER BY ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
427 |
'local_part', (self._gid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
428 |
users = dbc.fetchall() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
429 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
430 |
accounts = [] |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
431 |
if users: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
432 |
addr = '@'.join |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
433 |
_dom = self._name |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
434 |
accounts = [addr((account[0], _dom)) for account in users] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
435 |
return accounts |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
436 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
437 |
def get_aliases(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
438 |
"""Returns a list with all aliases e-mail addresses of the domain.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
439 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
440 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
441 |
dbc.execute('SELECT DISTINCT address FROM alias WHERE gid = %s ORDER ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
442 |
'BY address', (self._gid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
443 |
addresses = dbc.fetchall() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
444 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
445 |
aliases = [] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
446 |
if addresses: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
447 |
addr = '@'.join |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
448 |
_dom = self._name |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
449 |
aliases = [addr((alias[0], _dom)) for alias in addresses] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
450 |
return aliases |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
451 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
452 |
def get_relocated(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
453 |
"""Returns a list with all addresses of relocated users.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
454 |
self._chk_state() |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
455 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
456 |
dbc.execute('SELECT address FROM relocated WHERE gid = %s ORDER BY ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
457 |
'address', (self._gid,)) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
458 |
addresses = dbc.fetchall() |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
459 |
dbc.close() |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
460 |
relocated = [] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
461 |
if addresses: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
462 |
addr = '@'.join |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
463 |
_dom = self._name |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
464 |
relocated = [addr((address[0], _dom)) for address in addresses] |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
465 |
return relocated |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
466 |
|
510
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
467 |
def get_catchall(self): |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
468 |
"""Returns a list with all catchall e-mail addresses of the domain.""" |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
469 |
self._chk_state() |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
470 |
dbc = self._dbh.cursor() |
611
8e9b0046bc8f
PEP8: Fixed all PEP8 related issues.
Pascal Volk <user@localhost.localdomain.org>
parents:
568
diff
changeset
|
471 |
dbc.execute('SELECT DISTINCT destination FROM catchall WHERE gid = %s ' |
8e9b0046bc8f
PEP8: Fixed all PEP8 related issues.
Pascal Volk <user@localhost.localdomain.org>
parents:
568
diff
changeset
|
472 |
'ORDER BY destination', (self._gid,)) |
510
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
473 |
addresses = dbc.fetchall() |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
474 |
dbc.close() |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
475 |
return addresses |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
492
diff
changeset
|
476 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
477 |
def get_aliase_names(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
478 |
"""Returns a list with all alias domain names of the domain.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
479 |
self._chk_state() |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
480 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
481 |
dbc.execute('SELECT domainname FROM domain_name WHERE gid = %s AND ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
482 |
'NOT is_primary ORDER BY domainname', (self._gid,)) |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
483 |
anames = dbc.fetchall() |
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
484 |
dbc.close() |
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
485 |
aliasdomains = [] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
486 |
if anames: |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
487 |
aliasdomains = [aname[0] for aname in anames] |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
488 |
return aliasdomains |
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
489 |
|
198
02d467e4fbab
VMM/Domain: added function get_gid() to the Domain module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
490 |
|
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
491 |
def check_domainname(domainname): |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
492 |
"""Returns the validated domain name `domainname`. |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
493 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
494 |
Throws an `DomainError`, if the domain name is too long or doesn't |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
495 |
look like a valid domain name (label.label.label). |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
496 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
497 |
""" |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
498 |
if not RE_DOMAIN.match(domainname): |
653
cf07e4468934
VMM: Post-2to3 fixes.
Pascal Volk <user@localhost.localdomain.org>
parents:
643
diff
changeset
|
499 |
domainname = domainname.encode('idna').decode() |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
500 |
if len(domainname) > 255: |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
501 |
raise DomErr(_('The domain name is too long'), DOMAIN_TOO_LONG) |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
502 |
if not RE_DOMAIN.match(domainname): |
643
df1e3b67882a
Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents:
637
diff
changeset
|
503 |
raise DomErr(_("The domain name '%s' is invalid") % domainname, |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
504 |
DOMAIN_INVALID) |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
505 |
return domainname |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
506 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
507 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
508 |
def get_gid(dbh, domainname): |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
509 |
"""Returns the group id of the domain *domainname*. |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
510 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
511 |
If the domain couldn't be found in the database 0 will be returned. |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
512 |
""" |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
513 |
domainname = check_domainname(domainname) |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
514 |
dbc = dbh.cursor() |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
515 |
dbc.execute('SELECT gid FROM domain_name WHERE domainname = %s', |
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
516 |
(domainname,)) |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
517 |
gid = dbc.fetchone() |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
518 |
dbc.close() |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
519 |
if gid: |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
520 |
return gid[0] |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
521 |
return 0 |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
522 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
523 |
|
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
524 |
def search(dbh, pattern=None, like=False): |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
525 |
"""'Search' for domains by *pattern* in the database. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
526 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
527 |
*pattern* may be a domain name or a partial domain name - starting |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
528 |
and/or ending with a '%' sign. When the *pattern* starts or ends with |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
529 |
a '%' sign *like* has to be `True` to perform a wildcard search. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
530 |
To retrieve all available domains use the arguments' default values. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
531 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
532 |
This function returns a tuple with a list and a dict: (order, domains). |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
533 |
The order list contains the domains' gid, alphabetical sorted by the |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
534 |
primary domain name. The domains dict's keys are the gids of the |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
535 |
domains. The value of item is a list. The first list element contains |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
536 |
the primary domain name or `None`. The elements [1:] contains the |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
537 |
names of alias domains. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
538 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
539 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
540 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
541 |
`pattern` : basestring |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
542 |
a (partial) domain name (starting and/or ending with a "%" sign) |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
543 |
`like` : bool |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
544 |
should be `True` when *pattern* starts/ends with a "%" sign |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
545 |
""" |
242
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
546 |
if pattern and not like: |
199
0684790fff7c
VMM: renamed function chk_domainname() -> check_domainname().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
547 |
pattern = check_domainname(pattern) |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
548 |
sql = 'SELECT gid, domainname, is_primary FROM domain_name' |
242
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
549 |
if pattern: |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
550 |
if like: |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
551 |
sql += " WHERE domainname LIKE '%s'" % pattern |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
552 |
else: |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
553 |
sql += " WHERE domainname = '%s'" % pattern |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
554 |
sql += ' ORDER BY is_primary DESC, domainname' |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
555 |
dbc = dbh.cursor() |
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
556 |
dbc.execute(sql) |
239
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
557 |
result = dbc.fetchall() |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
558 |
dbc.close() |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
559 |
|
239
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
560 |
gids = [domain[0] for domain in result if domain[2]] |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
561 |
domains = {} |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
562 |
for gid, domain, is_primary in result: |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
563 |
if is_primary: |
239
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
564 |
if not gid in domains: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
565 |
domains[gid] = [domain] |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
566 |
else: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
567 |
domains[gid].insert(0, domain) |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
568 |
else: |
239
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
569 |
if gid in gids: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
570 |
if gid in domains: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
571 |
domains[gid].append(domain) |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
572 |
else: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
573 |
domains[gid] = [domain] |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
574 |
else: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
575 |
gids.append(gid) |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
576 |
domains[gid] = [None, domain] |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
577 |
return gids, domains |
45
9e66138aad0b
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
44
diff
changeset
|
578 |
|
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
579 |
del _, cfg_dget |