def index(self): '''Display the CLAs (and accept/do not accept buttons)''' show = {} show['show_postal_address'] = config.get('show_postal_address') username = turbogears.identity.current.user_name person = People.by_username(username) try: code_len = len(person.country_code) except TypeError: code_len = 0 if show['show_postal_address']: contactInfo = person.telephone or person.postal_address if person.country_code == 'O1' and not person.telephone: turbogears.flash(_('A telephone number is required to ' + \ 'complete the CLA. Please fill out below.')) elif not person.country_code or not person.human_name \ or not contactInfo: turbogears.flash(_('A valid country and telephone number ' + \ 'or postal address is required to complete the CLA. ' + \ 'Please fill them out below.')) else: if not person.telephone or code_len != 2 or \ person.country_code == ' ': turbogears.flash( _('A valid country and telephone number are' + ' required to complete the CLA. Please fill them ' + 'out below.')) cla = cla_done(person) person = person.filter_private() return dict(cla=cla, person=person, date=datetime.utcnow().ctime(), show=show)
def index(self): '''Display the CLAs (and accept/do not accept buttons)''' show = {} show['show_postal_address'] = config.get('show_postal_address') username = turbogears.identity.current.user_name person = People.by_username(username) try: code_len = len(person.country_code) except TypeError: code_len = 0 if show['show_postal_address']: contactInfo = person.telephone or person.postal_address if person.country_code == 'O1' and not person.telephone: turbogears.flash(_('A telephone number is required to ' + \ 'complete the CLA. Please fill out below.')) elif not person.country_code or not person.human_name \ or not contactInfo: turbogears.flash(_('A valid country and telephone number ' + \ 'or postal address is required to complete the CLA. ' + \ 'Please fill them out below.')) else: if not person.telephone or code_len != 2 or \ person.country_code == ' ': turbogears.flash(_('A valid country and telephone number are' + ' required to complete the CLA. Please fill them ' + 'out below.')) cla = cla_done(person) person = person.filter_private() return dict(cla=cla, person=person, date=datetime.utcnow().ctime(), show=show)
def id(self, username): person = People.by_username(username) if not cla_done(person): flash(_('This OpenID will not be active until the user has signed the CLA.')) person = person.filter_private() results = dict(endpoint_url = endpoint_url, yadis_url = build_url(yadis_base_url + '/' + username), user_url = build_url(id_base_url + '/' + username), person=person) return results
def id(self, username): person = People.by_username(username) if not cla_done(person): flash( _('This OpenID will not be active until the user has signed the CLA.' )) person = person.filter_private() results = dict(endpoint_url=endpoint_url, yadis_url=build_url(yadis_base_url + '/' + username), user_url=build_url(id_base_url + '/' + username), person=person) return results
def isauthorized(self, openid_identity, openid_trust_root): if identity.current.anonymous: return False username = identity.current.user.username person = People.by_username(username) if not cla_done(person): return False if build_url(id_base_url + '/' + identity.current.user_name) != openid_identity: return False key = (openid_identity, openid_trust_root) return session.get(key)
def send(self, human_name, telephone, country_code, postal_address=None, confirm=False, agree=False): '''Send CLA''' # TO DO: Pull show_postal_address in at the class level # as it's used in three methods now show = {} show['show_postal_address'] = config.get('show_postal_address') username = turbogears.identity.current.user_name person = People.by_username(username) if cla_done(person): turbogears.flash(_('You have already completed the CLA.')) turbogears.redirect('/cla/') return dict() if not agree: turbogears.flash(_("You have not completed the CLA.")) turbogears.redirect('/user/view/%s' % person.username) if not confirm: turbogears.flash( _('You must confirm that your personal information is accurate.' )) turbogears.redirect('/cla/') # Compare old information to new to see if any changes have been made if human_name and person.human_name != human_name: person.human_name = human_name if telephone and person.telephone != telephone: person.telephone = telephone if postal_address and person.postal_address != postal_address: person.postal_address = postal_address if country_code and person.country_code != country_code: person.country_code = country_code # Save it to the database try: session.flush() except Exception: turbogears.flash(_("Your updated information could not be saved.")) turbogears.redirect('/cla/') return dict() # Heuristics to detect bad data if show['show_postal_address']: contactInfo = person.telephone or person.postal_address if person.country_code == 'O1': if not person.human_name or not person.telephone: # Message implemented on index turbogears.redirect('/cla/') else: if not person.country_code or not person.human_name \ or not contactInfo: # Message implemented on index turbogears.redirect('/cla/') else: if not person.telephone or \ not person.human_name or \ not person.country_code: turbogears.flash(_('To complete the CLA, we must have your ' + \ 'name, telephone number, and country. Please ensure they ' + \ 'have been filled out.')) turbogears.redirect('/cla/') blacklist = config.get('country_blacklist', []) country_codes = [c for c in GeoIP.country_codes if c not in blacklist] if person.country_code not in country_codes: turbogears.flash(_('To complete the CLA, a valid country code ' + \ 'must be specified. Please select one now.')) turbogears.redirect('/cla/') if [True for char in person.telephone if char not in self.PHONEDIGITS]: turbogears.flash(_('Telephone numbers can only consist of ' + \ 'numbers, "-", "+", "(", ")", or " ". Please reenter using ' +\ 'only those characters.')) turbogears.redirect('/cla/') group = Groups.by_name(self.CLAGROUPNAME) try: # Everything is correct. person.apply(group, person) # Apply for the new group session.flush() except fas.ApplyError: # This just means the user already is a member (probably # unapproved) of this group pass except Exception: turbogears.flash( _("You could not be added to the '%s' group.") % group.name) turbogears.redirect('/cla/') return dict() try: # Everything is correct. person.sponsor(group, person) # Sponsor! session.flush() except fas.SponsorError: turbogears.flash( _("You are already a part of the '%s' group.") % group.name) turbogears.redirect('/cla/') except: turbogears.flash( _("You could not be added to the '%s' group.") % group.name) turbogears.redirect('/cla/') date_time = datetime.utcnow() Log(author_id=person.id, description='Completed CLA', changetime=date_time) cla_subject = \ _('Fedora ICLA completed for %(human_name)s (%(username)s)') % \ {'username': person.username, 'human_name': person.human_name} cla_text = _(''' Fedora user %(username)s has completed an ICLA (below). Username: %(username)s Email: %(email)s Date: %(date)s If you need to revoke it, please visit this link: %(rejecturl)s/accounts/cla/reject/%(username)s === CLA === ''') % { 'username': person.username, 'email': person.email, 'date': date_time.ctime(), 'rejecturl': config.get('base_url_filter.base_url').rstrip('/') } # Sigh.. if only there were a nicer way. plugin = TextTemplateEnginePlugin() cla_text += plugin.transform( dict(person=person), 'fas.templates.cla.cla').render(method='text', encoding=None) send_mail(config.get('legal_cla_email'), cla_subject, cla_text) turbogears.flash(_("You have successfully completed the CLA. You " + \ "are now in the '%s' group.") % group.name) turbogears.redirect('/user/view/%s' % person.username) return dict()
def send(self, human_name, telephone, country_code, postal_address=None, confirm=False, agree=False): '''Send CLA''' # TO DO: Pull show_postal_address in at the class level # as it's used in three methods now show = {} show['show_postal_address'] = config.get('show_postal_address') username = turbogears.identity.current.user_name person = People.by_username(username) if cla_done(person): turbogears.flash(_('You have already completed the CLA.')) turbogears.redirect('/cla/') return dict() if not agree: turbogears.flash(_("You have not completed the CLA.")) turbogears.redirect('/user/view/%s' % person.username) if not confirm: turbogears.flash(_( 'You must confirm that your personal information is accurate.' )) turbogears.redirect('/cla/') # Compare old information to new to see if any changes have been made if human_name and person.human_name != human_name: person.human_name = human_name if telephone and person.telephone != telephone: person.telephone = telephone if postal_address and person.postal_address != postal_address: person.postal_address = postal_address if country_code and person.country_code != country_code: person.country_code = country_code # Save it to the database try: session.flush() except Exception: turbogears.flash(_("Your updated information could not be saved.")) turbogears.redirect('/cla/') return dict() # Heuristics to detect bad data if show['show_postal_address']: contactInfo = person.telephone or person.postal_address if person.country_code == 'O1': if not person.human_name or not person.telephone: # Message implemented on index turbogears.redirect('/cla/') else: if not person.country_code or not person.human_name \ or not contactInfo: # Message implemented on index turbogears.redirect('/cla/') else: if not person.telephone or \ not person.human_name or \ not person.country_code: turbogears.flash(_('To complete the CLA, we must have your ' + \ 'name, telephone number, and country. Please ensure they ' + \ 'have been filled out.')) turbogears.redirect('/cla/') blacklist = config.get('country_blacklist', []) country_codes = [c for c in GeoIP.country_codes if c not in blacklist] if person.country_code not in country_codes: turbogears.flash(_('To complete the CLA, a valid country code ' + \ 'must be specified. Please select one now.')) turbogears.redirect('/cla/') if [True for char in person.telephone if char not in self.PHONEDIGITS]: turbogears.flash(_('Telephone numbers can only consist of ' + \ 'numbers, "-", "+", "(", ")", or " ". Please reenter using ' +\ 'only those characters.')) turbogears.redirect('/cla/') group = Groups.by_name(self.CLAGROUPNAME) try: # Everything is correct. person.apply(group, person) # Apply for the new group session.flush() except fas.ApplyError: # This just means the user already is a member (probably # unapproved) of this group pass except Exception: turbogears.flash(_("You could not be added to the '%s' group.") % group.name) turbogears.redirect('/cla/') return dict() try: # Everything is correct. person.sponsor(group, person) # Sponsor! session.flush() except fas.SponsorError: turbogears.flash(_("You are already a part of the '%s' group.") % group.name) turbogears.redirect('/cla/') except: turbogears.flash(_("You could not be added to the '%s' group.") % group.name) turbogears.redirect('/cla/') date_time = datetime.utcnow() Log(author_id = person.id, description = 'Completed CLA', changetime = date_time) cla_subject = \ _('Fedora ICLA completed for %(human_name)s (%(username)s)') % \ {'username': person.username, 'human_name': person.human_name} cla_text = _(''' Fedora user %(username)s has completed an ICLA (below). Username: %(username)s Email: %(email)s Date: %(date)s If you need to revoke it, please visit this link: %(rejecturl)s/accounts/cla/reject/%(username)s === CLA === ''') % {'username': person.username, 'email': person.email, 'date': date_time.ctime(), 'rejecturl' : config.get('base_url_filter.base_url').rstrip('/')} # Sigh.. if only there were a nicer way. plugin = TextTemplateEnginePlugin() cla_text += plugin.transform(dict(person=person), 'fas.templates.cla.cla').render(method='text', encoding=None) send_mail(config.get('legal_cla_email'), cla_subject, cla_text) turbogears.flash(_("You have successfully completed the CLA. You " + \ "are now in the '%s' group.") % group.name) turbogears.redirect('/user/view/%s' % person.username) return dict()