annotate src/plugins/plugin_misc_account.py @ 1855:1c9b2c184663

plugin account: email sending improvments: the following new options are handled: - email_sender_domain (default None) - email_port (default 25) - email_username (defaut None) - email_password (default None) - email_starttls true to force starttls (default false) - email_auth true to require authentication (default false) in addition, admin_email has been deprecated in favor of email_admins_list which can handle several addresses
author Goffi <goffi@goffi.org>
date Sat, 27 Feb 2016 14:49:20 +0100
parents 33e73c70d78a
children d7e29a12ec2c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
3
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
4 # SAT plugin for account creation (experimental)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1765
diff changeset
5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org)
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
7 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
10 # (at your option) any later version.
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
12 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
15 # GNU Affero General Public License for more details.
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
19
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
20 from sat.core.i18n import _, D_
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 987
diff changeset
21 from sat.core.log import getLogger
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 987
diff changeset
22 log = getLogger(__name__)
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from sat.core import exceptions
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
24 from sat.tools import xml_tools
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
25 from sat.memory.memory import Sessions
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
26 from sat.memory.crypto import PasswordHasher
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
27 from sat.core.constants import Const as C
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
28 import ConfigParser
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
29 from twisted.internet import reactor, defer, protocol
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
30 from twisted.python.procutils import which
644
53de6954e94e plugin misc_account: fix for sending a failure message
souliane <souliane@mailoo.org>
parents: 641
diff changeset
31 from twisted.python.failure import Failure
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
32 from twisted.mail.smtp import sendmail
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
33 from os.path import join, dirname
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
34 from email.mime.text import MIMEText
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
35
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
36 import random
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
37
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
38
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
39 PLUGIN_INFO = {
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
40 "name": "Account Plugin",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
41 "import_name": "MISC-ACCOUNT",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
42 "type": "MISC",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
43 "protocols": [],
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
44 "dependencies": [],
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
45 "recommendations": ['GROUPBLOG'],
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
46 "main": "MiscAccount",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
47 "handler": "no",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
48 "description": _(u"""SàT account creation""")
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
49 }
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
50
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
51 CONFIG_SECTION = "plugin account"
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
52
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
53 # You need do adapt the following consts to your server
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
54 # all theses values (key=option name, value=default) can (and should) be overriden in sat.conf
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
55 # in section CONFIG_SECTION
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
56
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
57 default_conf = {"email_from": "NOREPLY@example.net",
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
58 "email_server": "localhost",
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
59 "email_sender_domain": "",
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
60 "email_port": 25,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
61 "email_username": "",
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
62 "email_password": "",
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
63 "email_starttls": "false",
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
64 "email_auth": "false",
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
65 "email_admins_list": [],
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
66 "admin_email": "",
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
67 "new_account_server": "localhost",
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
68 "new_account_domain": "example.net",
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
69 "prosody_path": None, # prosody path (where prosodyctl will be executed from), or None to automaticaly find it
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
70 "prosodyctl": "prosodyctl",
1727
68e498b3367e reverted revision 2ebe66a96d05
souliane <souliane@mailoo.org>
parents: 1726
diff changeset
71 "reserved_list": ['libervia'] # profiles which can't be used
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
72 }
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
73
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
74
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
75 class PasswordsMatchingError(Exception):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
76 pass
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
77
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
78
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
79 class ProsodyRegisterProtocol(protocol.ProcessProtocol):
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
80 """ Try to register an account with prosody """
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
81
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
82 def __init__(self, password=None, deferred=None):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
83 """
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
84 @param password: new user password
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
85 @param deferred
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
86 """
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
87 self.password = password
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
88 self.deferred = deferred
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
89 self.data = ''
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
90
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
91 def connectionMade(self):
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
92 if self.password is None:
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
93 return
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
94 self.transport.write("%s\n%s" % ((self.password.encode('utf-8'),) * 2))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
95 self.transport.closeStdin()
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
96
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
97 def outReceived(self, data):
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
98 self.data += data
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
99
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
100 def errReceived(self, data):
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
101 self.data += data
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
102
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
103 def processEnded(self, reason):
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
104 if (reason.value.exitCode == 0):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 987
diff changeset
105 log.info(_('Prosody command succeed'))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
106 self.deferred.callback(None)
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
107 else:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 987
diff changeset
108 log.error(_(u"Can't complete Prosody command (error code: %(code)d): %(message)s") % {'code': reason.value.exitCode, 'message': self.data})
751
1def5b7edf9f core, bridge: better GenericException handling
Goffi <goffi@goffi.org>
parents: 733
diff changeset
109 self.deferred.errback(Failure(exceptions.InternalError))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
110
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
111 @classmethod
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
112 def prosodyctl(cls, plugin, command, password=None, profile=None):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
113 """Create a new ProsodyRegisterProtocol and execute the given prosodyctl command.
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
114
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
115 @param plugin: instance of MiscAccount
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
116 @param command: the command to execute: "adduser", "passwd" or "deluser"
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
117 @param password: the user new password (leave to None for "deluser" command)
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
118 @param profile: the user profile
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
119 @return: a Deferred instance
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
120 """
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
121 d = defer.Deferred()
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
122 prosody_reg = ProsodyRegisterProtocol(password, d)
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
123 prosody_exe = join(plugin._prosody_path, plugin.getConfig('prosodyctl'))
934
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
124 # TODO delete account which are not on the same host
954
5925c9ebfcd2 plugin account: reverted patch abd3a75d629c
Goffi <goffi@goffi.org>
parents: 948
diff changeset
125 reactor.spawnProcess(prosody_reg, prosody_exe, [prosody_exe, command, "%s@%s" % (profile, plugin.getConfig('new_account_domain'))], path=plugin._prosody_path)
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
126 return d
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
127
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
128
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
129 class MiscAccount(object):
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
130 """Account plugin: create a SàT + Prosody account, used by Libervia"""
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
131 #XXX: This plugin is a Q&D one used for the demo. Something more generic (and not
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
132 # only focused on Prosody) is planed
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
133
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
134 def __init__(self, host):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 987
diff changeset
135 log.info(_(u"Plugin Account initialization"))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
136 self.host = host
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
137 host.bridge.addMethod("registerSatAccount", ".plugin", in_sign='sss', out_sign='', method=self._registerAccount, async=True)
987
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 954
diff changeset
138 host.bridge.addMethod("getNewAccountDomain", ".plugin", in_sign='', out_sign='s', method=self.getNewAccountDomain, async=False)
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
139 host.bridge.addMethod("getAccountDialogUI", ".plugin", in_sign='s', out_sign='s', method=self._getAccountDialogUI, async=False)
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
140 host.bridge.addMethod("asyncConnectWithXMPPCredentials", ".plugin", in_sign='ss', out_sign='b', method=self.asyncConnectWithXMPPCredentials, async=True)
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
141 self._prosody_path = self.getConfig('prosody_path')
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
142 if self._prosody_path is None:
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
143 paths = which(self.getConfig('prosodyctl'))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
144 if not paths:
1409
3265a2639182 massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
145 log.error(_(u"Can't find %s") % (self.getConfig('prosodyctl'),))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
146 else:
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
147 self._prosody_path = dirname(paths[0])
1409
3265a2639182 massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
148 log.info(_(u'Prosody path found: %s') % (self._prosody_path,))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
149
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
150 self._sessions = Sessions()
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
151
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
152 self.__account_cb_id = host.registerCallback(self._accountDialogCb, with_data=True)
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
153 self.__change_password_id = host.registerCallback(self.__changePasswordCb, with_data=True)
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
154
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
155 def deleteBlogCallback(posts, comments):
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
156 return lambda data, profile: self.__deleteBlogPostsCb(posts, comments, data, profile)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
157
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
158 self.__delete_posts_id = host.registerCallback(deleteBlogCallback(True, False), with_data=True)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
159 self.__delete_comments_id = host.registerCallback(deleteBlogCallback(False, True), with_data=True)
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
160 self.__delete_posts_comments_id = host.registerCallback(deleteBlogCallback(True, True), with_data=True)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
161
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
162 self.__delete_account_id = host.registerCallback(self.__deleteAccountCb, with_data=True)
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
163
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
164 def getConfig(self, name):
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
165 if name.startswith("email_"):
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
166 # XXX: email_ parameters were first in [plugin account] section
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
167 # but as it make more sense to have them in common with other plugins,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
168 # they can now be in [DEFAULT] section
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
169 try:
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
170 value = self.host.memory.getConfig(None, name, Exception)
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
171 except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
172 pass
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
173 else:
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
174 return value
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
175
1234
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1212
diff changeset
176 return self.host.memory.getConfig(CONFIG_SECTION, name, default_conf[name])
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
177
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
178 def generatePassword(self):
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
179 """Generate a password with random characters.
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
180
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
181 @return unicode
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
182 """
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
183 random.seed()
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
184 #charset = [chr(i) for i in range(0x21,0x7F)] #XXX: this charset seems to have some issues with openfire
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
185 charset = [chr(i) for i in range(0x30,0x3A) + range(0x41,0x5B) + range (0x61,0x7B)]
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
186 return ''.join([random.choice(charset) for i in range(15)])
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
187
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
188 def _registerAccount(self, email, password, profile):
1727
68e498b3367e reverted revision 2ebe66a96d05
souliane <souliane@mailoo.org>
parents: 1726
diff changeset
189 return self.registerAccount(email, password, None, profile)
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
190
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
191 def registerAccount(self, email, password, jid_s, profile):
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
192 """Register a new profile and its associated XMPP account.
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
193
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
194 @param email (unicode): where to send to confirmation email to
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
195 @param password (unicode): password chosen by the user
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
196 while be used for profile *and* XMPP account
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
197 @param jid_s (unicode): JID to re-use or to register:
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
198 - non empty value: bind this JID to the new sat profile
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
199 - None or "": register a new JID on the local XMPP server
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
200 @param profile
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
201 @return Deferred
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
202 """
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
203 if not password or not profile:
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
204 raise exceptions.DataError
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
205
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
206 if profile.lower() in self.getConfig('reserved_list'):
751
1def5b7edf9f core, bridge: better GenericException handling
Goffi <goffi@goffi.org>
parents: 733
diff changeset
207 return defer.fail(Failure(exceptions.ConflictError))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
208
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
209 d = self.host.memory.asyncCreateProfile(profile, password)
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
210 d.addCallback(lambda dummy: self.profileRegistered(email, password, jid_s, profile))
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
211 return d
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
212
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
213 def profileRegistered(self, email, password, jid_s, profile):
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
214 """Create the XMPP account, set the profile connection parameters and send the confirmation email.
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
215
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
216 @param email (unicode): where to send to confirmation email to
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
217 @param password (unicode): password chosen by the user
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
218 @param jid_s (unicode): JID to re-use or to register:
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
219 - non empty value: bind this JID to the new sat profile
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
220 - None or empty: register a new JID on the local XMPP server
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
221 @param profile
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
222 @return: Deferred
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
223 """
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
224 # XXX: we use "prosodyctl adduser" because "register" doesn't check conflict and just change the password if the account already exists
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
225 if jid_s:
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
226 d = defer.succeed(None)
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
227 else:
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
228 d = ProsodyRegisterProtocol.prosodyctl(self, 'adduser', password, profile)
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
229 jid_s = "%s@%s" % (profile, self.getConfig('new_account_domain'))
1729
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
230
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
231 d.addCallback(lambda dummy: self.sendEmails(email, jid_s, password, profile))
1080
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
232
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
233 def setParams(dummy):
1091
2d035aaea13b plugin misc_account: delete the profile session after the registration is done
souliane <souliane@mailoo.org>
parents: 1089
diff changeset
234 self.host.memory.setParam("JabberID", jid_s, "Connection", profile_key=profile)
2d035aaea13b plugin misc_account: delete the profile session after the registration is done
souliane <souliane@mailoo.org>
parents: 1089
diff changeset
235 d = self.host.memory.setParam("Password", password, "Connection", profile_key=profile)
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
236 return d
1080
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
237
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
238 def removeProfile(failure):
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
239 self.host.memory.asyncDeleteProfile(profile)
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
240 return failure
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
241
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
242 d.addCallback(lambda dummy: self.host.memory.startSession(password, profile))
1080
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
243 d.addCallback(setParams)
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
244 d.addCallback(lambda dummy: self.host.memory.stopSession(profile))
1080
f25ec9fd7cc4 plugin misc_account: suppress the profile after its creation if the XMPP account registration failed
souliane <souliane@mailoo.org>
parents: 1044
diff changeset
245 d.addErrback(removeProfile)
733
fe05afc3f0df reverted last commit
Goffi <goffi@goffi.org>
parents: 732
diff changeset
246 return d
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
247
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
248 def sendEmails(self, email, jid_s, password, profile):
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
249 # time to send the email
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
250
1765
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
251 email_host = self.getConfig('email_server')
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
252 email_from = self.getConfig("email_from")
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
253 email_sender_domain = self.getConfig("email_sender_domain") or None
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
254 email_port = int(self.getConfig("email_port"))
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
255 email_username = self.getConfig("email_username") or None
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
256 email_password = self.getConfig("email_password") or None
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
257 email_starttls = C.bool(self.getConfig("email_starttls"))
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
258 email_auth = C.bool(self.getConfig("email_auth"))
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
259 domain = self.getConfig('new_account_domain')
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
260
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
261 # admin
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
262 admins_emails = self.getConfig('email_admins_list')
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
263 admin_email = self.getConfig('admin_email')
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
264 if admin_email:
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
265 log.warning(u"admin_email parameter is deprecated, please use email_admins_list instead")
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
266 admins_emails.append(admin_email)
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
267
1729
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
268 # email to the administrator
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
269 if not admins_emails:
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
270 log.warning(u"No known admin email, we can't send email to administrator(s).\nPlease fill email_admins_list parameter")
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
271 d_admin = defer.fail(exceptions.DataError("no admin email"))
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
272 else:
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
273 body = (u"""New account created: %(profile)s [%(email)s]""" % {'profile': profile, 'email': email}).encode('utf-8')
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
274 msg = MIMEText(body, 'plain', 'UTF-8')
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
275 msg['Subject'] = _('New Libervia account created')
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
276 msg['From'] = email_from
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
277 msg['To'] = ", ".join(admins_emails)
1729
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
278
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
279 d_admin = sendmail(email_host, email_from, admins_emails, msg.as_string(),
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
280 senderDomainName=email_sender_domain,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
281 port=email_port,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
282 username=email_username,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
283 password=email_password,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
284 requireAuthentication=email_starttls,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
285 requireTransportSecurity=email_auth)
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
286 admins_emails_txt = u', '.join([u"<{}>".format(addr) for addr in admins_emails])
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
287 d_admin.addCallbacks(lambda dummy: log.debug(u"Account creation notification sent to admin(s) {}".format(admins_emails_txt)),
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
288 lambda dummy: log.error(u"Failed to send account creation notification to admin {}".format(admins_emails_txt)))
1729
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
289 if not email:
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
290 return d_admin
9037161e28f0 plugin misc_account: send email to the admins when a new profile is created for an external XMPP account
souliane <souliane@mailoo.org>
parents: 1727
diff changeset
291
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
292 body = (_(u"""Welcome to Libervia, the web interface of Salut à Toi.
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
293
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
294 Your account on %(domain)s has been successfully created. This is a demonstration version to show you the current status of the project. It is still under development, it misses some features and it's not stable enough to be used for any serious purpose. Please keep it in mind!
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
295
1040
76ad41b708e1 plugin misc_account: do not send the password with the confirmation email for account creation
souliane <souliane@mailoo.org>
parents: 1031
diff changeset
296 Here is your connection information:
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
297
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
298 Login on libervia.org: %(profile)s
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
299 Jabber ID (JID): %(jid_s)s
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
300
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
301 Your password has been chosen by yourself. If you haven't read our security notice regarding the connection to https://libervia.org, please do it now:
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
302
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
303 http://salut-a-toi.org/faq.html#certificate
870
e030460e065e plugin misc account: updated the welcome email
Goffi <goffi@goffi.org>
parents: 811
diff changeset
304
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
305 In the beginning, you have nobody to talk to. To find some contacts, use the users' directory:
1707
94c450972346 primitivus and plugins: renamed a few menus:
souliane <souliane@mailoo.org>
parents: 1696
diff changeset
306 - make yourself visible in "Service / Directory subscription".
94c450972346 primitivus and plugins: renamed a few menus:
souliane <souliane@mailoo.org>
parents: 1696
diff changeset
307 - search for people with "Contacts" / Search directory".
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
308
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
309 Any feedback welcome. Thank you!
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
310
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
311 Salut à Toi association
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
312 http://www.salut-a-toi.org
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
313 """) % {'profile': profile, 'jid_s': jid_s, 'domain': domain}).encode('utf-8')
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
314 msg = MIMEText(body, 'plain', 'UTF-8')
1433
5d42e2219d7c plugin misc_account: change the message sent by email after an account creation
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
315 msg['Subject'] = _(u'Libervia account created')
1765
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
316 msg['From'] = email_from
571
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
317 msg['To'] = email
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
318
1765
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
319 def email_ko(dummy):
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
320 # TODO: return error code to user
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
321 log.error(u"Failed to send account creation confirmation to <%s>" % email)
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
322
1804
33e73c70d78a plugin misc_account: add a FIXME comment
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
323 # XXX: this will not fail when the email address doesn't exist
33e73c70d78a plugin misc_account: add a FIXME comment
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
324 # FIXME: check email reception to validate email given by the user
33e73c70d78a plugin misc_account: add a FIXME comment
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
325 # FIXME: delete the profile if the email could not been sent?
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
326 d_user = sendmail(email_host, email_from, email, msg.as_string(),
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
327 senderDomainName=email_sender_domain,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
328 port=email_port,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
329 username=email_username,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
330 password=email_password,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
331 requireAuthentication=email_starttls,
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
332 requireTransportSecurity=email_auth)
1765
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
333 d_user.addCallbacks(lambda dummy: log.debug(u"Account creation confirmation sent to <%s>" % email),
b9493cb6ce49 plugin misc_account: fixes login messages when sending emails
souliane <souliane@mailoo.org>
parents: 1729
diff changeset
334 email_ko)
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
335 return defer.DeferredList([d_user, d_admin])
672
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
336
987
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 954
diff changeset
337 def getNewAccountDomain(self):
672
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
338 """@return: the domain that will be set to new account"""
730
32bbabe809da plugin account: configuration constants can be overriden in sat.conf (section "plugin account") + better deferred management in email sending
Goffi <goffi@goffi.org>
parents: 672
diff changeset
339 return self.getConfig('new_account_domain')
672
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
340
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
341 def _getAccountDialogUI(self, profile):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
342 """Get the main dialog to manage your account
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
343 @param menu_data
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
344 @param profile: %(doc_profile)s
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
345 @return: XML of the dialog
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
346 """
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
347 form_ui = xml_tools.XMLUI("form", "tabs", title=D_("Manage your account"), submit_id=self.__account_cb_id)
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
348 tab_container = form_ui.current_container
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
349
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
350 tab_container.addTab("update", D_("Change your password"), container=xml_tools.PairsContainer)
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
351 form_ui.addLabel(D_("Current profile password"))
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
352 form_ui.addPassword("current_passwd", value="")
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
353 form_ui.addLabel(D_("New password"))
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
354 form_ui.addPassword("new_passwd1", value="")
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
355 form_ui.addLabel(D_("New password (again)"))
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
356 form_ui.addPassword("new_passwd2", value="")
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
357
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
358 # FIXME: uncomment and fix these features
1713
0d972af37ff5 plugin misc_account: temporary disabling posts and account deletion
souliane <souliane@mailoo.org>
parents: 1707
diff changeset
359 """
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
360 if 'GROUPBLOG' in self.host.plugins:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
361 tab_container.addTab("delete_posts", D_("Delete your posts"), container=xml_tools.PairsContainer)
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
362 form_ui.addLabel(D_("Current profile password"))
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
363 form_ui.addPassword("delete_posts_passwd", value="")
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
364 form_ui.addLabel(D_("Delete all your posts and their comments"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
365 form_ui.addBool("delete_posts_checkbox", "false")
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
366 form_ui.addLabel(D_("Delete all your comments on other's posts"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
367 form_ui.addBool("delete_comments_checkbox", "false")
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
368
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
369 tab_container.addTab("delete", D_("Delete your account"), container=xml_tools.PairsContainer)
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
370 form_ui.addLabel(D_("Current profile password"))
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
371 form_ui.addPassword("delete_passwd", value="")
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
372 form_ui.addLabel(D_("Delete your account"))
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
373 form_ui.addBool("delete_checkbox", "false")
1713
0d972af37ff5 plugin misc_account: temporary disabling posts and account deletion
souliane <souliane@mailoo.org>
parents: 1707
diff changeset
374 """
0d972af37ff5 plugin misc_account: temporary disabling posts and account deletion
souliane <souliane@mailoo.org>
parents: 1707
diff changeset
375
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
376 return form_ui.toXml()
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
377
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
378 @defer.inlineCallbacks
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
379 def _accountDialogCb(self, data, profile):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
380 """Called when the user submits the main account dialog
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
381 @param data
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
382 @param profile
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
383 """
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
384 sat_cipher = yield self.host.memory.asyncGetParamA(C.PROFILE_PASS_PATH[1], C.PROFILE_PASS_PATH[0], profile_key=profile)
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
385
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
386 @defer.inlineCallbacks
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
387 def verify(attempt):
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
388 auth = yield PasswordHasher.verify(attempt, sat_cipher)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
389 defer.returnValue(auth)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
390
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
391 def error_ui(message=None):
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
392 if not message:
1691
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
393 message = D_("The provided profile password doesn't match.")
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
394 error_ui = xml_tools.XMLUI("popup", title=D_("Attempt failure"))
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
395 error_ui.addText(message)
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
396 return {'xmlui': error_ui.toXml()}
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
397
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
398 # check for account deletion
1855
1c9b2c184663 plugin account: email sending improvments:
Goffi <goffi@goffi.org>
parents: 1804
diff changeset
399 # FIXME: uncomment and fix these features
1713
0d972af37ff5 plugin misc_account: temporary disabling posts and account deletion
souliane <souliane@mailoo.org>
parents: 1707
diff changeset
400 """
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
401 delete_passwd = data[xml_tools.SAT_FORM_PREFIX + 'delete_passwd']
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
402 delete_checkbox = data[xml_tools.SAT_FORM_PREFIX + 'delete_checkbox']
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
403 if delete_checkbox == 'true':
1691
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
404 verified = yield verify(delete_passwd)
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
405 assert isinstance(verified, bool)
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
406 if verified:
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
407 defer.returnValue(self.__deleteAccount(profile))
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
408 defer.returnValue(error_ui())
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
409
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
410 # check for blog posts deletion
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
411 if 'GROUPBLOG' in self.host.plugins:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
412 delete_posts_passwd = data[xml_tools.SAT_FORM_PREFIX + 'delete_posts_passwd']
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
413 delete_posts_checkbox = data[xml_tools.SAT_FORM_PREFIX + 'delete_posts_checkbox']
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
414 delete_comments_checkbox = data[xml_tools.SAT_FORM_PREFIX + 'delete_comments_checkbox']
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
415 posts = delete_posts_checkbox == 'true'
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
416 comments = delete_comments_checkbox == 'true'
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
417 if posts or comments:
1691
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
418 verified = yield verify(delete_posts_passwd)
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
419 assert isinstance(verified, bool)
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
420 if verified:
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
421 defer.returnValue(self.__deleteBlogPosts(posts, comments, profile))
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
422 defer.returnValue(error_ui())
1713
0d972af37ff5 plugin misc_account: temporary disabling posts and account deletion
souliane <souliane@mailoo.org>
parents: 1707
diff changeset
423 """
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
424
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
425 # check for password modification
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
426 current_passwd = data[xml_tools.SAT_FORM_PREFIX + 'current_passwd']
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
427 new_passwd1 = data[xml_tools.SAT_FORM_PREFIX + 'new_passwd1']
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
428 new_passwd2 = data[xml_tools.SAT_FORM_PREFIX + 'new_passwd2']
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
429 if new_passwd1 or new_passwd2:
1691
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
430 verified = yield verify(current_passwd)
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
431 assert isinstance(verified, bool)
cec204c6360c plugin misc_account: fixed password verification
souliane <souliane@mailoo.org>
parents: 1653
diff changeset
432 if verified:
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
433 if new_passwd1 == new_passwd2:
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
434 data = yield self.__changePassword(new_passwd1, profile=profile)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
435 defer.returnValue(data)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
436 else:
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
437 defer.returnValue(error_ui(D_("The values entered for the new password are not equal.")))
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
438 defer.returnValue(error_ui())
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
439
1031
e90125d07072 plugins misc_account, misc_smtp: update the plugins that deal with passwords
souliane <souliane@mailoo.org>
parents: 993
diff changeset
440 defer.returnValue({})
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
441
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
442 def __changePassword(self, password, profile):
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
443 """Ask for a confirmation before changing the XMPP account and SàT profile passwords.
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
444
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
445 @param password (str): the new password
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
446 @param profile (str): %(doc_profile)s
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
447 """
1212
628e320eab1f memory: Sessions.newSession can be called with a forced session ID
souliane <souliane@mailoo.org>
parents: 1091
diff changeset
448 session_id, dummy = self._sessions.newSession({'new_password': password}, profile=profile)
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
449 form_ui = xml_tools.XMLUI("form", title=D_("Change your password?"), submit_id=self.__change_password_id, session_id=session_id)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
450 form_ui.addText(D_("Note for advanced users: this will actually change both your SàT profile password AND your XMPP account password."))
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
451 form_ui.addText(D_("Continue with changing the password?"))
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
452 return {'xmlui': form_ui.toXml()}
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
453
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
454 def __changePasswordCb(self, data, profile):
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
455 """Actually change the user XMPP account and SàT profile password
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
456 @param data (dict)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
457 @profile (str): %(doc_profile)s
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
458 """
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
459 password = self._sessions.profileGet(data['session_id'], profile)['new_password']
1044
85c110c0be86 plugins misc_account, misc_register_account: manually delete the sessions when not needed anymore
souliane <souliane@mailoo.org>
parents: 1041
diff changeset
460 del self._sessions[data['session_id']]
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
461
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
462 def passwordChanged(result):
1041
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
463 d = self.host.memory.setParam(C.PROFILE_PASS_PATH[1], password, C.PROFILE_PASS_PATH[0], profile_key=profile)
9095263011b6 plugin misc_accout: update relative to the introduction of profile password:
souliane <souliane@mailoo.org>
parents: 1040
diff changeset
464 d.addCallback(lambda dummy: self.host.memory.setParam("Password", password, "Connection", profile_key=profile))
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
465 confirm_ui = xml_tools.XMLUI("popup", title=D_("Confirmation"))
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
466 confirm_ui.addText(D_("Your password has been changed."))
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
467 return defer.succeed({'xmlui': confirm_ui.toXml()})
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
468
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
469 def errback(failure):
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
470 error_ui = xml_tools.XMLUI("popup", title=D_("Error"))
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
471 error_ui.addText(D_("Your password could not be changed: %s") % failure.getErrorMessage())
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
472 return defer.succeed({'xmlui': error_ui.toXml()})
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
473
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
474 d = ProsodyRegisterProtocol.prosodyctl(self, 'passwd', password, profile=profile)
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
475 d.addCallbacks(passwordChanged, errback)
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
476 return d
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
477
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
478 def __deleteAccount(self, profile):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
479 """Ask for a confirmation before deleting the XMPP account and SàT profile
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
480 @param profile
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
481 """
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
482 form_ui = xml_tools.XMLUI("form", title=D_("Delete your account?"), submit_id=self.__delete_account_id)
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
483 form_ui.addText(D_("If you confirm this dialog, you will be disconnected and then your XMPP account AND your SàT profile will both be DELETED."))
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
484 target = D_('contact list, messages history, blog posts and comments' if 'GROUPBLOG' in self.host.plugins else D_('contact list and messages history'))
987
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 954
diff changeset
485 form_ui.addText(D_("All your data stored on %(server)s, including your %(target)s will be erased.") % {'server': self.getNewAccountDomain(), 'target': target})
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
486 form_ui.addText(D_("There is no other confirmation dialog, this is the very last one! Are you sure?"))
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
487 return {'xmlui': form_ui.toXml()}
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
488
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
489 def __deleteAccountCb(self, data, profile):
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
490 """Actually delete the XMPP account and SàT profile
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
491 @param data
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
492 @param profile
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
493 """
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
494 def userDeleted(result):
934
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
495 client = self.host.profiles[profile]
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
496
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
497 for jid_ in client.roster._jids: # empty roster
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
498 client.presence.unsubscribe(jid_)
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
499
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
500 for jid_ in self.host.memory.getWaitingSub(profile): # delete waiting subscriptions
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
501 self.host.memory.delWaitingSub(jid_)
34dd9287dfe5 plugin account: bug fix profile deletion from the database + unsubscribe the contacts
souliane <souliane@mailoo.org>
parents: 895
diff changeset
502
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
503 delete_profile = lambda: self.host.memory.asyncDeleteProfile(profile, force=True)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
504 if 'GROUPBLOG' in self.host.plugins:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
505 d = self.host.plugins['GROUPBLOG'].deleteAllGroupBlogsAndComments(profile_key=profile)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
506 d.addCallback(lambda dummy: delete_profile())
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
507 else:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
508 delete_profile()
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
509
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
510 return defer.succeed({})
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
511
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
512 def errback(failure):
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
513 error_ui = xml_tools.XMLUI("popup", title=D_("Error"))
895
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
514 error_ui.addText(D_("Your XMPP account could not be deleted: %s") % failure.getErrorMessage())
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
515 return defer.succeed({'xmlui': error_ui.toXml()})
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
516
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
517 d = ProsodyRegisterProtocol.prosodyctl(self, 'deluser', profile=profile)
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
518 d.addCallbacks(userDeleted, errback)
52ee240acc9c plugin account: user can change his password or delete his XMPP account
souliane <souliane@mailoo.org>
parents: 870
diff changeset
519 return d
938
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
520
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
521 def __deleteBlogPosts(self, posts, comments, profile):
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
522 """Ask for a confirmation before deleting the blog posts
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
523 @param posts: delete all posts of the user (and their comments)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
524 @param comments: delete all the comments of the user on other's posts
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
525 @param data
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
526 @param profile
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
527 """
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
528 if posts:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
529 if comments: # delete everything
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
530 form_ui = xml_tools.XMLUI("form", title=D_("Delete all your (micro-)blog posts and comments?"), submit_id=self.__delete_posts_comments_id)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
531 form_ui.addText(D_("If you confirm this dialog, all the (micro-)blog data you submitted will be erased."))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
532 form_ui.addText(D_("These are the public and private posts and comments you sent to any group."))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
533 form_ui.addText(D_("There is no other confirmation dialog, this is the very last one! Are you sure?"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
534 else: # delete only the posts
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
535 form_ui = xml_tools.XMLUI("form", title=D_("Delete all your (micro-)blog posts?"), submit_id=self.__delete_posts_id)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
536 form_ui.addText(D_("If you confirm this dialog, all the public and private posts you sent to any group will be erased."))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
537 form_ui.addText(D_("There is no other confirmation dialog, this is the very last one! Are you sure?"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
538 elif comments: # delete only the comments
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
539 form_ui = xml_tools.XMLUI("form", title=D_("Delete all your (micro-)blog comments?"), submit_id=self.__delete_comments_id)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
540 form_ui.addText(D_("If you confirm this dialog, all the public and private comments you made on other people's posts will be erased."))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
541 form_ui.addText(D_("There is no other confirmation dialog, this is the very last one! Are you sure?"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
542
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
543 return {'xmlui': form_ui.toXml()}
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
544
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
545 def __deleteBlogPostsCb(self, posts, comments, data, profile):
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
546 """Actually delete the XMPP account and SàT profile
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
547 @param posts: delete all posts of the user (and their comments)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
548 @param comments: delete all the comments of the user on other's posts
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
549 @param profile
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
550 """
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
551 if posts:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
552 if comments:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
553 target = D_('blog posts and comments')
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
554 d = self.host.plugins['GROUPBLOG'].deleteAllGroupBlogsAndComments(profile_key=profile)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
555 else:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
556 target = D_('blog posts')
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
557 d = self.host.plugins['GROUPBLOG'].deleteAllGroupBlogs(profile_key=profile)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
558 elif comments:
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
559 target = D_('comments')
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
560 d = self.host.plugins['GROUPBLOG'].deleteAllGroupBlogsComments(profile_key=profile)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
561
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
562 def deleted(result):
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
563 ui = xml_tools.XMLUI("popup", title=D_("Deletion confirmation"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
564 # TODO: change the message when delete/retract notifications are done with XEP-0060
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
565 ui.addText(D_("Your %(target)s have been deleted.") % {'target': target})
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
566 ui.addText(D_("Known issue of the demo version: you need to refresh the page to make the deleted posts actually disappear."))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
567 return defer.succeed({'xmlui': ui.toXml()})
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
568
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
569 def errback(failure):
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
570 error_ui = xml_tools.XMLUI("popup", title=D_("Error"))
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
571 error_ui.addText(D_("Your %(target)s could not be deleted: %(message)s") % {'target': target, 'message': failure.getErrorMessage()})
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
572 return defer.succeed({'xmlui': error_ui.toXml()})
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
573
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
574 d.addCallbacks(deleted, errback)
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
575 return d
fc7e0828b18e plugin account, groupblog: user can erase all their microblogs at once
souliane <souliane@mailoo.org>
parents: 934
diff changeset
576
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
577 def asyncConnectWithXMPPCredentials(self, jid_s, password):
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
578 """Create and connect a new SàT profile using the given XMPP credentials.
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
579
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
580 Re-use given JID and XMPP password for the profile name and profile password.
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
581 @param jid_s (unicode): JID
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
582 @param password (unicode): XMPP password
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
583 @return Deferred(bool)
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
584 @raise exceptions.PasswordError, exceptions.ConflictError
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
585 """
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
586 try: # be sure that the profile doesn't exist yet
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
587 self.host.memory.getProfileName(jid_s)
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
588 except exceptions.ProfileUnknownError:
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
589 pass
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
590 else:
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
591 raise exceptions.ConflictError
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
592
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
593 d = self.registerAccount(None, password, jid_s, jid_s)
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
594 d.addCallback(lambda dummy: self.host.memory.getProfileName(jid_s)) # checks if the profile has been successfuly created
1725
c1be6363bfab core, plugin misc_account: set XMPP connection max retries to 0 when checking if an external account exists
souliane <souliane@mailoo.org>
parents: 1713
diff changeset
595 d.addCallback(self.host.asyncConnect, password, 0)
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
596
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
597 def removeProfile(failure): # profile has been successfully created but the XMPP credentials are wrong!
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
598 log.debug("Removing previously auto-created profile: %s" % failure.getErrorMessage())
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
599 self.host.memory.asyncDeleteProfile(jid_s)
1696
9a7a27c44611 plugin account: fixed profile creation: session is started to set the connection parameters, then stopped
Goffi <goffi@goffi.org>
parents: 1691
diff changeset
600 raise failure
1653
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
601
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
602 d.addErrback(removeProfile)
200efadcab76 plugin misc_account: add method asyncConnectWithXMPPCredentials
souliane <souliane@mailoo.org>
parents: 1433
diff changeset
603 return d