annotate src/plugins/plugin_misc_account.py @ 817:c39117d00f35

jp: refactoring: - imports from sat_frontends.jp instead of local imports - added __init__.py - commands now inherits from a base class: each base.CommandBase instance is a subcommand - new arguments are added in CommandBase.add_parser_options methods, starting point si CommandBase.run or CommandBase.connected if a profile connection is needed - commands are exported using a __commands__ variable at the top of the module - sub-subcommand are easily added by using an other CommandBase instance as parent instead of using a Jp instance. In this case, the parent subcommand must be the one exported, and have a subcommands iterable (see cmd_file or cmd_pipe for examples). - options which are often used (like --profile) are automatically added on demand (use_profile=True, use_progress=True) - commands are automatically loaded when there are in a module named cmd_XXX - restored --connect option - restored progress bar - restored getVersion bridge call on jp --version - fixed file and pipe commands - fixed forgotten translations - fixed non SàT compliant docstrings - better about/version dialog
author Goffi <goffi@goffi.org>
date Mon, 10 Feb 2014 13:44:09 +0100
parents 1fe00f0c9a91
children e030460e065e
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)
811
1fe00f0c9a91 dates update
Goffi <goffi@goffi.org>
parents: 771
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 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
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 751
diff changeset
20 from sat.core.i18n import _
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from logging import debug, info, warning, error
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from sat.core import exceptions
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 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
24 from os.path import join, dirname
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
25 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
26 from twisted.python.failure import Failure
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
27 from email.mime.text import MIMEText
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
28 from twisted.mail.smtp import sendmail
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
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
30 PLUGIN_INFO = {
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
31 "name": "Account Plugin",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
32 "import_name": "MISC-ACCOUNT",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
33 "type": "MISC",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
34 "protocols": [],
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
35 "dependencies": [],
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
36 "main": "MiscAccount",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
37 "handler": "no",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
38 "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
39 }
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
40
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
41 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
42
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
43 # 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
44 # 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
45 # 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
46
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
47 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
48 "email_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
49 "admin_email": "admin@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
50 "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
51 "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
52 "new_account_resource": "libervia",
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 "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
54 "prosodyctl": "prosodyctl",
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 "reserved_list": ['libervia'] # profiles which can't be used
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
56 }
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
57
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
58
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
59 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
60 """ Try to register an account with prosody """
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
61
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
62 def __init__(self, password, deferred=None):
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
63 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
64 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
65 self.data = ''
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
66
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
67 def connectionMade(self):
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
68 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
69 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
70
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
71 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
72 self.data += data
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
73
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
74 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
75 self.data += data
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
76
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
77 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
78 if (reason.value.exitCode == 0):
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
79 info(_('Prosody registration success'))
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
80 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
81 else:
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
82 error(_(u"Can't register Prosody account (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
83 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
84
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
85
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
86 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
87 """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
88 #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
89 # 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
90
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 __init__(self, host):
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
92 info(_(u"Plugin Account initialization"))
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
93 self.host = host
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
94 host.bridge.addMethod("registerSatAccount", ".plugin", in_sign='sss', out_sign='', method=self._registerAccount, async=True)
672
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
95 host.bridge.addMethod("getNewAccountDomain", ".plugin", in_sign='', out_sign='s', method=self._getNewAccountDomain, async=False)
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
96 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
97 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
98 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
99 if not paths:
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
100 error(_("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
101 else:
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
102 self._prosody_path = dirname(paths[0])
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
103 info(_('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
104
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
105 def getConfig(self, name):
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
106 return self.host.memory.getConfig(CONFIG_SECTION, name) or default_conf[name]
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
107
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
108 def _registerAccount(self, email, password, profile):
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
109
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 """
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
111 #Password Generation
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
112 #_charset = [chr(i) for i in range(0x21,0x7F)] #XXX: this charset seems to have some issues with openfire
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
113 _charset = [chr(i) for i in range(0x30,0x3A) + range(0x41,0x5B) + range (0x61,0x7B)]
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
114 import random
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
115 random.seed()
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
116 password = ''.join([random.choice(_charset) for i in range(15)])
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
117 """
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
118 if not email or not password or not profile:
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
119 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
120
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
121 if profile.lower() in self.getConfig('reserved_list'):
751
1def5b7edf9f core, bridge: better GenericException handling
Goffi <goffi@goffi.org>
parents: 733
diff changeset
122 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
123
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
124 d = self.host.memory.asyncCreateProfile(profile)
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
125 d.addCallback(self._profileRegistered, email, password, profile)
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
126 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
127
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
128 def _profileRegistered(self, result, email, password, profile):
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
129
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 #FIXME: values must be in a config file instead of hardcoded
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
131 self.host.memory.setParam("JabberID", "%s@%s/%s" % (profile, self.getConfig('new_account_domain'), self.getConfig('new_account_resource')),
641
49587e170f53 core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 609
diff changeset
132 "Connection", profile_key=profile)
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
133 self.host.memory.setParam("Server", self.getConfig('new_account_server'),
641
49587e170f53 core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 609
diff changeset
134 "Connection", profile_key=profile)
49587e170f53 core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 609
diff changeset
135 self.host.memory.setParam("Password", password,
49587e170f53 core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 609
diff changeset
136 "Connection", profile_key=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
137 #and the account
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
138
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
139 #XXX: we use "prosodyctl adduser" because "register" doesn't check conflict
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
140 # and just change the password if the account already exists
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
141 d = defer.Deferred()
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
142 prosody_reg = ProsodyRegisterProtocol(password, d)
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
143 prosody_exe = join(self._prosody_path, self.getConfig('prosodyctl'))
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
144 reactor.spawnProcess(prosody_reg, prosody_exe, [prosody_exe, 'adduser', "%s@%s" % (profile, self.getConfig('new_account_domain'))], path=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
145
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
146 d.addCallback(self._sendEmails, profile, email, password)
733
fe05afc3f0df reverted last commit
Goffi <goffi@goffi.org>
parents: 732
diff changeset
147 d.addCallback(lambda ignore: None)
fe05afc3f0df reverted last commit
Goffi <goffi@goffi.org>
parents: 732
diff changeset
148 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
149
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
150 def _sendEmails(self, result, login, email, password):
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
151 #time to send the email
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
152
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
153 _email_host = self.getConfig('email_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
154 _email_from = self.getConfig("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
155
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
156 def email_ok(ignore):
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
157 print ("Account creation email sent to %s" % 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
158
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
159 def email_ko(ignore):
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
160 #TODO: return error code to user
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
161 error("Failed to send email to %s" % email)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
162
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
163 body = (u"""Welcome to Libervia, a Salut à Toi project part
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
164
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
165 /!\\ WARNING, THIS IS ONLY A TECHNICAL DEMO, DON'T USE THIS ACCOUNT FOR ANY SERIOUS PURPOSE /!\\
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
166
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
167 Here are your connection informations:
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
168 ---
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
169 login: %(login)s
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
170 password: %(password)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
171
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
172 Your Jabber ID (JID) is: %(jid)s
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
173 ---
569
06faf5bffbc0 plugin account: first draft of automatic SàT/Prosody account creation (basis coming from Libervia)
Goffi <goffi@goffi.org>
parents:
diff changeset
174
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
175 SàT website: http://sat.goffi.org
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
176 follow SàT news: http://www.goffi.org
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
177
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
178 Any feedback welcome
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
179
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
180 Cheers
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
181 Goffi""" % {'login': login, 'password': password, 'jid': "%s@%s" % (login, self.getConfig('new_account_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
182 msg = MIMEText(body, 'plain', 'UTF-8')
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
183 msg['Subject'] = 'Libervia account created'
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
184 msg['From'] = _email_from
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
185 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
186
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
187 d_user = sendmail(_email_host, _email_from, email, msg.as_string())
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
188 d_user.addCallbacks(email_ok, email_ko)
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
189
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
190 #email to the administrator
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
191 body = (u"""New account created: %(login)s [%(email)s]""" % {'login': login, 'email': email}).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
192 msg = MIMEText(body, 'plain', 'UTF-8')
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
193 msg['Subject'] = 'Libervia new account created'
1cb24325485c plugin account: errReceived fix + emails are now sent on new account + generic example server constants
Goffi <goffi@goffi.org>
parents: 569
diff changeset
194 msg['From'] = _email_from
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
195 msg['To'] = self.getConfig('admin_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
196
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
197 d_admin = sendmail(_email_host, _email_from, self.getConfig('admin_email'), msg.as_string())
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
198 d_admin.addCallbacks(email_ok, email_ko)
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
199 return defer.DeferredList([d_user, d_admin])
672
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
200
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
201 def _getNewAccountDomain(self):
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
202 """@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
203 return self.getConfig('new_account_domain')
672
712e3782af12 plugin misc_account: added method getNewAccountDomain
souliane <souliane@mailoo.org>
parents: 644
diff changeset
204