I am little confused. Isn't what bitbucket does anyway. Someone can put their application there and invite others to join? How is this any different?
On Thursday, May 28, 2015 at 9:50:31 AM UTC-4, Anthony wrote: > > I like the idea, but I wonder if the use case is common enough to justify > including in the framework (where it will have to be tested and maintained > by the developers indefinitely). Instead, maybe this could be a plugin. > > Anthony > > On Thursday, May 28, 2015 at 1:19:07 AM UTC-4, Massimo Di Pierro wrote: >> >> think this is an excellent idea. Please submit a pull request. >> >> On Wednesday, 20 May 2015 03:12:24 UTC-5, James Burke wrote: >>> >>> Hi, >>> >>> I'm looking for a peer review of some code I put together for email >>> inviting users to join an application. I couldn't find anything suitable >>> looking around, hopefully I didn't overlook anything! >>> >>> The idea is, you enter in email addresses into a form, click submit and >>> it will send an email to the email address with an invite to your >>> application. The email will contain a link which the user clicks to take >>> them to a form to fill in the rest of their required details, name etc. >>> >>> I've tested this and it works, but I would like to know what others >>> thoughts are and there are any improvements that could be made. >>> >>> Thank you! >>> >>> *default.py controller* >>> def index(): >>> form=FORM('Enter a comma separated list of emails to send invites:', >>> BR(), >>> INPUT(_id='emails', _value=''), >>> INPUT(_type='submit')) >>> >>> if form.accepts(request,session): >>> # send the invitations >>> for email in form.vars.email.split(','): >>> auth.invite_user(email=email) >>> response.flash = 'Invitations sent' >>> >>> return dict(form=form) >>> >>> def confirm_registration(): >>> return dict(form=auth.confirm_registration()) >>> >>> >>> >>> >>> *gluon/tools.py* >>> def confirm_registration( >>> self, >>> next=DEFAULT, >>> onvalidation=DEFAULT, >>> onaccept=DEFAULT, >>> log=DEFAULT, >>> ): >>> """ >>> Modified version of Auth.reset_password() >>> """ >>> >>> >>> table_user = self.table_user() >>> request = current.request >>> # response = current.response >>> session = current.session >>> >>> >>> if next is DEFAULT: >>> next = self.get_vars_next() or self.settings. >>> reset_password_next >>> >>> >>> if self.settings.prevent_password_reset_attacks: >>> key = request.vars.key >>> if not key and len(request.args)>1: >>> key = request.args[-1] >>> if key: >>> session._reset_password_key = key >>> redirect(self.url('confirm_registration')) >>> else: >>> key = session._reset_password_key >>> else: >>> key = request.vars.key or getarg(-1) >>> try: >>> t0 = int(key.split('-')[0]) >>> if time.time() - t0 > 60 * 60 * 24: >>> raise Exception >>> user = table_user(reset_password_key=key) >>> if not user: >>> raise Exception >>> except Exception as e: >>> session.flash = self.messages.invalid_reset_password >>> redirect(self.url('login', vars=dict(test=e))) >>> redirect(next, client_side=self.settings.client_side) >>> passfield = self.settings.password_field >>> form = SQLFORM.factory( >>> Field('first_name', >>> label='First Name', >>> required=True), >>> Field('last_name', >>> label='Last Name', >>> required=True), >>> Field('new_password', 'password', >>> label=self.messages.new_password, >>> requires=self.table_user()[passfield].requires), >>> Field('new_password2', 'password', >>> label=self.messages.verify_password, >>> requires=[IS_EXPR( >>> 'value==%s' % repr(request.vars.new_password), >>> self.messages.mismatched_password >>> )]), >>> submit_button='Confirm Registration', >>> hidden=dict(_next=next), >>> formstyle=self.settings.formstyle, >>> separator=self.settings.label_separator >>> ) >>> if form.accepts(request, session, >>> hideerror=self.settings.hideerror): >>> user.update_record( >>> **{passfield: str(form.vars.new_password), >>> 'first_name': str(form.vars.first_name), >>> 'last_name': str(form.vars.last_name), >>> 'registration_key': '', >>> 'reset_password_key': ''}) >>> session.flash = self.messages.password_changed >>> if self.settings.login_after_password_change: >>> self.login_user(user) >>> redirect(next, client_side=self.settings.client_side) >>> return form >>> >>> >>> def email_registration(self, user): >>> """ >>> Modified version of Auth.email_reset_password() >>> """ >>> import >>> ... >> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.