#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from os.path import dirname, abspath sys.path.append(dirname(dirname(abspath(__file__)))) from account import AccountService, NoSuchUserError from app import app from flask import g, render_template, url_for from utils import make_confirmation, send_mail """ Create an account. The default operation is to send an activation mail to the given address. So the only difference to the register form on the website is that the username blacklist is not checked. The user can click the link and enter a password to finish account creation. Usage: $0 username mail Send an activation mail. $0 -p username mail Only print the link. """ def main(username, mail, print_only=False): service = AccountService(app.config['LDAP_HOST'], app.config['LDAP_BASE_DN'], app.config['LDAP_ADMIN_USER'], app.config['LDAP_ADMIN_PASS'], app.all_services) try: service.get_by_uid(username) except NoSuchUserError: pass else: raise CreationError(u'There is already a user named %s' % username) try: u = service.get_by_mail(mail) except NoSuchUserError: pass else: raise CreationError(u'There is already a user with email %s (uid: %s)' % (mail, u.uid)) confirm_token = make_confirmation('register', (username, mail)) confirm_link = url_for('register_complete', token=confirm_token, _external=True) if print_only: print confirm_link return body = render_template('mail/register.txt', username=username, mail=mail, link=confirm_link) send_mail(mail, u'E-Mail-Adresse bestätigen', body, sender=app.config.get('MAIL_CONFIRM_SENDER')) print 'Mail versandt.' class CreationError(ValueError): pass if __name__ == '__main__': try: sys.argv.remove('-p') except ValueError: print_only = False else: print_only = True if len(sys.argv) == 3: #XXX: I have the strong feeling that could be done better try: with app.test_request_context(base_url='http://%s/' % (app.config['SERVER_NAME'] or 'localhost')): main(sys.argv[1], sys.argv[2], print_only=print_only) except CreationError, e: print 'Error:', e else: print "Usage: %s username email" % sys.argv[0]