author | Pascal Volk <neverseen@users.sourceforge.net> |
Mon, 31 Oct 2011 22:14:22 +0000 | |
branch | v0.6.x |
changeset 439 | 39036f5e6387 |
parent 417 | 8209da83e256 |
child 441 | 1af5fe0683ce |
permissions | -rw-r--r-- |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
1 |
# -*- coding: UTF-8 -*- |
366
d6573da35b5f
Updated copyright notices to include the year 2011.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
363
diff
changeset
|
2 |
# Copyright (c) 2007 - 2011, 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 |
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
18 |
from VirtualMailManager.errors import VMMError, DomainError as DomErr |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
19 |
from VirtualMailManager.pycompat import all, any |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
20 |
from VirtualMailManager.quotalimit import QuotaLimit |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
21 |
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
|
22 |
|
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
24 |
MAILDIR_CHARS = '0123456789abcdefghijklmnopqrstuvwxyz' |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
25 |
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
|
26 |
_ = 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
|
27 |
cfg_dget = lambda option: None |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
28 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
122
30abf0abf8f8
Converted to new-style class, added __slots__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
110
diff
changeset
|
30 |
class Domain(object): |
3
a9b44e04bf01
* VirtualMailManager/Account.py:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
0
diff
changeset
|
31 |
"""Class to manage e-mail domains.""" |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
32 |
__slots__ = ('_directory', '_gid', '_name', '_qlimit', '_transport', |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
33 |
'_dbh', '_new') |
225
a51809f7940b
VMM/Transport: reworked Transport class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
222
diff
changeset
|
34 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
35 |
def __init__(self, dbh, domainname): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
36 |
"""Creates a new Domain instance. |
122
30abf0abf8f8
Converted to new-style class, added __slots__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
110
diff
changeset
|
37 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
38 |
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
|
39 |
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
|
40 |
set_transport() before save(). |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
41 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
42 |
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
|
43 |
an alias domain. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
44 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
45 |
Arguments: |
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 |
`dbh` : pyPgSQL.PgSQL.Connection |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
48 |
a database connection for the database access |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
49 |
`domainname` : basestring |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
50 |
The name of the domain |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
51 |
""" |
199
0684790fff7c
VMM: renamed function chk_domainname() -> check_domainname().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
52 |
self._name = check_domainname(domainname) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
53 |
self._dbh = dbh |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
54 |
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
|
55 |
self._qlimit = None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
56 |
self._transport = None |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
57 |
self._directory = None |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
58 |
self._new = True |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
59 |
self._load() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
60 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
61 |
def _load(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
62 |
"""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
|
63 |
is the primary one. |
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 |
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
|
66 |
domain. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
67 |
""" |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
68 |
dbc = self._dbh.cursor() |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
69 |
dbc.execute('SELECT dd.gid, qid, tid, domaindir, is_primary FROM ' |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
70 |
'domain_data dd, domain_name dn WHERE domainname = %s AND ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
71 |
'dn.gid = dd.gid', (self._name,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
72 |
result = dbc.fetchone() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
73 |
dbc.close() |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
74 |
if result: |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
75 |
if not result[4]: |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
76 |
raise DomErr(_(u"The domain '%s' is an alias domain.") % |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
77 |
self._name, DOMAIN_ALIAS_EXISTS) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
78 |
self._gid, self._directory = result[0], result[3] |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
79 |
self._qlimit = QuotaLimit(self._dbh, qid=result[1]) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
80 |
self._transport = Transport(self._dbh, tid=result[2]) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
81 |
self._new = False |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
82 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
83 |
def _set_gid(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
84 |
"""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
|
85 |
assert self._gid == 0 |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
86 |
dbc = self._dbh.cursor() |
43
92a6132940f5
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
35
diff
changeset
|
87 |
dbc.execute("SELECT nextval('domain_gid')") |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
88 |
self._gid = dbc.fetchone()[0] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
89 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
90 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
91 |
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
|
92 |
"""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
|
93 |
are accounts, aliases and/or relocated users. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
94 |
""" |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
95 |
dbc = self._dbh.cursor() |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
96 |
dbc.execute('SELECT count(gid) FROM users WHERE gid = %(gid)u ' |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
97 |
'UNION SELECT count(gid) FROM alias WHERE gid = %(gid)u ' |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
98 |
'UNION SELECT count(gid) FROM relocated WHERE gid = ' |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
99 |
'%(gid)u' % {'gid': self._gid}) |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
100 |
result = dbc.fetchall() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
101 |
dbc.close() |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
102 |
result = [count[0] for count in result] |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
103 |
if any(result): |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
104 |
keys = ('account_count', 'alias_count', 'relocated_count') |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
105 |
raise DomErr(_(u'There are %(account_count)u accounts, ' |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
106 |
u'%(alias_count)u aliases and %(relocated_count)u ' |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
107 |
u'relocated users.') % dict(zip(keys, result)), |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
199
diff
changeset
|
108 |
ACCOUNT_AND_ALIAS_PRESENT) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
110 |
def _chk_state(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
111 |
"""Throws a DomainError if the Domain is new - not saved in the |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
112 |
database.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
113 |
if self._new: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
404
diff
changeset
|
114 |
raise DomErr(_(u"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
|
115 |
NO_SUCH_DOMAIN) |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
116 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
117 |
def _update_tables(self, column, value, force=False): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
118 |
"""Update various columns in the domain_data table. When *force* is |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
119 |
`True` also the corresponding column in the users table will be |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
120 |
updated. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
121 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
122 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
123 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
124 |
`column` : basestring |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
125 |
Name of the table column. Currently: qid and tid |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
126 |
`value` : long |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
127 |
The referenced key |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
128 |
`force` : bool |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
129 |
enforce the new setting also for existing users. Default: `False` |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
130 |
""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
131 |
if column not in ('qid', 'tid'): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
132 |
raise ValueError('Unknown column: %r' % column) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
133 |
dbc = self._dbh.cursor() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
134 |
dbc.execute('UPDATE domain_data SET %s = %%s WHERE gid = %%s' % column, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
135 |
(value, self._gid)) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
136 |
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
|
137 |
self._dbh.commit() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
138 |
if force: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
139 |
dbc.execute('UPDATE users SET %s = %%s WHERE gid = %%s' % column, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
140 |
(value, self._gid)) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
141 |
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
|
142 |
self._dbh.commit() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
143 |
dbc.close() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
144 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
145 |
@property |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
146 |
def gid(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
147 |
"""The GID of the Domain.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
148 |
return self._gid |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
149 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
150 |
@property |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
151 |
def name(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
152 |
"""The Domain's name.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
153 |
return self._name |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
154 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
155 |
@property |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
156 |
def directory(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
157 |
"""The Domain's directory.""" |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
158 |
return self._directory |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
159 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
160 |
@property |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
161 |
def quotalimit(self): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
162 |
"""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
|
163 |
return self._qlimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
164 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
165 |
@property |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
166 |
def transport(self): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
167 |
"""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
|
168 |
return self._transport |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
169 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
170 |
def set_directory(self, basedir): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
171 |
"""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
|
172 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
173 |
Argument: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
174 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
175 |
`basedir` : basestring |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
176 |
The base directory of all domains |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
177 |
""" |
363
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
178 |
if not self._new: |
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
179 |
raise DomErr(_(u"The domain '%s' already exists.") % self._name, |
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
180 |
DOMAIN_EXISTS) |
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
181 |
assert self._directory is None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
182 |
self._set_gid() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
183 |
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
|
184 |
str(self._gid)) |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
185 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
186 |
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
|
187 |
"""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
|
188 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
189 |
Argument: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
190 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
191 |
`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
|
192 |
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
|
193 |
""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
194 |
if not self._new: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
195 |
raise DomErr(_(u"The domain '%s' already exists.") % self._name, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
196 |
DOMAIN_EXISTS) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
197 |
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
|
198 |
self._qlimit = quotalimit |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
199 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
200 |
def set_transport(self, transport): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
201 |
"""Set the transport for the new Domain. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
202 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
203 |
Argument: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
204 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
205 |
`transport` : VirtualMailManager.Transport |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
206 |
The transport of the new Domain |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
207 |
""" |
363
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
208 |
if not self._new: |
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
209 |
raise DomErr(_(u"The domain '%s' already exists.") % self._name, |
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
210 |
DOMAIN_EXISTS) |
502d59f4bb34
VMM/domain: set_{directory,transport} make sure the domain is new.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
211 |
assert isinstance(transport, Transport) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
212 |
self._transport = transport |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
213 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
214 |
def save(self): |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
215 |
"""Stores the new domain in the database.""" |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
216 |
if not self._new: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
217 |
raise DomErr(_(u"The domain '%s' already exists.") % self._name, |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
199
diff
changeset
|
218 |
DOMAIN_EXISTS) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
219 |
assert all((self._directory, self._qlimit, self._transport)) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
220 |
dbc = self._dbh.cursor() |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
221 |
dbc.execute('INSERT INTO domain_data (gid, qid, tid, domaindir) ' |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
222 |
'VALUES (%s, %s, %s, %s)', (self._gid, self._qlimit.qid, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
223 |
self._transport.tid, self._directory)) |
379
7518d927d443
VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
224 |
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
|
225 |
'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
|
226 |
self._dbh.commit() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
227 |
dbc.close() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
228 |
self._new = False |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
229 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
230 |
def delete(self, force=False): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
231 |
"""Deletes the domain. |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
232 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
233 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
234 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
235 |
`force` : bool |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
236 |
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
|
237 |
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
|
238 |
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
|
239 |
Default `False` |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
240 |
""" |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
241 |
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
|
242 |
raise TypeError('force must be a bool') |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
243 |
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
|
244 |
if not force: |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
245 |
self._check_for_addresses() |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
246 |
dbc = self._dbh.cursor() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
247 |
for tbl in ('alias', 'users', 'relocated', 'domain_name', |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
248 |
'domain_data'): |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
249 |
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
|
250 |
self._dbh.commit() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
251 |
dbc.close() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
252 |
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
|
253 |
self._directory = self._qlimit = self._transport = None |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
254 |
self._new = True |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
255 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
256 |
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
|
257 |
"""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
|
258 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
259 |
If *force* is `True` the new *quotalimit* will be applied to |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
260 |
all existing accounts of the domain. Otherwise the *quotalimit* |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
261 |
will be only applied to accounts created from now on. |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
262 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
263 |
Arguments: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
264 |
|
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
265 |
`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
|
266 |
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
|
267 |
`force` : bool |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
268 |
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
|
269 |
""" |
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
270 |
if cfg_dget('misc.dovecot_version') < 0x10102f00: |
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
271 |
raise VMMError(_(u'PostgreSQL-based dictionary quota requires ' |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
404
diff
changeset
|
272 |
u'Dovecot >= v1.1.2.'), VMM_ERROR) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
273 |
self._chk_state() |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
274 |
assert isinstance(quotalimit, QuotaLimit) |
402
8984b1f4e6e3
VMM/domain: Execute the database updates of
Pascal Volk <neverseen@users.sourceforge.net>
parents:
392
diff
changeset
|
275 |
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
|
276 |
return |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
277 |
self._update_tables('qid', quotalimit.qid, force) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
278 |
self._qlimit = quotalimit |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
279 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
280 |
def update_transport(self, transport, force=False): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
281 |
"""Sets a new transport for the Domain. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
282 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
283 |
If *force* is `True` the new *transport* will be assigned to all |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
284 |
existing accounts. Otherwise the *transport* will be only used for |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
285 |
accounts created from now on. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
286 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
287 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
288 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
289 |
`transport` : VirtualMailManager.Transport |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
290 |
the new transport |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
291 |
`force` : bool |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
292 |
enforce new transport setting for all accounts, default `False` |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
293 |
""" |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
294 |
self._chk_state() |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
295 |
assert isinstance(transport, Transport) |
402
8984b1f4e6e3
VMM/domain: Execute the database updates of
Pascal Volk <neverseen@users.sourceforge.net>
parents:
392
diff
changeset
|
296 |
if not force and transport == self._transport: |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
297 |
return |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
298 |
self._update_tables('tid', transport.tid, force) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
299 |
self._transport = transport |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
300 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
301 |
def get_info(self): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
302 |
"""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
|
303 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
304 |
dbc = self._dbh.cursor() |
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
|
305 |
dbc.execute('SELECT aliasdomains, accounts, aliases, relocated ' |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
306 |
'FROM vmm_domain_info WHERE gid = %s', (self._gid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
307 |
info = dbc.fetchone() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
308 |
dbc.close() |
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
|
309 |
keys = ('aliasdomains', 'accounts', 'aliases', 'relocated') |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
310 |
info = dict(zip(keys, info)) |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
311 |
info['gid'] = self._gid |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
312 |
info['domainname'] = self._name |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
313 |
info['transport'] = self._transport.transport |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
314 |
info['domaindir'] = self._directory |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
315 |
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
|
316 |
info['messages'] = self._qlimit.messages |
ffce67e3c6eb
VMM/domain: Adjusted Domain.get_info() to the updated vmm_domain_info view.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
390
diff
changeset
|
317 |
return info |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
318 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
319 |
def get_accounts(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
320 |
"""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
|
321 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
322 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
323 |
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
|
324 |
'local_part', (self._gid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
325 |
users = dbc.fetchall() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
326 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
327 |
accounts = [] |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
328 |
if users: |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
329 |
addr = u'@'.join |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
330 |
_dom = self._name |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
331 |
accounts = [addr((account[0], _dom)) for account in users] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
332 |
return accounts |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
333 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
334 |
def get_aliases(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
335 |
"""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
|
336 |
self._chk_state() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
337 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
338 |
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
|
339 |
'BY address', (self._gid,)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
340 |
addresses = dbc.fetchall() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
341 |
dbc.close() |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
342 |
aliases = [] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
343 |
if addresses: |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
344 |
addr = u'@'.join |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
345 |
_dom = self._name |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
346 |
aliases = [addr((alias[0], _dom)) for alias in addresses] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
347 |
return aliases |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
348 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
349 |
def get_relocated(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
350 |
"""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
|
351 |
self._chk_state() |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
352 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
353 |
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
|
354 |
'address', (self._gid,)) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
355 |
addresses = dbc.fetchall() |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
356 |
dbc.close() |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
357 |
relocated = [] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
358 |
if addresses: |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
359 |
addr = u'@'.join |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
360 |
_dom = self._name |
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
361 |
relocated = [addr((address[0], _dom)) for address in addresses] |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
362 |
return relocated |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
363 |
|
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
364 |
def get_aliase_names(self): |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
365 |
"""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
|
366 |
self._chk_state() |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
367 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
368 |
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
|
369 |
'NOT is_primary ORDER BY domainname', (self._gid,)) |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
370 |
anames = dbc.fetchall() |
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
371 |
dbc.close() |
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
372 |
aliasdomains = [] |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
373 |
if anames: |
142
28f26f7f3d8f
Reduced the mixing/concatenating of str and unicode objects.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
138
diff
changeset
|
374 |
aliasdomains = [aname[0] for aname in anames] |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
375 |
return aliasdomains |
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
376 |
|
198
02d467e4fbab
VMM/Domain: added function get_gid() to the Domain module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
377 |
|
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
378 |
def check_domainname(domainname): |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
379 |
"""Returns the validated domain name `domainname`. |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
380 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
381 |
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
|
382 |
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
|
383 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
384 |
""" |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
385 |
if not RE_DOMAIN.match(domainname): |
294
7d1bafc6fa30
VMM/Domain: removed functions ace2idna() and idn2ascii().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
386 |
domainname = domainname.encode('idna') |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
387 |
if len(domainname) > 255: |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
388 |
raise DomErr(_(u'The domain name is too long'), DOMAIN_TOO_LONG) |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
389 |
if not RE_DOMAIN.match(domainname): |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
390 |
raise DomErr(_(u"The domain name '%s' is invalid") % domainname, |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
391 |
DOMAIN_INVALID) |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
392 |
return domainname |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
393 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
394 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
395 |
def get_gid(dbh, domainname): |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
396 |
"""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
|
397 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
398 |
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
|
399 |
""" |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
400 |
domainname = check_domainname(domainname) |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
401 |
dbc = dbh.cursor() |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
336
diff
changeset
|
402 |
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
|
403 |
(domainname,)) |
254
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
404 |
gid = dbc.fetchone() |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
405 |
dbc.close() |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
406 |
if gid: |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
407 |
return gid[0] |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
408 |
return 0 |
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
409 |
|
8aecc83a0d32
VMM: moved functions ace2idna(), check_domainname(), idn2ascii()
Pascal Volk <neverseen@users.sourceforge.net>
parents:
242
diff
changeset
|
410 |
|
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
411 |
def search(dbh, pattern=None, like=False): |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
412 |
"""'Search' for domains by *pattern* in the database. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
413 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
414 |
*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
|
415 |
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
|
416 |
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
|
417 |
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
|
418 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
419 |
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
|
420 |
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
|
421 |
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
|
422 |
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
|
423 |
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
|
424 |
names of alias domains. |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
425 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
426 |
Arguments: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
427 |
|
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
428 |
`pattern` : basestring |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
429 |
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
|
430 |
`like` : bool |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
225
diff
changeset
|
431 |
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
|
432 |
""" |
242
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
433 |
if pattern and not like: |
199
0684790fff7c
VMM: renamed function chk_domainname() -> check_domainname().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
434 |
pattern = check_domainname(pattern) |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
435 |
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
|
436 |
if pattern: |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
437 |
if like: |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
438 |
sql += " WHERE domainname LIKE '%s'" % pattern |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
439 |
else: |
496099847480
VMM/Domain: search() small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
440 |
sql += " WHERE domainname = '%s'" % pattern |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
441 |
sql += ' ORDER BY is_primary DESC, domainname' |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
442 |
dbc = dbh.cursor() |
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
443 |
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
|
444 |
result = dbc.fetchall() |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
445 |
dbc.close() |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
446 |
|
239
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
447 |
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
|
448 |
domains = {} |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
449 |
for gid, domain, is_primary in result: |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
450 |
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
|
451 |
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
|
452 |
domains[gid] = [domain] |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
453 |
else: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
454 |
domains[gid].insert(0, domain) |
44
c9ab6900ede9
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
43
diff
changeset
|
455 |
else: |
239
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
456 |
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
|
457 |
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
|
458 |
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
|
459 |
else: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
460 |
domains[gid] = [domain] |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
461 |
else: |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
462 |
gids.append(gid) |
184970fd7486
VMM/Domain: search() lists now all matching domains, also when
Pascal Volk <neverseen@users.sourceforge.net>
parents:
162
diff
changeset
|
463 |
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
|
464 |
return gids, domains |
45
9e66138aad0b
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
44
diff
changeset
|
465 |
|
404
0c52094447b0
VMM/{account,domain}: Added a versions check to the update_quotalimit
Pascal Volk <neverseen@users.sourceforge.net>
parents:
402
diff
changeset
|
466 |
del _, cfg_dget |