diff --git a/fas/client/fasClient b/fas/client/fasClient index 3e3097c..defa10b 100755 --- a/fas/client/fasClient +++ b/fas/client/fasClient @@ -436,7 +436,7 @@ class MakeShellAccounts(BaseClient): def create_ssh_keys(self): ''' Create ssh keys ''' - home_base = config.get('users', 'home').strip('"') + home_base = prefix + config.get('users', 'home').strip('"') for person in self.people: username = person['username'] if self.valid_user(username): diff --git a/fas/convert.py b/fas/convert.py index 96b46b6..cd90d2a 100644 --- a/fas/convert.py +++ b/fas/convert.py @@ -62,6 +62,7 @@ for person in c.fetchall(): p.internal_comments = internal_comments p.ircnick = ircnick p.status = 'active' + p.email = email try: session.flush() except IntegrityError, e: @@ -69,25 +70,6 @@ for person in c.fetchall(): session.close() continue - person_email = PersonEmails() - try: - person_email.email = email - except AttributeError: - print "\tERROR - Could not create email for %s (%s)" % (username, email) - session.close() - continue - person_email.person = p - person_email.description = 'Fedora Email' - person_email.verified = True # The first email is verified for free, since this is where their password is sent. - session.flush() - - - email_purpose = EmailPurposes() - email_purpose.person = p - email_purpose.person_email = person_email - email_purpose.purpose = 'primary' - session.flush() - c.execute('select id, name, owner_id, group_type, needs_sponsor, user_can_remove, prerequisite_id, joinmsg from project_group;') bool_dict = {0 : False, 1 : True} print "Creating Groups..." diff --git a/fas/fas/cla.py b/fas/fas/cla.py index 8782df6..69001cf 100644 --- a/fas/fas/cla.py +++ b/fas/fas/cla.py @@ -135,7 +135,7 @@ class CLA(controllers.Controller): emails = []; for uid in key.uids: emails.extend([uid.email]) - if person.emails['primary'] in emails: + if person.email in emails: verified = True else: turbogears.flash(_('Your key did not match your email.')) @@ -181,7 +181,7 @@ class CLA(controllers.Controller): message.plain = ''' Fedora user %(username)s has signed a completed ICLA using their published GPG key, ID %(gpg_keyid)s, that is associated with e-mail address %(email)s. The full signed ICLA is attached. -''' % {'username': person.username, 'gpg_keyid': person.gpg_keyid, 'email': person.emails['primary']} +''' % {'username': person.username, 'gpg_keyid': person.gpg_keyid, 'email': person.email} signature.file.seek(0) # For another read() message.attach(signature.file, signature.filename) turbomail.enqueue(message) diff --git a/fas/fas/group.py b/fas/fas/group.py index ba88f8b..3fc4b1b 100644 --- a/fas/fas/group.py +++ b/fas/fas/group.py @@ -308,7 +308,7 @@ Fedora user %(user)s, aka %(name)s <%(email)s> has requested membership for %(applicant)s (%(applicant_name)s) in the %(group)s group and needs a sponsor. Please go to %(url)s to take action. -''') % {'user': person.username, 'name': person.human_name, 'applicant': target.username, 'applicant_name': target.human_name, 'email': person.emails['primary'], 'url': url, 'group': group.name} +''') % {'user': person.username, 'name': person.human_name, 'applicant': target.username, 'applicant_name': target.human_name, 'email': person.email, 'url': url, 'group': group.name} turbomail.enqueue(message) turbogears.flash(_('%(user)s has applied to %(group)s!') % \ {'user': target.username, 'group': group.name}) @@ -339,14 +339,14 @@ Please go to %(url)s to take action. turbogears.redirect('/group/view/%s' % group.name) else: import turbomail - message = turbomail.Message(config.get('accounts_email'), target.emails['primary'], "Your Fedora '%s' membership has been sponsored" % group.name) + message = turbomail.Message(config.get('accounts_email'), target.email, "Your Fedora '%s' membership has been sponsored" % group.name) message.plain = _(''' %(name)s <%(email)s> has sponsored you for membership in the %(group)s group of the Fedora account system. If applicable, this change should propagate into the e-mail aliases and CVS repository within an hour. %(joinmsg)s -''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'], 'joinmsg': group.joinmsg} +''') % {'group': group.name, 'name': person.human_name, 'email': person.email, 'joinmsg': group.joinmsg} turbomail.enqueue(message) turbogears.flash(_("'%s' has been sponsored!") % target.human_name) turbogears.redirect('/group/view/%s' % group.name) @@ -376,13 +376,13 @@ propagate into the e-mail aliases and CVS repository within an hour. {'user': target.username, 'group': group.name, 'error': e}) turbogears.redirect('/group/view/%s' % group.name) else: - message = turbomail.Message(config.get('accounts_email'), target.emails['primary'], "Your Fedora '%s' membership has been removed" % group.name) + message = turbomail.Message(config.get('accounts_email'), target.email, "Your Fedora '%s' membership has been removed" % group.name) message.plain = _(''' %(name)s <%(email)s> has removed you from the '%(group)s' group of the Fedora Accounts System This change is effective immediately for new operations, and should propagate into the e-mail aliases within an hour. -''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary']} +''') % {'group': group.name, 'name': person.human_name, 'email': person.email} turbomail.enqueue(message) turbogears.flash(_('%(name)s has been removed from %(group)s') % \ {'name': target.username, 'group': group.name}) @@ -413,7 +413,7 @@ aliases within an hour. turbogears.redirect('/group/view/%s' % group.name) else: import turbomail - message = turbomail.Message(config.get('accounts_email'), target.emails['primary'], "Your Fedora '%s' membership has been upgraded" % group.name) + message = turbomail.Message(config.get('accounts_email'), target.email, "Your Fedora '%s' membership has been upgraded" % group.name) # Should we make person.upgrade return this? role = PersonRoles.query.filter_by(group=group, member=target).one() status = role.role_type @@ -422,7 +422,7 @@ aliases within an hour. '%(group)s' group of the Fedora Accounts System This change is effective immediately for new operations, and should propagate into the e-mail aliases within an hour. -''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'], 'status': status} +''') % {'group': group.name, 'name': person.human_name, 'email': person.email, 'status': status} turbomail.enqueue(message) turbogears.flash(_('%s has been upgraded!') % target.username) turbogears.redirect('/group/view/%s' % group.name) @@ -452,7 +452,7 @@ into the e-mail aliases within an hour. turbogears.redirect('/group/view/%s' % group.name) else: import turbomail - message = turbomail.Message(config.get('accounts_email'), target.emails['primary'], "Your Fedora '%s' membership has been downgraded" % group.name) + message = turbomail.Message(config.get('accounts_email'), target.email, "Your Fedora '%s' membership has been downgraded" % group.name) role = PersonRoles.query.filter_by(group=group, member=target).one() status = role.role_type message.plain = _(''' @@ -460,7 +460,7 @@ into the e-mail aliases within an hour. '%(group)s' group of the Fedora Accounts System This change is effective immediately for new operations, and should propagate into the e-mail aliases within an hour. -''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'], 'status': status} +''') % {'group': group.name, 'name': person.human_name, 'email': person.email, 'status': status} turbomail.enqueue(message) turbogears.flash(_('%s has been downgraded!') % target.username) turbogears.redirect('/group/view/%s' % group.name) @@ -504,7 +504,7 @@ into the e-mail aliases within an hour. group = Groups.by_name(groupname) if isApproved(person, group): - message = turbomail.Message(person.emails['primary'], target, _('Come join The Fedora Project!')) + message = turbomail.Message(person.email, target, _('Come join The Fedora Project!')) message.plain = _(''' %(name)s <%(email)s> has invited you to join the Fedora Project! We are a community of users and developers who produce a @@ -520,7 +520,7 @@ place for you whether you're an artist, a web site builder, a writer, or a people person. You'll grow and learn as you work on a team with other very smart and talented people. -Fedora and FOSS are changing the world -- come be a part of it!''') % {'name': person.human_name, 'email': person.emails['primary']} +Fedora and FOSS are changing the world -- come be a part of it!''') % {'name': person.human_name, 'email': person.email} turbomail.enqueue(message) turbogears.flash(_('Message sent to: %s') % target) turbogears.redirect('/group/view/%s' % group.name) diff --git a/fas/fas/help.py b/fas/fas/help.py index 3f3d229..80afefd 100644 --- a/fas/fas/help.py +++ b/fas/fas/help.py @@ -4,10 +4,11 @@ from turbogears.database import session from fas.auth import * +# TODO: gettext like crazy. class Help(controllers.Controller): help = { 'none' : ['Error', '

We could not find that help item

'], 'user_ircnick' : ['IRC Nick (Optional)', '

IRC Nick is used to identify yourself on irc.freenode.net. Please register your nick on irc.freenode.net first, then fill this in so people can find you online when they need to

'], - 'user_primary_email' : ['Primary Email (Required)', '

This email address should be your prefered email contact and will be used to send various official emails to. This is also where your @fedoraproject.org email will get forwarded

'], + 'user_email' : ['Email (Required)', '

This email address should be your prefered email contact and will be used to send various official emails to. This is also where your @fedoraproject.org email will get forwarded

'], 'user_human_name' : ['Full Name (Required)', '

Your Human Name or "real life" name

'], 'user_gpg_keyid' : ['GPG Key', '

Only required for users signing the CLA. It is generally used to prove that a message or email came from you or to encrypt information so that only the recipients can read it. See the CLAHowTo for more information

'], 'user_telephone' : ['Telephone', '

Only required for users signing the CLA. Sometimes during a time of emergency someone from the Fedora Project may need to contact you. For more information see our Privacy Policy

'], diff --git a/fas/fas/model.py b/fas/fas/model.py index 4f39024..c345665 100644 --- a/fas/fas/model.py +++ b/fas/fas/model.py @@ -56,14 +56,10 @@ get_engine() # PeopleTable = Table('people', metadata, autoload=True) -PersonEmailsTable = Table('person_emails', metadata, autoload=True) -EmailPurposesTable = Table('email_purposes', metadata, autoload=True) PersonRolesTable = Table('person_roles', metadata, autoload=True) ConfigsTable = Table('configs', metadata, autoload=True) GroupsTable = Table('groups', metadata, autoload=True) -GroupEmailsTable = Table('group_emails', metadata, autoload=True) -GroupEmailPurposesTable = Table('group_email_purposes', metadata, autoload=True) GroupRolesTable = Table('group_roles', metadata, autoload=True) BugzillaQueueTable = Table('bugzilla_queue', metadata, autoload=True) LogTable = Table('log', metadata, autoload=True) @@ -116,7 +112,7 @@ class People(SABase): A class method that can be used to search users based on their email addresses since it is unique. ''' - return cls.query.join(['email_purposes', 'person_email']).filter_by(email=email).one() + return cls.query.filter_by(email=email).one() @classmethod def by_username(cls, username): @@ -250,8 +246,12 @@ class People(SABase): if not identity.in_group('admin'): # Only admins can see internal_comments del props['internal_comments'] + del props['emailtoken'] if identity.current.anonymous: # Anonymous users can't see any of these + del props['email'] + del props['emailtoken'] + del props['unverified_email'] del props['ssh_key'] del props['gpg_keyid'] del props['affiliation'] @@ -262,8 +262,10 @@ class People(SABase): del props['postal_address'] del props['telephone'] del props['facsimile'] + # TODO: Are we still doing the fas-system thing? I think I saw a systems users somewhere... elif not identity.current.user.username == self.username and 'fas-system' not in identity.current.groups: # Only an admin or the user themselves can see these fields + del props['unverified_email'] del props['password'] del props['passwordtoken'] del props['postal_address'] @@ -277,19 +279,6 @@ class People(SABase): approved_memberships = association_proxy('approved_roles', 'group') unapproved_memberships = association_proxy('unapproved_roles', 'group') - emails = association_proxy('email_purposes', 'email') - -class PersonEmails(SABase): - '''Map a person to an email address.''' - def __repr__(cls): - return "PersonEmails(%s,%s,%s,%s)" % (cls.person.username, cls.email, cls.description, cls.verified) - -class EmailPurposes(SABase): - '''Map a person to an email (with a purpose).''' - def __repr__(cls): - return "EmailPurposes(%s,%s,%s)" % (cls.person.username, cls.email, cls.purpose) - email = association_proxy('person_email', 'email') - class PersonRoles(SABase): '''Record people that are members of groups.''' def __repr__(cls): @@ -317,7 +306,7 @@ class Groups(SABase): A class method that can be used to search groups based on their email addresses since it is unique. ''' - return cls.query.join(['email_purposes', 'group_email']).filter_by(email=email).one() + return cls.query.filter_by(email=email).one() @classmethod @@ -338,21 +327,6 @@ class Groups(SABase): # Groups that this group belongs to memberships = association_proxy('group_roles', 'group') - emails = association_proxy('email_purposes', 'email') - -class GroupEmails(SABase): - '''Map a group to an email address.''' - def __repr__(cls): - return "GroupEmails(%s,%s,%s,%s)" % (cls.group.name, cls.email, cls.description, cls.verified) - -class GroupEmailPurposes(SABase): - '''Map a group to an email (with a purpose).''' - def __repr__(cls): - return "GroupEmailPurposes(%s,%s,%s)" % (cls.group.name, cls.email, cls.purpose) - - email = association_proxy('group_email', 'email') - - class GroupRoles(SABase): '''Record groups that are members of other groups.''' pass @@ -420,12 +394,6 @@ mapper(UnApprovedRoles, UnApprovedRolesSelect, properties = { }) mapper(People, PeopleTable, properties = { - 'email_purposes': relation(EmailPurposes, backref = 'person', - collection_class = column_mapped_collection( - EmailPurposesTable.c.purpose)), - 'person_emails': relation(PersonEmails, backref = 'person', - collection_class = column_mapped_collection( - PersonEmailsTable.c.email)), # This name is kind of confusing. It's to allow person.group_roles['groupname'] in order to make auth.py (hopefully) slightly faster. 'group_roles': relation(PersonRoles, collection_class = attribute_mapped_collection('groupname'), @@ -435,11 +403,6 @@ mapper(People, PeopleTable, properties = { 'unapproved_roles': relation(UnApprovedRoles, backref='member', primaryjoin = PeopleTable.c.id==UnApprovedRoles.c.person_id) }) -mapper(PersonEmails, PersonEmailsTable) -mapper(EmailPurposes, EmailPurposesTable, properties = { - 'person_email': relation(PersonEmails, uselist = False, - primaryjoin = PersonEmailsTable.c.id==EmailPurposesTable.c.email_id) - }) mapper(PersonRoles, PersonRolesTable, properties = { 'member': relation(People, backref = 'roles', lazy = False, primaryjoin=PersonRolesTable.c.person_id==PeopleTable.c.id), @@ -454,20 +417,9 @@ mapper(Configs, ConfigsTable, properties = { mapper(Groups, GroupsTable, properties = { 'owner': relation(People, uselist=False, primaryjoin = GroupsTable.c.owner_id==PeopleTable.c.id), - 'email_purposes': relation(GroupEmailPurposes, backref = 'group', - collection_class = column_mapped_collection( - GroupEmailPurposesTable.c.purpose)), - 'group_emails': relation(GroupEmails, backref = 'group', - collection_class = column_mapped_collection( - GroupEmailsTable.c.email)), 'prerequisite': relation(Groups, uselist=False, primaryjoin = GroupsTable.c.prerequisite_id==GroupsTable.c.id) }) -mapper(GroupEmails, GroupEmailsTable) -mapper(GroupEmailPurposes, GroupEmailPurposesTable, properties = { - 'group_email': relation(GroupEmails, uselist = False, - primaryjoin = GroupEmailsTable.c.id==GroupEmailPurposesTable.c.email_id) - }) # GroupRoles are complex because the group is a member of a group and thus # is referencing the same table. mapper(GroupRoles, GroupRolesTable, properties = { diff --git a/fas/fas/release.py b/fas/fas/release.py index a1d54fd..5ebac71 100644 --- a/fas/fas/release.py +++ b/fas/fas/release.py @@ -2,7 +2,7 @@ Release information about the Fedora Accounts System ''' -VERSION = '0.1' +VERSION = '0.5' NAME = 'fas' DESCRIPTION = 'The Fedora Account System' LONG_DESCRIPTION = ''' diff --git a/fas/fas/templates/cla/cla.html b/fas/fas/templates/cla/cla.html index 5a5b0e8..34643a3 100644 --- a/fas/fas/templates/cla/cla.html +++ b/fas/fas/templates/cla/cla.html @@ -20,7 +20,7 @@

Full name: ${person.human_name}
- E-Mail: ${person.emails['primary']}
+ E-Mail: ${person.email}
Address: ${person.postal_address}
Telephone: ${person.telephone} diff --git a/fas/fas/templates/cla/cla.txt b/fas/fas/templates/cla/cla.txt index 68e0a18..38451aa 100644 --- a/fas/fas/templates/cla/cla.txt +++ b/fas/fas/templates/cla/cla.txt @@ -27,7 +27,7 @@ fedora-legal@redhat.com. Please read this document carefully before signing and keep a copy for your records. - Full name: ${'%28s' % person.human_name} E-Mail: ${'%17s' % person.emails['primary']} + Full name: ${'%28s' % person.human_name} E-Mail: ${'%17s' % person.email} Address: ${person.postal_address} @@ -150,5 +150,5 @@ ${person.postal_address} If you agree to these terms and conditions, type "I agree" here: Enter your full name here: - E-mail: ${person.emails['primary']} + E-mail: ${person.email} Date: ${date} diff --git a/fas/fas/templates/cla/view.html b/fas/fas/templates/cla/view.html index b084fe6..6c2c1a5 100644 --- a/fas/fas/templates/cla/view.html +++ b/fas/fas/templates/cla/view.html @@ -19,7 +19,7 @@

${_('If you agree to these terms and conditions, type "%s" here:') % 'I agree'}
${_('Full Name:')} ${person.human_name}
- ${_('E-mail:')} ${person.emails['primary']}
+ ${_('E-mail:')} ${person.email}
${_('Date:')} ${date}
diff --git a/fas/fas/templates/group/dump.txt b/fas/fas/templates/group/dump.txt index 565811b..d417d81 100644 --- a/fas/fas/templates/group/dump.txt +++ b/fas/fas/templates/group/dump.txt @@ -1,3 +1,3 @@ #for role in sorted(group.approved_roles) -${role.member.username},${role.member.emails['primary']},${role.member.human_name},${role.role_type},0 +${role.member.username},${role.member.email},${role.member.human_name},${role.role_type},0 #end diff --git a/fas/fas/templates/group/invite.html b/fas/fas/templates/group/invite.html index ab9fd7f..0c537a8 100644 --- a/fas/fas/templates/group/invite.html +++ b/fas/fas/templates/group/invite.html @@ -12,12 +12,12 @@
${_('To email:')}
- ${_('From:')} ${person.emails['primary']}
+ ${_('From:')} ${person.email}
${_('Subject:')} Invitation to join the Fedora Team!
${_('Message:')}

- ${person.human_name} <${person.emails['primary']}> has invited you to join the Fedora + ${person.human_name} <${person.email}> has invited you to join the Fedora Project! We are a community of users and developers who produce a complete operating system from entirely free and open source software (FOSS). ${person.human_name} thinks that you have knowledge and skills diff --git a/fas/fas/templates/user/edit.html b/fas/fas/templates/user/edit.html index c79578b..af32575 100644 --- a/fas/fas/templates/user/edit.html +++ b/fas/fas/templates/user/edit.html @@ -17,8 +17,8 @@

- - + +
- -
-
- - - - -
-
- - ${_('Cancel')} -
- - - diff --git a/fas/fas/templates/user/email/edit.html b/fas/fas/templates/user/email/edit.html deleted file mode 100644 index 3ba8e3a..0000000 --- a/fas/fas/templates/user/email/edit.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - ${_('Edit Email')} - - -

${_('Edit Email')}

-
-
- ${email} - -
-
- - - - -
- -
- - diff --git a/fas/fas/templates/user/email/manage.html b/fas/fas/templates/user/email/manage.html deleted file mode 100644 index 96669a0..0000000 --- a/fas/fas/templates/user/email/manage.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - ${_('Manage Emails')} - - -

${_('Managing Emails for %s') % target.username}

-

Available Emails

- - - - - - - - - - - - - - - - - -
${_('Email')}${_('Description')}${_('Verified')}
${email.email}${email.description}${_('Verified')}${_('Unverified')} (${_('Resend Verification')})${_('Remove')}
-

Set Emails

-
- - - - - - - - - - - - - - - -
${_('Email')}${_('Description')}${_('Purpose')}
- - ${purpose.person_email.description}${purpose.purpose}
-
- - diff --git a/fas/fas/templates/user/resetpass.html b/fas/fas/templates/user/resetpass.html index 232f04b..12c1a9e 100644 --- a/fas/fas/templates/user/resetpass.html +++ b/fas/fas/templates/user/resetpass.html @@ -11,7 +11,7 @@
    -
    +
diff --git a/fas/fas/templates/user/view.html b/fas/fas/templates/user/view.html index 4c0afd5..1920c38 100644 --- a/fas/fas/templates/user/view.html +++ b/fas/fas/templates/user/view.html @@ -19,7 +19,7 @@
${_('Account Name:')}
${person.username}
${_('Real Name:')}
${person.human_name}
-
${_('Email:')}
${person.emails['primary']}
+
${_('Email:')}
${person.email}
${_('IRC Nick:')}
${person.ircnick} 
${_('PGP Key:')}
${person.gpg_keyid} 
diff --git a/fas/fas/user.py b/fas/fas/user.py index b6c9f57..a1095e9 100644 --- a/fas/fas/user.py +++ b/fas/fas/user.py @@ -17,13 +17,10 @@ import subprocess from OpenSSL import crypto from fas.model import People -from fas.model import PersonEmails -from fas.model import EmailPurposes from fas.model import Log from fas import openssl_fas from fas.auth import * -#from fas.user_email import Email, NonFedoraEmail from random import Random import sha @@ -159,8 +156,6 @@ def generate_salt(length=8): class User(controllers.Controller): - #email = Email() - def __init__(self): '''Create a User Controller. ''' @@ -254,16 +249,11 @@ class User(controllers.Controller): return dict() try: target.human_name = human_name - # FIXME: WARNING! This is deceptive. Remember that it - # changes the email object itself, not the email attached - # to the purpose. - if not target.emails['primary'] == email: + if target.email != email: ''' Log this ''' - oldEmail = target.emails['primary'] + oldEmail = target.email Log(author_id=person.id, description='Email changed from %s to %s' % (oldEmail, email)) - target.emails['primary'] = email - -# target.emails['bugzilla'] = bugzilla + target.email = email target.ircnick = ircnick target.gpg_keyid = gpg_keyid target.telephone = telephone @@ -311,7 +301,7 @@ class User(controllers.Controller): people = People.query.filter(People.username.like(re_search)).order_by('username') emails = {} for person in people: - emails[person.username] = person.emails['primary'] + emails[person.username] = person.email return dict(emails=emails) @expose(template='fas.templates.user.new') @@ -334,26 +324,12 @@ class User(controllers.Controller): person.username = username person.human_name = human_name person.telephone = telephone + person.email = email person.password = '*' person.status = 'active' session.flush() - - # TODO: Handle properly if email has already been used. This might be painful, since the person already exists, at this point. - person_email = PersonEmails() - person_email.email = email - person_email.person = person - person_email.description = 'Fedora Email' - person_email.verified = True # The first email is verified for free, since this is where their password is sent. - session.flush() - - email_purpose = EmailPurposes() - email_purpose.person = person - email_purpose.person_email = person_email - email_purpose.purpose = 'primary' - session.flush() - newpass = generate_password() - message = turbomail.Message(config.get('accounts_email'), person.emails['primary'], _('Welcome to the Fedora Project!')) + message = turbomail.Message(config.get('accounts_email'), person.email, _('Welcome to the Fedora Project!')) message.plain = _(''' You have created a new Fedora account! Your new password is: %s @@ -436,6 +412,7 @@ forward to working with you! turbogears.redirect('/user/view/%s' % turbogears.identity.current.user_name) return dict() + #TODO: Validate @expose(template="fas.templates.user.resetpass") def sendpass(self, username, email, encrypted=False): import turbomail @@ -449,64 +426,59 @@ forward to working with you! except InvalidRequestError: turbogears.flash(_('Username email combo does not exist!')) turbogears.redirect('/user/resetpass') - if username and email: - if not email == person.emails['primary']: - turbogears.flash(_("username + email combo unknown.")) - return dict() - newpass = generate_password() - message = turbomail.Message(config.get('accounts_email'), email, _('Fedora Project Password Reset')) - mail = _(''' + if email != person.email: + turbogears.flash(_("username + email combo unknown.")) + return dict() + newpass = generate_password() + message = turbomail.Message(config.get('accounts_email'), email, _('Fedora Project Password Reset')) + mail = _(''' You have requested a password reset! Your new password is: %s Please go to https://admin.fedoraproject.org/fas/ to change it. ''') % newpass['pass'] - if encrypted: - # TODO: Move this out to a single function (same as - # CLA one), think of how to make sure this doesn't get - # full of random keys (keep a clean Fedora keyring) - # TODO: MIME stuff? - keyid = re.sub('\s', '', person.gpg_keyid) - ret = subprocess.call([config.get('gpgexec'), '--keyserver', config.get('gpg_keyserver'), '--recv-keys', keyid]) - if ret != 0: - turbogears.flash(_("Your key could not be retrieved from subkeys.pgp.net")) - turbogears.redirect('/cla/view/sign') + if encrypted: + # TODO: Move this out to a single function (same as + # CLA one), think of how to make sure this doesn't get + # full of random keys (keep a clean Fedora keyring) + # TODO: MIME stuff? + keyid = re.sub('\s', '', person.gpg_keyid) + ret = subprocess.call([config.get('gpgexec'), '--keyserver', config.get('gpg_keyserver'), '--recv-keys', keyid]) + if ret != 0: + turbogears.flash(_("Your key could not be retrieved from subkeys.pgp.net")) + turbogears.redirect('/user/resetpass') + return dict() + else: + try: + plaintext = StringIO.StringIO(mail) + ciphertext = StringIO.StringIO() + ctx = gpgme.Context() + ctx.armor = True + signer = ctx.get_key(re.sub('\s', '', config.get('gpg_fingerprint'))) + ctx.signers = [signer] + recipient = ctx.get_key(keyid) + def passphrase_cb(uid_hint, passphrase_info, prev_was_bad, fd): + os.write(fd, '%s\n' % config.get('gpg_passphrase')) + ctx.passphrase_cb = passphrase_cb + ctx.encrypt_sign([recipient], + gpgme.ENCRYPT_ALWAYS_TRUST, + plaintext, + ciphertext) + message.plain = ciphertext.getvalue() + except: + turbogears.flash(_('Your password reset email could not be encrypted. Your password has not been changed.')) return dict() - #try: - # subprocess.check_call([config.get('gpgexec'), '--keyserver', config.get('gpg_keyserver'), '--recv-keys', keyid]) - #except subprocess.CalledProcessError: - # turbogears.flash(_("Your key could not be retrieved from subkeys.pgp.net")) - else: - try: - plaintext = StringIO.StringIO(mail) - ciphertext = StringIO.StringIO() - ctx = gpgme.Context() - ctx.armor = True - signer = ctx.get_key(re.sub('\s', '', config.get('gpg_fingerprint'))) - ctx.signers = [signer] - recipient = ctx.get_key(keyid) - def passphrase_cb(uid_hint, passphrase_info, prev_was_bad, fd): - os.write(fd, '%s\n' % config.get('gpg_passphrase')) - ctx.passphrase_cb = passphrase_cb - ctx.encrypt_sign([recipient], - gpgme.ENCRYPT_ALWAYS_TRUST, - plaintext, - ciphertext) - message.plain = ciphertext.getvalue() - except: - turbogears.flash(_('Your password reset email could not be encrypted. Your password has not been changed.')) - return dict() - else: - message.plain = mail; - turbomail.enqueue(message) - try: - person.password = newpass['hash'] - turbogears.flash(_('Your new password has been emailed to you.')) - except: - turbogears.flash(_('Your password could not be reset.')) - else: - turbogears.redirect('/login') - return dict() + else: + message.plain = mail; + turbomail.enqueue(message) + try: + person.password = newpass['hash'] + turbogears.flash(_('Your new password has been emailed to you.')) + turbogears.redirect('/login') + return dict() + except: + turbogears.flash(_('Your password could not be reset.')) + return dict() @identity.require(turbogears.identity.not_anonymous()) @expose(template="genshi-text:fas.templates.user.cert", format="text", content_type='text/plain; charset=utf-8') @@ -533,7 +505,7 @@ Please go to https://admin.fedoraproject.org/fas/ to change it. O=config.get('openssl_o'), OU=config.get('openssl_ou'), CN=person.username, - emailAddress=person.emails['primary'], + emailAddress=person.email, ) cert = openssl_fas.createCertificate(req, (cacert, cakey), person.certificate_serial, (0, expire), digest='md5') diff --git a/fas/fas/user_email.py b/fas/fas/user_email.py deleted file mode 100644 index 7fdfa6b..0000000 --- a/fas/fas/user_email.py +++ /dev/null @@ -1,294 +0,0 @@ -import turbogears -from turbogears import controllers, expose, paginate, identity, redirect, widgets, validate, validators, error_handler, config -from turbogears.database import session -import cherrypy - -import turbomail -import random - -from fas.model import People -from fas.model import PersonEmails -from fas.model import EmailPurposes -from fas.model import Log - -from fas.auth import * - -class NonFedoraEmail(validators.FancyValidator): - '''Make sure that an email address is not @fedoraproject.org''' - def _to_python(self, value, state): - return value.strip() - def validate_python(self, value, state): - if value.endswith('@fedoraproject.org'): - raise validators.Invalid(_("To prevent email loops, your email address cannot be @fedoraproject.org."), value, state) - -class EmailSave(validators.Schema): - email = validators.All( - validators.Email(not_empty=True, strip=True), - NonFedoraEmail(not_empty=True, strip=True), - ) - description = validators.String(not_empty=True, max=512) - -def generate_validtoken(length=32): - ''' Generate Validation Token ''' - chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - token = '' - for i in xrange(length): - token += random.choice(chars) - return token - -# Note: I'm making some of these controllers really, really hideous -# (in the interest of allowing admins to modify pretty much everything) -# Is this really necessary (as in, can tg-admin shell be "good enough?" -# (I'm pretty much referring to passing the username around every -# instead of just using the current logged on person.) - -# I hope all of this doesn't end up being too convoluted for most users... -class Email(controllers.Controller): - - def __init__(self): - '''Create an Email Controller. - ''' - - @identity.require(turbogears.identity.not_anonymous()) - def index(self): - '''Redirect to manage - ''' - turbogears.redirect('/user/email/manage') - - - @expose(template="fas.templates.error") - def error(self, tg_errors=None): - '''Show a friendly error message''' - if not tg_errors: - turbogears.redirect('/') - return dict(tg_errors=tg_errors) - - @identity.require(turbogears.identity.not_anonymous()) - #@validate(validators=UserView()) - @error_handler(error) - @expose(template="fas.templates.user.email.manage", allow_json=True) - def manage(self, targetname=None): - ''' - Manage a person's emails - ''' - # TODO: Some sort of auth checking - other people should - # probably be limited to looking at a person's email through - # /user/view, although admins should probably be able to set - # emails (with/without verification?) - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - return dict(target=target) - - @identity.require(turbogears.identity.not_anonymous()) - # TODO: Validate! - #@validate(validators=UserView()) - @error_handler(error) - @expose(template="fas.templates.user.email.edit") - # TODO: Should the purpose-setting part be moved in into user/save? - def edit(self, targetname, email): - ''' - Display the form to edit an email - ''' - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - if not canEditUser(person, target): - turbogears.flash(_('You cannot edit %s') % target.username ) - turbogears.redirect('/user/email/manage') - return dict() - return dict(email=email, target=target) - - @identity.require(turbogears.identity.not_anonymous()) - # TODO: Validate! - #@validate(validators=UserView()) - @error_handler(error) - @expose() - # TODO: Should the purpose-setting part be moved in into user/save? - def save(self, targetname, email, description): - ''' - Save an email entry - ''' - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - if not canEditUser(person, target): - turbogears.flash(_('You cannot edit %s') % target.username ) - turbogears.redirect('/user/email/manage') - return dict() - - try: - person.person_emails[email].description = description - except KeyError: - turbogears.flash(_('No such email is associated with your user.')) - turbogears.redirect('/user/email/manage') - return dict() - else: - turbogears.flash(_('Your email has been saved.')) - turbogears.redirect('/user/email/manage') - return dict() - - @identity.require(turbogears.identity.not_anonymous()) - # TODO: Validate! - #@validate(validators=UserView()) - @error_handler(error) - @expose(template="fas.templates.user.email.add") - def add(self, targetname=None): - ''' - Display the form to add an email - ''' - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - if not canEditUser(person, target): - turbogears.flash(_('You cannot edit %s') % target.username ) - turbogears.redirect('/user/email/manage') - return dict() - - return dict(target=target) - - @identity.require(turbogears.identity.not_anonymous()) - # TODO: Validate! - #@validate(validators=UserView()) - @error_handler(error) - @expose(allow_json=True) - def remove(self, targetname, email): - ''' - Remove an email - ''' - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - if not canEditUser(person, target): - turbogears.flash(_('You cannot edit %s') % target.username ) - turbogears.redirect('/user/email/manage') - return dict() - - try: - session.delete(target.person_emails[email]) - session.flush() - except IntegrityError: - turbogears.flash(_('You cannot delete an email that is in use.')) - turbogears.redirect('/user/email/manage') - return dict() - else: - turbogears.flash(_('The email \'%s\' has been removed.') % email ) - turbogears.redirect('/user/email/manage') - return dict() - - @identity.require(turbogears.identity.not_anonymous()) - @validate(validators=EmailSave()) - @error_handler(error) - @expose(template="fas.templates.user.email.add", allow_json=True) - def create(self, targetname, email, description): - ''' - Create an email entry. - ''' - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - if not canEditUser(person, target): - turbogears.flash(_('You cannot edit %s') % target.username ) - turbogears.redirect('/user/email/manage') - return dict() - - validtoken = generate_validtoken() - - try: - person_email = PersonEmails() - person_email.email = email - person_email.person = target - person_email.description = description - person_email.validtoken = validtoken - session.flush() - # Hmm, should this be checked in the validator or here? - except IntegrityError: - turbogears.flash(_('The email \'%s\' is already in used.') % email) - return dict(target=target) - else: - # TODO: Make this email more friendly. Maybe escape the @ in email too? - validurl = config.get('base_url_filter.base_url') + turbogears.url('/user/email/verify/%s/%s/%s') % (target.username, email, validtoken) - message = turbomail.Message(config.get('accounts_email'), email, _('Confirm this email address')) - message.plain = _(''' -Go to this URL to verify that you own this email address: %s -''') % validurl - turbomail.enqueue(message) - turbogears.flash(_('Your email has been added. Before you can use this email, you must verify it. The email you added should receive a message with instructions shortly.')) - turbogears.redirect('/user/email/manage') - return dict() - - return dict(target=target) - - @identity.require(turbogears.identity.not_anonymous()) - # TODO: Validation! - #@validate(validators=UserView()) - @error_handler(error) - @expose(allow_json=True) - def verify(self, targetname, email, validtoken): - ''' - Verify an email - ''' - username = turbogears.identity.current.user_name - person = People.by_username(username) - - if targetname: - target = People.by_username(targetname) - else: - target = person - - if not canEditUser(person, target): - turbogears.flash(_('You cannot edit %s') % target.username ) - turbogears.redirect('/user/email/manage') - return dict() - - if target.person_emails[email].verified: - turbogears.flash(_('The email provided has already been verified.')) - turbogears.redirect('/user/email/manage') - return dict() - - try: - if target.person_emails[email].validtoken == validtoken: - target.person_emails[email].validtoken = '' - target.person_emails[email].verified = True - turbogears.flash(_('Your email has been successfully verified.')) - turbogears.redirect('/user/email/manage') - return dict() - else: - turbogears.flash(_('The verification string did not match.')) - turbogears.redirect('/user/email/manage') - return dict() - except KeyError: - turbogears.flash(_('No such email is associated with your user.')) - turbogears.redirect('/user/email/manage') - return dict() - diff --git a/fas/fas2.sql b/fas/fas2.sql index 868abb4..6c8d2fc 100644 --- a/fas/fas2.sql +++ b/fas/fas2.sql @@ -257,7 +257,7 @@ create or replace function bugzilla_sync() returns trigger as $bz_sync$ return None # Retrieve the bugzilla email address - ### FIXME: Once we implement it, we'll want to add a check for an email + ### FIXME: Once we implement it, we will want to add a check for an email # address in configs::application='bugzilla',person_id=person_id, # attribute='login' plan = plpy.prepare("select email from people where id = $1", ('int4',)) @@ -575,10 +575,10 @@ create trigger role_bugzilla_sync before update or insert or delete -- for each row execute procedure bugzilla_sync_email(); -- For Fas to connect to the database -GRANT ALL ON TABLE people, groups, person_roles, person_emails, email_purposes, group_roles, group_emails, group_email_purposes, bugzilla_queue, configs, person_seq, visit, visit_identity, log, log_id_seq, TO GROUP fedora; +GRANT ALL ON TABLE people, groups, person_roles, group_roles, bugzilla_queue, configs, person_seq, visit, visit_identity, log, log_id_seq, person_emails_id_seq, group_emails_id_seq TO GROUP fedora; -- Create default admin user - Default Password "admin" -INSERT INTO people (id, username, human_name, password) VALUES (100001, 'admin', 'Admin User', '$1$djFfnacd$b6NFqFlac743Lb4sKWXj4/'); +INSERT INTO people (id, username, human_name, password, email) VALUES (100001, 'admin', 'Admin User', '$1$djFfnacd$b6NFqFlac743Lb4sKWXj4/', 'root@localhost'); -- Create default groups and populate INSERT INTO groups (id, name, display_name, owner_id, group_type) VALUES (100002, 'cla_sign', 'Signed CLA Group', (SELECT id from people where username='admin'), 'tracking'); @@ -589,7 +589,3 @@ INSERT INTO groups (name, display_name, owner_id, group_type) VALUES ('fas-syste INSERT INTO person_roles (person_id, group_id, role_type, role_status, internal_comments, sponsor_id) VALUES ((SELECT id from people where username='admin'), (select id from groups where name='accounts'), 'administrator', 'approved', 'created at install time', (SELECT id from people where username='admin')); - --- Give admin user his email address -INSERT INTO person_emails (email, person_id, verified) VALUES ('root@localhost', (SELECT id from people where username='admin'), true); -INSERT INTO email_purposes (email_id, person_id, purpose) VALUES ((SELECT id from person_emails where email='root@localhost'), (SELECT id from people where username='admin'), 'primary'); diff --git a/fas/po/fas.pot b/fas/po/fas.pot index 4344b4d..b2a4ee5 100644 --- a/fas/po/fas.pot +++ b/fas/po/fas.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2008-03-04 22:01-0500\n" +"POT-Creation-Date: 2008-03-11 19:47-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,207 +17,166 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.1\n" -#: client/fasClient.py:41 -msgid "Download and sync most recent content" -msgstr "" - -#: client/fasClient.py:46 -#, python-format -msgid "Specify config file (default \"%default\")" -msgstr "" - -#: client/fasClient.py:51 -msgid "Do not sync group information" -msgstr "" - -#: client/fasClient.py:56 -msgid "Do not sync passwd information" -msgstr "" - -#: client/fasClient.py:61 -msgid "Do not sync shadow information" -msgstr "" - -#: client/fasClient.py:66 -msgid "Specify URL of fas server." -msgstr "" - -#: client/fasClient.py:71 -msgid "Enable FAS synced shell accounts" -msgstr "" - -#: client/fasClient.py:76 -msgid "Disable FAS synced shell accounts" -msgstr "" - -#: fas/auth.py:87 -msgid "cla_sign_group Does not exist! Please create it!" -msgstr "" - -#: fas/auth.py:101 -msgid "cla_click_group Does not exist! Please create it!" -msgstr "" - -#: fas/auth.py:168 fas/auth.py:176 +#: fas/auth.py:158 fas/auth.py:166 #, python-format msgid "%s membership required before application to this group is allowed" msgstr "" -#: fas/cla.py:52 +#: fas/cla.py:53 msgid "" "To sign the CLA we must have your telephone number, postal address and " "gpg key id. Please ensure they have been filled out" msgstr "" -#: fas/cla.py:69 fas/cla.py:95 +#: fas/cla.py:70 fas/cla.py:96 msgid "You have already signed the CLA." msgstr "" -#: fas/cla.py:108 fas/user.py:390 +#: fas/cla.py:109 fas/user.py:448 msgid "Your key could not be retrieved from subkeys.pgp.net" msgstr "" -#: fas/cla.py:121 +#: fas/cla.py:122 #, python-format msgid "Your signature could not be verified: '%s'." msgstr "" -#: fas/cla.py:131 +#: fas/cla.py:132 msgid "" "Your signature's fingerprint did not match the fingerprint registered in " "FAS." msgstr "" -#: fas/cla.py:140 +#: fas/cla.py:141 msgid "Your key did not match your email." msgstr "" -#: fas/cla.py:145 +#: fas/cla.py:146 msgid "len(sigs) == 0" msgstr "" -#: fas/cla.py:151 +#: fas/cla.py:152 msgid "The GPG-signed part of the message did not contain a signed CLA." msgstr "" -#: fas/cla.py:156 +#: fas/cla.py:157 msgid "The text \"I agree\" was not found in the CLA." msgstr "" -#: fas/cla.py:170 fas/cla.py:210 +#: fas/cla.py:171 fas/cla.py:218 #, python-format msgid "You could not be added to the '%s' group." msgstr "" -#: fas/cla.py:180 +#: fas/cla.py:188 #, python-format msgid "You have successfully signed the CLA. You are now in the '%s' group." msgstr "" -#: fas/cla.py:194 +#: fas/cla.py:202 msgid "" "You have already signed the CLA, so it is unnecessary to complete the " "Click-through CLA." msgstr "" -#: fas/cla.py:198 +#: fas/cla.py:206 msgid "You have already completed the Click-through CLA." msgstr "" -#: fas/cla.py:214 +#: fas/cla.py:222 #, python-format msgid "" "You have successfully agreed to the click-through CLA. You are now in " "the '%s' group." msgstr "" -#: fas/cla.py:218 +#: fas/cla.py:226 msgid "You have not agreed to the click-through CLA." msgstr "" -#: fas/controllers.py:98 +#: fas/controllers.py:104 #, python-format msgid "Welcome, %s" msgstr "" -#: fas/controllers.py:113 +#: fas/controllers.py:119 msgid "" "The credentials you supplied were not correct or did not grant access to " "this resource." msgstr "" -#: fas/controllers.py:116 +#: fas/controllers.py:122 msgid "You must provide your credentials before accessing this resource." msgstr "" -#: fas/controllers.py:119 +#: fas/controllers.py:125 msgid "Please log in." msgstr "" -#: fas/controllers.py:131 +#: fas/controllers.py:136 msgid "You have successfully logged out." msgstr "" -#: fas/group.py:21 +#: fas/group.py:23 #, python-format msgid "The group '%s' does not exist." msgstr "" -#: fas/group.py:33 +#: fas/group.py:35 #, python-format msgid "The group '%s' already exists." msgstr "" -#: fas/group.py:129 fas/group.py:469 +#: fas/group.py:134 fas/group.py:479 #, python-format msgid "You cannot view '%s'" msgstr "" -#: fas/group.py:143 fas/group.py:159 +#: fas/group.py:148 fas/group.py:164 msgid "Only FAS adminstrators can create groups." msgstr "" -#: fas/group.py:177 +#: fas/group.py:182 #, python-format msgid "The group: '%s' could not be created." msgstr "" -#: fas/group.py:187 +#: fas/group.py:192 #, python-format msgid "" "The group: '%(group)s' has been created, but '%(user)s' could not be " "added as a group administrator." msgstr "" -#: fas/group.py:189 +#: fas/group.py:194 #, python-format msgid "The group: '%s' has been created." msgstr "" -#: fas/group.py:204 fas/group.py:219 +#: fas/group.py:209 fas/group.py:224 #, python-format msgid "You cannot edit '%s'." msgstr "" -#: fas/group.py:236 +#: fas/group.py:241 msgid "The group details could not be saved." msgstr "" -#: fas/group.py:238 +#: fas/group.py:243 msgid "The group details have been saved." msgstr "" -#: fas/group.py:257 +#: fas/group.py:269 #, python-format msgid "No Groups found matching '%s'" msgstr "" -#: fas/group.py:283 +#: fas/group.py:295 #, python-format -msgid "%(user)s has already applied to %(group)s!" +msgid "%(user)s could not apply to %(group)s: %(error)s" msgstr "" -#: fas/group.py:295 +#: fas/group.py:306 #, python-format msgid "" "\n" @@ -228,22 +187,22 @@ msgid "" "Please go to %(url)s to take action. \n" msgstr "" -#: fas/group.py:302 +#: fas/group.py:313 #, python-format msgid "%(user)s has applied to %(group)s!" msgstr "" -#: fas/group.py:319 +#: fas/group.py:330 #, python-format msgid "You cannot sponsor '%s'" msgstr "" -#: fas/group.py:326 +#: fas/group.py:337 #, python-format -msgid "'%s' could not be sponsored!" +msgid "%(user)s could not be sponsored in %(group)s: %(error)s" msgstr "" -#: fas/group.py:331 +#: fas/group.py:343 #, python-format msgid "" "\n" @@ -254,22 +213,22 @@ msgid "" "%(joinmsg)s\n" msgstr "" -#: fas/group.py:339 +#: fas/group.py:351 #, python-format msgid "'%s' has been sponsored!" msgstr "" -#: fas/group.py:356 +#: fas/group.py:368 #, python-format -msgid "You cannot remove '%s'." +msgid "You cannot remove '%(user)s' from '%(group)s'." msgstr "" -#: fas/group.py:363 +#: fas/group.py:375 #, python-format -msgid "%(name)s could not be removed from %(group)s!" +msgid "%(user)s could not be removed from %(group)s: %(error)s" msgstr "" -#: fas/group.py:369 +#: fas/group.py:380 #, python-format msgid "" "\n" @@ -279,22 +238,22 @@ msgid "" "aliases within an hour.\n" msgstr "" -#: fas/group.py:376 +#: fas/group.py:387 #, python-format -msgid "%(name)s has been removed from %(group)s!" +msgid "%(name)s has been removed from %(group)s" msgstr "" -#: fas/group.py:393 +#: fas/group.py:404 #, python-format msgid "You cannot upgrade '%s'" msgstr "" -#: fas/group.py:403 +#: fas/group.py:411 #, python-format -msgid "%(name)s could not be upgraded!" +msgid "%(name)s could not be upgraded in %(group)s: %(error)s" msgstr "" -#: fas/group.py:411 +#: fas/group.py:420 #, python-format msgid "" "\n" @@ -304,22 +263,22 @@ msgid "" "into the e-mail aliases within an hour.\n" msgstr "" -#: fas/group.py:418 +#: fas/group.py:427 #, python-format msgid "%s has been upgraded!" msgstr "" -#: fas/group.py:434 +#: fas/group.py:443 #, python-format msgid "You cannot downgrade '%s'" msgstr "" -#: fas/group.py:441 +#: fas/group.py:450 #, python-format -msgid "%(username)s could not be downgraded!" +msgid "%(name)s could not be downgraded in %(group)s: %(error)s" msgstr "" -#: fas/group.py:448 +#: fas/group.py:458 #, python-format msgid "" "\n" @@ -329,16 +288,16 @@ msgid "" "into the e-mail aliases within an hour.\n" msgstr "" -#: fas/group.py:455 +#: fas/group.py:465 #, python-format msgid "%s has been downgraded!" msgstr "" -#: fas/group.py:497 +#: fas/group.py:507 msgid "Come join The Fedora Project!" msgstr "" -#: fas/group.py:498 +#: fas/group.py:508 #, python-format msgid "" "\n" @@ -359,16 +318,36 @@ msgid "" "Fedora and FOSS are changing the world -- come be a part of it!" msgstr "" -#: fas/group.py:515 +#: fas/group.py:525 #, python-format msgid "Message sent to: %s" msgstr "" -#: fas/group.py:518 +#: fas/group.py:528 #, python-format msgid "You are not in the '%s' group." msgstr "" +#: fas/model.py:131 +msgid "user is already in this group" +msgstr "" + +#: fas/model.py:144 fas/model.py:182 +msgid "user is not an unapproved member" +msgstr "" + +#: fas/model.py:154 fas/model.py:169 fas/model.py:190 +msgid "user is not a member" +msgstr "" + +#: fas/model.py:158 +msgid "administrators cannot be upgraded any further" +msgstr "" + +#: fas/model.py:173 +msgid "users cannot be downgraded any further" +msgstr "" + #: fas/openid_fas.py:55 msgid "The OpenID request could not be decoded." msgstr "" @@ -378,63 +357,68 @@ msgstr "" msgid "Loading: %(visitmod)s" msgstr "" -#: fas/user.py:33 +#: fas/user.py:37 #, python-format msgid "'%s' does not exist." msgstr "" -#: fas/user.py:41 -msgid "To prevent email loops, your email address cannot be @fedoraproject.org." -msgstr "" - -#: fas/user.py:53 +#: fas/user.py:49 #, python-format msgid "Error: Could not create - '%s'" msgstr "" -#: fas/user.py:55 +#: fas/user.py:51 #, python-format msgid "'%s' already exists." msgstr "" -#: fas/user.py:64 +#: fas/user.py:59 +msgid "To prevent email loops, your email address cannot be @fedoraproject.org." +msgstr "" + +#: fas/user.py:77 +#, python-format +msgid "Error - Not a valid ssh key: %s" +msgstr "" + +#: fas/user.py:86 #, python-format msgid "'%s' is an illegal username." msgstr "" -#: fas/user.py:205 +#: fas/user.py:231 #, python-format msgid "You cannot edit %s" msgstr "" -#: fas/user.py:220 +#: fas/user.py:247 #, python-format msgid "You do not have permission to edit '%s'" msgstr "" -#: fas/user.py:235 +#: fas/user.py:267 #, python-format msgid "Your account details could not be saved: %s" msgstr "" -#: fas/user.py:237 +#: fas/user.py:269 msgid "Your account details have been saved." msgstr "" -#: fas/user.py:251 +#: fas/user.py:294 #, python-format msgid "No users found matching '%s'" msgstr "" -#: fas/user.py:257 +#: fas/user.py:310 msgid "No need to sign up, you have an account!" msgstr "" -#: fas/user.py:278 +#: fas/user.py:332 msgid "Welcome to the Fedora Project!" msgstr "" -#: fas/user.py:279 +#: fas/user.py:333 #, python-format msgid "" "\n" @@ -476,42 +460,46 @@ msgid "" "forward to working with you!\n" msgstr "" -#: fas/user.py:319 +#: fas/user.py:373 msgid "" "Your password has been emailed to you. Please log in with it and change " "your password" msgstr "" -#: fas/user.py:322 +#: fas/user.py:376 #, python-format msgid "The username '%s' already Exists. Please choose a different username." msgstr "" -#: fas/user.py:348 +#: fas/user.py:402 msgid "Your password has been changed." msgstr "" -#: fas/user.py:351 +#: fas/user.py:405 msgid "Your password could not be changed." msgstr "" -#: fas/user.py:357 +#: fas/user.py:411 msgid "You are already logged in!" msgstr "" -#: fas/user.py:366 +#: fas/user.py:421 msgid "You are already logged in." msgstr "" -#: fas/user.py:372 +#: fas/user.py:427 +msgid "Username email combo does not exist!" +msgstr "" + +#: fas/user.py:430 msgid "username + email combo unknown." msgstr "" -#: fas/user.py:375 +#: fas/user.py:433 msgid "Fedora Project Password Reset" msgstr "" -#: fas/user.py:376 +#: fas/user.py:434 #, python-format msgid "" "\n" @@ -521,20 +509,24 @@ msgid "" "Please go to https://admin.fedoraproject.org/fas/ to change it.\n" msgstr "" -#: fas/user.py:415 +#: fas/user.py:469 msgid "" "Your password reset email could not be encrypted. Your password has not " "been changed." msgstr "" -#: fas/user.py:422 +#: fas/user.py:476 msgid "Your new password has been emailed to you." msgstr "" -#: fas/user.py:424 +#: fas/user.py:480 msgid "Your password could not be reset." msgstr "" +#: fas/user.py:516 +msgid "Before generating a certificate, you must first sign the CLA." +msgstr "" + #: fas/templates/about.html:7 msgid "About FAS" msgstr "" @@ -604,6 +596,30 @@ msgstr "" msgid "The following error(s) have occured with your request:" msgstr "" +#: fas/templates/home.html:17 +#, python-format +msgid "" +"%(user)s requests approval to join %(group)s." +msgstr "" + +#: fas/templates/home.html:24 fas/templates/user/list.html:43 +#: fas/templates/user/view.html:42 +msgid "Click-through CLA" +msgstr "" + +#: fas/templates/home.html:24 fas/templates/user/view.html:42 +msgid "GPG Sign it!" +msgstr "" + +#: fas/templates/home.html:25 +msgid "CLA Not Signed. To become a full Fedora Contributor please " +msgstr "" + +#: fas/templates/home.html:25 +msgid "Sign the CLA" +msgstr "" + #: fas/templates/login.html:7 msgid "Login to the Fedora Accounts System" msgstr "" @@ -616,7 +632,7 @@ msgstr "" msgid "User Name:" msgstr "" -#: fas/templates/login.html:21 fas/templates/user/view.html:25 +#: fas/templates/login.html:21 fas/templates/user/view.html:33 msgid "Password:" msgstr "" @@ -672,7 +688,7 @@ msgstr "" msgid "My Account" msgstr "" -#: fas/templates/master.html:51 fas/templates/master.html:88 +#: fas/templates/master.html:51 fas/templates/master.html:91 msgid "Log Out" msgstr "" @@ -681,53 +697,49 @@ msgid "Log In" msgstr "" #: fas/templates/master.html:59 -msgid "News" +msgid "Home" msgstr "" #: fas/templates/master.html:62 -msgid "User List" -msgstr "" - -#: fas/templates/master.html:63 msgid "New Group" msgstr "" -#: fas/templates/master.html:65 -msgid "Apply For a new Group" +#: fas/templates/master.html:63 +msgid "User List" msgstr "" -#: fas/templates/master.html:66 +#: fas/templates/master.html:65 msgid "Group List" msgstr "" -#: fas/templates/master.html:70 -msgid "Locale:" +#: fas/templates/master.html:66 +msgid "Apply For a new Group" msgstr "" -#: fas/templates/master.html:72 -msgid "OK" +#: fas/templates/master.html:67 +msgid "News" msgstr "" -#: fas/templates/master.html:84 +#: fas/templates/master.html:87 msgid "About" msgstr "" -#: fas/templates/master.html:85 +#: fas/templates/master.html:88 msgid "Contact Us" msgstr "" -#: fas/templates/master.html:86 +#: fas/templates/master.html:89 msgid "Legal & Privacy" msgstr "" -#: fas/templates/master.html:91 +#: fas/templates/master.html:94 msgid "" "Copyright © 2007 Red Hat, Inc. and others. All Rights Reserved. Please " "send any comments or corrections to the websites team." msgstr "" -#: fas/templates/master.html:94 +#: fas/templates/master.html:97 msgid "" "The Fedora Project is maintained and driven by the community and " "sponsored by Red Hat. This is a community maintained site. Red Hat is " @@ -819,7 +831,7 @@ msgstr "" msgid "Signed CLA:" msgstr "" -#: fas/templates/group/edit.html:7 fas/templates/group/view.html:7 +#: fas/templates/group/edit.html:7 msgid "Edit Group" msgstr "" @@ -828,37 +840,37 @@ msgstr "" msgid "Edit Group: %s" msgstr "" -#: fas/templates/group/edit.html:13 fas/templates/group/new.html:17 +#: fas/templates/group/edit.html:13 fas/templates/group/new.html:18 msgid "Display Name:" msgstr "" -#: fas/templates/group/edit.html:17 fas/templates/group/new.html:25 +#: fas/templates/group/edit.html:18 fas/templates/group/new.html:28 msgid "Group Type:" msgstr "" -#: fas/templates/group/edit.html:21 fas/templates/group/new.html:21 +#: fas/templates/group/edit.html:23 fas/templates/group/new.html:23 msgid "Group Owner:" msgstr "" -#: fas/templates/group/edit.html:25 fas/templates/group/new.html:29 -#: fas/templates/group/view.html:39 +#: fas/templates/group/edit.html:28 fas/templates/group/new.html:33 +#: fas/templates/group/view.html:41 msgid "Needs Sponsor:" msgstr "" -#: fas/templates/group/edit.html:30 fas/templates/group/new.html:33 -#: fas/templates/group/view.html:43 +#: fas/templates/group/edit.html:34 fas/templates/group/new.html:38 +#: fas/templates/group/view.html:45 msgid "Self Removal:" msgstr "" -#: fas/templates/group/edit.html:35 +#: fas/templates/group/edit.html:40 msgid "Group Prerequisite:" msgstr "" -#: fas/templates/group/edit.html:40 +#: fas/templates/group/edit.html:46 msgid "Group Join Message:" msgstr "" -#: fas/templates/group/edit.html:44 fas/templates/user/edit.html:74 +#: fas/templates/group/edit.html:51 fas/templates/user/edit.html:80 msgid "Save!" msgstr "" @@ -923,12 +935,12 @@ msgstr "" msgid "Status" msgstr "" -#: fas/templates/group/list.html:44 fas/templates/group/view.html:20 -#: fas/templates/user/view.html:56 +#: fas/templates/group/list.html:44 fas/templates/group/view.html:22 +#: fas/templates/user/view.html:67 msgid "Approved" msgstr "" -#: fas/templates/group/list.html:45 fas/templates/group/view.html:21 +#: fas/templates/group/list.html:45 fas/templates/group/view.html:23 msgid "Unapproved" msgstr "" @@ -944,116 +956,124 @@ msgstr "" msgid "Group Name:" msgstr "" -#: fas/templates/group/new.html:37 +#: fas/templates/group/new.html:43 msgid "Must Belong To:" msgstr "" -#: fas/templates/group/new.html:41 fas/templates/group/view.html:47 +#: fas/templates/group/new.html:48 fas/templates/group/view.html:49 msgid "Join Message:" msgstr "" -#: fas/templates/group/new.html:45 +#: fas/templates/group/new.html:53 msgid "Create!" msgstr "" -#: fas/templates/group/view.html:19 +#: fas/templates/group/view.html:7 fas/templates/user/view.html:74 +msgid "View Group" +msgstr "" + +#: fas/templates/group/view.html:21 msgid "My Status:" msgstr "" -#: fas/templates/group/view.html:22 +#: fas/templates/group/view.html:24 msgid "Not a Member" msgstr "" -#: fas/templates/group/view.html:30 +#: fas/templates/group/view.html:32 msgid "Remove me" msgstr "" -#: fas/templates/group/view.html:32 fas/templates/user/view.html:13 +#: fas/templates/group/view.html:34 fas/templates/user/view.html:17 msgid "(edit)" msgstr "" -#: fas/templates/group/view.html:35 fas/templates/openid/id.html:16 +#: fas/templates/group/view.html:37 fas/templates/openid/id.html:16 msgid "Name:" msgstr "" -#: fas/templates/group/view.html:36 +#: fas/templates/group/view.html:38 msgid "Description:" msgstr "" -#: fas/templates/group/view.html:37 +#: fas/templates/group/view.html:39 msgid "Owner:" msgstr "" -#: fas/templates/group/view.html:38 +#: fas/templates/group/view.html:40 msgid "Type:" msgstr "" -#: fas/templates/group/view.html:40 fas/templates/group/view.html:44 +#: fas/templates/group/view.html:42 fas/templates/group/view.html:46 msgid "Yes" msgstr "" -#: fas/templates/group/view.html:41 fas/templates/group/view.html:45 +#: fas/templates/group/view.html:43 fas/templates/group/view.html:47 msgid "No" msgstr "" -#: fas/templates/group/view.html:48 +#: fas/templates/group/view.html:50 msgid "Prerequisite:" msgstr "" -#: fas/templates/group/view.html:51 +#: fas/templates/group/view.html:53 msgid "Created:" msgstr "" -#: fas/templates/group/view.html:59 +#: fas/templates/group/view.html:55 +msgid "Add User:" +msgstr "" + +#: fas/templates/group/view.html:71 msgid "Members" msgstr "" -#: fas/templates/group/view.html:63 fas/templates/user/list.html:27 +#: fas/templates/group/view.html:75 fas/templates/user/list.html:27 msgid "Username" msgstr "" -#: fas/templates/group/view.html:64 fas/templates/group/view.html:85 +#: fas/templates/group/view.html:76 fas/templates/group/view.html:98 msgid "Sponsor" msgstr "" -#: fas/templates/group/view.html:65 +#: fas/templates/group/view.html:77 msgid "Date Added" msgstr "" -#: fas/templates/group/view.html:66 +#: fas/templates/group/view.html:78 msgid "Date Approved" msgstr "" -#: fas/templates/group/view.html:67 +#: fas/templates/group/view.html:79 msgid "Approval" msgstr "" -#: fas/templates/group/view.html:68 +#: fas/templates/group/view.html:80 msgid "Role Type" msgstr "" -#: fas/templates/group/view.html:69 +#: fas/templates/group/view.html:81 msgid "Action" msgstr "" -#: fas/templates/group/view.html:75 fas/templates/group/view.html:78 -#: fas/templates/user/view.html:57 +#: fas/templates/group/view.html:87 fas/templates/group/view.html:90 +#: fas/templates/user/view.html:68 msgid "None" msgstr "" -#: fas/templates/group/view.html:87 +#: fas/templates/group/view.html:102 msgid "Approve" msgstr "" -#: fas/templates/group/view.html:91 +#: fas/templates/group/view.html:107 msgid "Remove" msgstr "" -#: fas/templates/group/view.html:95 +#: fas/templates/group/view.html:111 msgid "Upgrade" msgstr "" -#: fas/templates/group/view.html:99 +#: fas/templates/group/view.html:115 msgid "Downgrade" msgstr "" @@ -1127,22 +1147,26 @@ msgid "Telephone Number" msgstr "" #: fas/templates/user/edit.html:43 +msgid "Public SSH Key" +msgstr "" + +#: fas/templates/user/edit.html:49 msgid "Postal Address" msgstr "" -#: fas/templates/user/edit.html:48 +#: fas/templates/user/edit.html:54 msgid "Time Zone" msgstr "" -#: fas/templates/user/edit.html:58 +#: fas/templates/user/edit.html:64 msgid "Locale" msgstr "" -#: fas/templates/user/edit.html:69 +#: fas/templates/user/edit.html:75 msgid "Comments" msgstr "" -#: fas/templates/user/edit.html:75 +#: fas/templates/user/edit.html:81 msgid "Cancel" msgstr "" @@ -1158,15 +1182,11 @@ msgstr "" msgid "Account Status" msgstr "" -#: fas/templates/user/list.html:42 fas/templates/user/view.html:30 +#: fas/templates/user/list.html:42 fas/templates/user/view.html:41 msgid "Signed CLA" msgstr "" -#: fas/templates/user/list.html:43 fas/templates/user/view.html:31 -msgid "Click-through CLA" -msgstr "" - -#: fas/templates/user/list.html:44 fas/templates/user/view.html:32 +#: fas/templates/user/list.html:44 fas/templates/user/view.html:43 msgid "Not Done" msgstr "" @@ -1174,7 +1194,8 @@ msgstr "" msgid "Sign up for a Fedora account" msgstr "" -#: fas/templates/user/new.html:21 fas/templates/user/view.html:18 +#: fas/templates/user/new.html:21 fas/templates/user/resetpass.html:14 +#: fas/templates/user/view.html:22 msgid "Email:" msgstr "" @@ -1187,10 +1208,6 @@ msgstr "" msgid "Reset Password" msgstr "" -#: fas/templates/user/resetpass.html:14 -msgid "Primary Email:" -msgstr "" - #: fas/templates/user/resetpass.html:15 msgid "Encrypt/Sign password reset email" msgstr "" @@ -1199,105 +1216,117 @@ msgstr "" msgid "View Account" msgstr "" -#: fas/templates/user/view.html:11 +#: fas/templates/user/view.html:15 msgid "Your Fedora Account" msgstr "" -#: fas/templates/user/view.html:12 +#: fas/templates/user/view.html:16 #, python-format msgid "%s's Fedora Account" msgstr "" -#: fas/templates/user/view.html:13 +#: fas/templates/user/view.html:17 msgid "Account Details" msgstr "" -#: fas/templates/user/view.html:16 +#: fas/templates/user/view.html:20 msgid "Account Name:" msgstr "" -#: fas/templates/user/view.html:17 +#: fas/templates/user/view.html:21 msgid "Real Name:" msgstr "" -#: fas/templates/user/view.html:20 +#: fas/templates/user/view.html:24 msgid "IRC Nick:" msgstr "" -#: fas/templates/user/view.html:21 +#: fas/templates/user/view.html:25 msgid "PGP Key:" msgstr "" -#: fas/templates/user/view.html:22 +#: fas/templates/user/view.html:26 msgid "Telephone Number:" msgstr "" -#: fas/templates/user/view.html:23 +#: fas/templates/user/view.html:27 msgid "Postal Address:" msgstr "" -#: fas/templates/user/view.html:24 -msgid "Comments:" -msgstr "" - -#: fas/templates/user/view.html:25 fas/templates/user/view.html:26 -msgid "Valid" -msgstr "" - -#: fas/templates/user/view.html:26 -msgid "Account Status:" -msgstr "" - -#: fas/templates/user/view.html:29 -msgid "CLA:" -msgstr "" - -#: fas/templates/user/view.html:31 -msgid "GPG Sign it!" +#: fas/templates/user/view.html:28 +msgid "Public SSH Key:" msgstr "" #: fas/templates/user/view.html:32 -msgid "Sign it!" +msgid "Comments:" +msgstr "" + +#: fas/templates/user/view.html:33 +msgid "Valid" +msgstr "" + +#: fas/templates/user/view.html:34 +msgid "Account Status:" +msgstr "" + +#: fas/templates/user/view.html:35 +msgid "Active" msgstr "" #: fas/templates/user/view.html:36 -msgid "Your Roles" +msgid "Vacation" msgstr "" #: fas/templates/user/view.html:37 +msgid "Inactive" +msgstr "" + +#: fas/templates/user/view.html:38 +msgid "Pinged" +msgstr "" + +#: fas/templates/user/view.html:40 +msgid "CLA:" +msgstr "" + +#: fas/templates/user/view.html:43 +msgid "Sign it!" +msgstr "" + +#: fas/templates/user/view.html:47 +msgid "Your Roles" +msgstr "" + +#: fas/templates/user/view.html:48 #, python-format msgid "%s's Roles" msgstr "" -#: fas/templates/user/view.html:54 +#: fas/templates/user/view.html:65 msgid "Status:" msgstr "" -#: fas/templates/user/view.html:59 +#: fas/templates/user/view.html:71 msgid "Tools:" msgstr "" -#: fas/templates/user/view.html:62 -msgid "View Group" -msgstr "" - -#: fas/templates/user/view.html:63 +#: fas/templates/user/view.html:75 msgid "Invite a New Member..." msgstr "" -#: fas/templates/user/view.html:64 +#: fas/templates/user/view.html:76 msgid "Manage Group Membership..." msgstr "" -#: fas/templates/user/view.html:65 +#: fas/templates/user/view.html:77 msgid "Manage Group Details..." msgstr "" -#: fas/templates/user/view.html:69 +#: fas/templates/user/view.html:81 msgid "Queue:" msgstr "" -#: fas/templates/user/view.html:73 +#: fas/templates/user/view.html:85 #, python-format msgid "" "%(user)s requests approval to join " diff --git a/fas/po/test/LC_MESSAGES/fas.po b/fas/po/test/LC_MESSAGES/fas.po deleted file mode 100644 index 6e99422..0000000 --- a/fas/po/test/LC_MESSAGES/fas.po +++ /dev/null @@ -1,1240 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2008 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2008. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2008-03-03 00:46-0500\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.1\n" - -#: client/fasClient.py:42 -msgid "Download and sync most recent content" -msgstr "test" - -#: client/fasClient.py:47 -msgid "Do not sync group information" -msgstr "test" - -#: client/fasClient.py:52 -msgid "Do not sync passwd information" -msgstr "test" - -#: client/fasClient.py:57 -msgid "Do not sync shadow information" -msgstr "test" - -#: client/fasClient.py:62 -#, python-format -msgid "Specify URL of fas server (default \"%default\")" -msgstr "test" - -#: client/fasClient.py:67 -msgid "Enable FAS synced shell accounts" -msgstr "test" - -#: client/fasClient.py:72 -msgid "Disable FAS synced shell accounts" -msgstr "test" - -#: fas/auth.py:87 -msgid "cla_sign_group Does not exist! Please create it!" -msgstr "test" - -#: fas/auth.py:101 -msgid "cla_click_group Does not exist! Please create it!" -msgstr "test" - -#: fas/auth.py:168 fas/auth.py:176 -#, python-format -msgid "%s membership required before application to this group is allowed" -msgstr "test" - -#: fas/cla.py:52 fas/cla.py:178 -msgid "test" -"You have already signed the CLA, so it is unnecessary to complete the " -"Click-through CLA." -msgstr "test" - -#: fas/cla.py:56 fas/cla.py:182 -msgid "You have already completed the Click-through CLA." -msgstr "test" - -#: fas/cla.py:61 fas/cla.py:87 -msgid "You have already signed the CLA." -msgstr "test" - -#: fas/cla.py:100 fas/user.py:380 -msgid "Your key could not be retrieved from subkeys.pgp.net" -msgstr "test" - -#: fas/cla.py:107 -#, python-format -msgid "Your signature could not be verified: '%s'." -msgstr "test" - -#: fas/cla.py:117 -msgid "test" -"Your signature's fingerprint did not match the fingerprint registered in " -"FAS." -msgstr "test" - -#: fas/cla.py:126 -msgid "Your key did not match your email." -msgstr "test" - -#: fas/cla.py:131 -msgid "len(sigs) == 0" -msgstr "test" - -#: fas/cla.py:137 -msgid "The GPG-signed part of the message did not contain a signed CLA." -msgstr "test" - -#: fas/cla.py:142 -msgid "The text \"I agree\" was not found in the CLA." -msgstr "test" - -#: fas/cla.py:156 fas/cla.py:194 -#, python-format -msgid "You could not be added to the '%s' group." -msgstr "test" - -#: fas/cla.py:165 -#, python-format -msgid "You have successfully signed the CLA. You are now in the '%s' group." -msgstr "test" - -#: fas/cla.py:198 -#, python-format -msgid "test" -"You have successfully agreed to the click-through CLA. You are now in " -"the '%s' group." -msgstr "test" - -#: fas/cla.py:202 -msgid "You have not agreed to the click-through CLA." -msgstr "test" - -#: fas/controllers.py:84 -#, python-format -msgid "Welcome, %s" -msgstr "test" - -#: fas/controllers.py:99 -msgid "test" -"The credentials you supplied were not correct or did not grant access to " -"this resource." -msgstr "test" - -#: fas/controllers.py:102 -msgid "You must provide your credentials before accessing this resource." -msgstr "test" - -#: fas/controllers.py:105 -msgid "Please log in." -msgstr "test" - -#: fas/controllers.py:116 -msgid "You have successfully logged out." -msgstr "test" - -#: fas/group.py:21 -#, python-format -msgid "The group '%s' does not exist." -msgstr "test" - -#: fas/group.py:33 -#, python-format -msgid "The group '%s' already exists." -msgstr "test" - -#: fas/group.py:129 fas/group.py:467 -#, python-format -msgid "You cannot view '%s'" -msgstr "test" - -#: fas/group.py:143 fas/group.py:159 -msgid "Only FAS adminstrators can create groups." -msgstr "test" - -#: fas/group.py:177 -#, python-format -msgid "The group: '%s' could not be created." -msgstr "test" - -#: fas/group.py:187 -#, python-format -msgid "test" -"The group: '%(group)s' has been created, but '%(user)s' could not be " -"added as a group administrator." -msgstr "test" - -#: fas/group.py:189 -#, python-format -msgid "The group: '%s' has been created." -msgstr "test" - -#: fas/group.py:204 fas/group.py:219 -#, python-format -msgid "You cannot edit '%s'." -msgstr "test" - -#: fas/group.py:236 -msgid "The group details could not be saved." -msgstr "test" - -#: fas/group.py:238 -msgid "The group details have been saved." -msgstr "test" - -#: fas/group.py:257 -#, python-format -msgid "No Groups found matching '%s'" -msgstr "test" - -#: fas/group.py:283 -#, python-format -msgid "%(user)s has already applied to %(group)s!" -msgstr "test" - -#: fas/group.py:293 -#, python-format -msgid "test" -"\n" -"Fedora user %(user)s, aka %(name)s <%(email)s> has requested\n" -"membership for %(applicant)s (%(applicant_name)s) in the %(group)s group " -"and needs a sponsor.\n" -"\n" -"Please go to %(url)s to take action. \n" -msgstr "test" - -#: fas/group.py:300 -#, python-format -msgid "%(user)s has applied to %(group)s!" -msgstr "test" - -#: fas/group.py:317 -#, python-format -msgid "You cannot sponsor '%s'" -msgstr "test" - -#: fas/group.py:324 -#, python-format -msgid "'%s' could not be sponsored!" -msgstr "test" - -#: fas/group.py:329 -#, python-format -msgid "test" -"\n" -"%(name)s <%(email)s> has sponsored you for membership in the %(group)s\n" -"group of the Fedora account system. If applicable, this change should\n" -"propagate into the e-mail aliases and CVS repository within an hour.\n" -"\n" -"%(joinmsg)s\n" -msgstr "test" - -#: fas/group.py:337 -#, python-format -msgid "'%s' has been sponsored!" -msgstr "test" - -#: fas/group.py:354 -#, python-format -msgid "You cannot remove '%s'." -msgstr "test" - -#: fas/group.py:361 -#, python-format -msgid "%(name)s could not be removed from %(group)s!" -msgstr "test" - -#: fas/group.py:367 -#, python-format -msgid "test" -"\n" -"%(name)s <%(email)s> has removed you from the '%(group)s'\n" -"group of the Fedora Accounts System This change is effective\n" -"immediately for new operations, and should propagate into the e-mail\n" -"aliases within an hour.\n" -msgstr "test" - -#: fas/group.py:374 -#, python-format -msgid "%(name)s has been removed from %(group)s!" -msgstr "test" - -#: fas/group.py:391 -#, python-format -msgid "You cannot upgrade '%s'" -msgstr "test" - -#: fas/group.py:401 -#, python-format -msgid "%(name)s could not be upgraded!" -msgstr "test" - -#: fas/group.py:409 -#, python-format -msgid "test" -"\n" -"%(name)s <%(email)s> has upgraded you to %(status)s status in the\n" -"'%(group)s' group of the Fedora Accounts System This change is\n" -"effective immediately for new operations, and should propagate\n" -"into the e-mail aliases within an hour.\n" -msgstr "test" - -#: fas/group.py:416 -#, python-format -msgid "%s has been upgraded!" -msgstr "test" - -#: fas/group.py:432 -#, python-format -msgid "You cannot downgrade '%s'" -msgstr "test" - -#: fas/group.py:439 -#, python-format -msgid "%(username)s could not be downgraded!" -msgstr "test" - -#: fas/group.py:446 -#, python-format -msgid "test" -"\n" -"%(name)s <%(email)s> has downgraded you to %(status)s status in the\n" -"'%(group)s' group of the Fedora Accounts System This change is\n" -"effective immediately for new operations, and should propagate\n" -"into the e-mail aliases within an hour.\n" -msgstr "test" - -#: fas/group.py:453 -#, python-format -msgid "%s has been downgraded!" -msgstr "test" - -#: fas/group.py:495 -msgid "Come join The Fedora Project!" -msgstr "test" - -#: fas/group.py:496 -#, python-format -msgid "test" -"\n" -"%(name)s <%(email)s> has invited you to join the Fedora\n" -"Project! We are a community of users and developers who produce a\n" -"complete operating system from entirely free and open source software\n" -"(FOSS). %(name)s thinks that you have knowledge and skills\n" -"that make you a great fit for the Fedora community, and that you might\n" -"be interested in contributing.\n" -"\n" -"How could you team up with the Fedora community to use and develop your\n" -"skills? Check out http://fedoraproject.org/join-fedora for some ideas.\n" -"Our community is more than just software developers -- we also have a\n" -"place for you whether you're an artist, a web site builder, a writer, or\n" -"a people person. You'll grow and learn as you work on a team with other\n" -"very smart and talented people.\n" -"\n" -"Fedora and FOSS are changing the world -- come be a part of it!" -msgstr "test" - -#: fas/group.py:513 -#, python-format -msgid "Message sent to: %s" -msgstr "test" - -#: fas/group.py:516 -#, python-format -msgid "You are not in the '%s' group." -msgstr "test" - -#: fas/openid_fas.py:55 -msgid "The OpenID request could not be decoded." -msgstr "test" - -#: fas/safasprovider.py:126 -#, python-format -msgid "Loading: %(visitmod)s" -msgstr "test" - -#: fas/user.py:33 -#, python-format -msgid "'%s' does not exist." -msgstr "test" - -#: fas/user.py:41 -msgid "To prevent email loops, your email address cannot be @fedoraproject.org." -msgstr "test" - -#: fas/user.py:53 -#, python-format -msgid "Error: Could not create - '%s'" -msgstr "test" - -#: fas/user.py:55 -#, python-format -msgid "'%s' already exists." -msgstr "test" - -#: fas/user.py:64 -#, python-format -msgid "'%s' is an illegal username." -msgstr "test" - -#: fas/user.py:196 -#, python-format -msgid "You cannot edit %s" -msgstr "test" - -#: fas/user.py:211 -#, python-format -msgid "You do not have permission to edit '%s'" -msgstr "test" - -#: fas/user.py:226 -#, python-format -msgid "Your account details could not be saved: %s" -msgstr "test" - -#: fas/user.py:228 -msgid "Your account details have been saved." -msgstr "test" - -#: fas/user.py:242 -#, python-format -msgid "No users found matching '%s'" -msgstr "test" - -#: fas/user.py:248 -msgid "No need to sign up, you have an account!" -msgstr "test" - -#: fas/user.py:269 -msgid "Welcome to the Fedora Project!" -msgstr "test" - -#: fas/user.py:270 -#, python-format -msgid "test" -"\n" -"You have created a new Fedora account!\n" -"Your new password is: %s\n" -"\n" -"Please go to https://admin.fedoraproject.org/fas/ to change it.\n" -"\n" -"Welcome to the Fedora Project. Now that you've signed up for an\n" -"account you're probably desperate to start contributing, and with that\n" -"in mind we hope this e-mail might guide you in the right direction to\n" -"make this process as easy as possible.\n" -"\n" -"Fedora is an exciting project with lots going on, and you can\n" -"contribute in a huge number of ways, using all sorts of different\n" -"skill sets. To find out about the different ways you can contribute to\n" -"Fedora, you can visit our join page which provides more information\n" -"about all the different roles we have available.\n" -"\n" -"http://fedoraproject.org/en/join-fedora\n" -"\n" -"If you already know how you want to contribute to Fedora, and have\n" -"found the group already working in the area you're interested in, then\n" -"there are a few more steps for you to get going.\n" -"\n" -"Foremost amongst these is to sign up for the team or project's mailing\n" -"list that you're interested in - and if you're interested in more than\n" -"one group's work, feel free to sign up for as many mailing lists as\n" -"you like! This is because mailing lists are where the majority of work\n" -"gets organised and tasks assigned, so to stay in the loop be sure to\n" -"keep up with the messages.\n" -"\n" -"Once this is done, it's probably wise to send a short introduction to\n" -"the list letting them know what experience you have and how you'd like\n" -"to help. From here, existing members of the team will help you to find\n" -"your feet as a Fedora contributor.\n" -"\n" -"And finally, from all of us here at the Fedora Project, we're looking\n" -"forward to working with you!\n" -msgstr "test" - -#: fas/user.py:310 -msgid "test" -"Your password has been emailed to you. Please log in with it and change " -"your password" -msgstr "test" - -#: fas/user.py:313 -#, python-format -msgid "The username '%s' already Exists. Please choose a different username." -msgstr "test" - -#: fas/user.py:338 -msgid "Your password has been changed." -msgstr "test" - -#: fas/user.py:341 -msgid "Your password could not be changed." -msgstr "test" - -#: fas/user.py:347 -msgid "You are already logged in!" -msgstr "test" - -#: fas/user.py:356 -msgid "You are already logged in." -msgstr "test" - -#: fas/user.py:362 -msgid "username + email combo unknown." -msgstr "test" - -#: fas/user.py:365 -msgid "Fedora Project Password Reset" -msgstr "test" - -#: fas/user.py:366 -#, python-format -msgid "test" -"\n" -"You have requested a password reset!\n" -"Your new password is: %s\n" -"\n" -"Please go to https://admin.fedoraproject.org/fas/ to change it.\n" -msgstr "test" - -#: fas/user.py:399 -msgid "test" -"Your password reset email could not be encrypted. Your password has not " -"been changed." -msgstr "test" - -#: fas/user.py:406 -msgid "Your new password has been emailed to you." -msgstr "test" - -#: fas/user.py:408 -msgid "Your password could not be reset." -msgstr "test" - -#: fas/templates/error.html:7 fas/templates/home.html:7 -#: fas/templates/cla/click.html:7 fas/templates/cla/index.html:7 -#: fas/templates/cla/view.html:7 fas/templates/openid/about.html:7 -#: fas/templates/openid/id.html:7 fas/templates/openid/trusted.html:7 -msgid "Fedora Accounts System" -msgstr "test" - -#: fas/templates/error.html:17 -msgid "Error!" -msgstr "test" - -#: fas/templates/error.html:18 -msgid "The following error(s) have occured with your request:" -msgstr "test" - -#: fas/templates/login.html:7 -msgid "Login to the Fedora Accounts System" -msgstr "test" - -#: fas/templates/login.html:17 fas/templates/login.html:23 -msgid "Login" -msgstr "test" - -#: fas/templates/login.html:20 -msgid "User Name:" -msgstr "test" - -#: fas/templates/login.html:21 fas/templates/user/view.html:25 -msgid "Password:" -msgstr "test" - -#: fas/templates/login.html:29 -msgid "Forgot Password?" -msgstr "test" - -#: fas/templates/login.html:30 -msgid "Sign Up" -msgstr "test" - -#: fas/templates/master.html:22 -msgid "Fedora" -msgstr "test" - -#: fas/templates/master.html:25 -msgid "Search:" -msgstr "test" - -#: fas/templates/master.html:27 fas/templates/group/list.html:25 -msgid "Search" -msgstr "test" - -#: fas/templates/master.html:33 -msgid "Learn about Fedora" -msgstr "test" - -#: fas/templates/master.html:34 -msgid "Download Fedora" -msgstr "test" - -#: fas/templates/master.html:35 -msgid "Projects" -msgstr "test" - -#: fas/templates/master.html:36 -msgid "Join Fedora" -msgstr "test" - -#: fas/templates/master.html:37 -msgid "Communicate" -msgstr "test" - -#: fas/templates/master.html:38 -msgid "Help/Documentation" -msgstr "test" - -#: fas/templates/master.html:44 -msgid "Logged in:" -msgstr "test" - -#: fas/templates/master.html:49 -msgid "My Account" -msgstr "test" - -#: fas/templates/master.html:50 fas/templates/master.html:87 -msgid "Log Out" -msgstr "test" - -#: fas/templates/master.html:51 fas/templates/welcome.html:21 -msgid "Log In" -msgstr "test" - -#: fas/templates/master.html:58 -msgid "Group List" -msgstr "test" - -#: fas/templates/master.html:61 -msgid "User List" -msgstr "test" - -#: fas/templates/master.html:62 -msgid "New Group" -msgstr "test" - -#: fas/templates/master.html:64 -msgid "Apply For a new Group" -msgstr "test" - -#: fas/templates/master.html:65 -msgid "News" -msgstr "test" - -#: fas/templates/master.html:69 -msgid "Locale:" -msgstr "test" - -#: fas/templates/master.html:71 -msgid "OK" -msgstr "test" - -#: fas/templates/master.html:83 -msgid "About" -msgstr "test" - -#: fas/templates/master.html:84 -msgid "Contact Us" -msgstr "test" - -#: fas/templates/master.html:85 -msgid "Legal & Privacy" -msgstr "test" - -#: fas/templates/master.html:90 -msgid "test" -"Copyright © 2007 Red Hat, Inc. and others. All Rights Reserved. Please " -"send any comments or corrections to the websites team." -msgstr "test" - -#: fas/templates/master.html:93 -msgid "test" -"The Fedora Project is maintained and driven by the community and " -"sponsored by Red Hat. This is a community maintained site. Red Hat is " -"not responsible for content." -msgstr "test" - -#: fas/templates/welcome.html:7 -msgid "Welcome to FAS2" -msgstr "test" - -#: fas/templates/welcome.html:18 -msgid "test" -"Welcome to the Fedora Accounts System 2. This system is not yet live so " -"feel free to play around. Just don't expect it to work." -msgstr "test" - -#: fas/templates/welcome.html:22 -msgid "New Account" -msgstr "test" - -#: fas/templates/welcome.html:23 -msgid "Why Join?" -msgstr "test" - -#: fas/templates/cla/click.html:11 fas/templates/cla/view.html:11 -msgid "Contributor License Agreement" -msgstr "test" - -#: fas/templates/cla/click.html:15 fas/templates/cla/view.html:20 -#, python-format -msgid "If you agree to these terms and conditions, type \"%s\" here:" -msgstr "test" - -#: fas/templates/cla/click.html:16 fas/templates/cla/view.html:21 -#: fas/templates/user/new.html:17 -msgid "Full Name:" -msgstr "test" - -#: fas/templates/cla/click.html:17 fas/templates/cla/view.html:22 -msgid "E-mail:" -msgstr "test" - -#: fas/templates/cla/click.html:18 fas/templates/cla/view.html:23 -msgid "Date:" -msgstr "test" - -#: fas/templates/cla/click.html:19 fas/templates/cla/view.html:24 -#: fas/templates/cla/view.html:38 -msgid "Submit CLA" -msgstr "test" - -#: fas/templates/cla/index.html:10 -msgid "Fedora Contributor License Agreement" -msgstr "test" - -#: fas/templates/cla/index.html:12 -msgid "test" -"There are two ways to sign the CLA. Most users will want to do a signed " -"CLA as it will promote them to a full contributor in Fedora. The click-" -"through CLA only grants partial access but may be preferred for those " -"with special legal considerations. See: CLA" -" Acceptance Hierarchies for more information." -msgstr "test" - -#: fas/templates/cla/index.html:15 fas/templates/user/list.html:42 -#: fas/templates/user/view.html:30 -msgid "Signed CLA" -msgstr "test" - -#: fas/templates/cla/index.html:16 fas/templates/user/list.html:43 -#: fas/templates/user/view.html:31 -msgid "Click-through CLA" -msgstr "test" - -#: fas/templates/cla/index.html:19 -#, python-format -msgid "You have already sucessfully signed the CLA." -msgstr "test" - -#: fas/templates/cla/view.html:30 -#, python-format -msgid "test" -"Use the below link to download/save the CLA as fedora-" -"icla-%(username)s.txt, and run:
gpg -as fedora-"
-"icla-%(username)s.txt
After, upload fedora-" -"icla-%(username)s.txt.asc in the form below." -msgstr "test" - -#: fas/templates/cla/view.html:33 -msgid "Download the CLA text file here!" -msgstr "test" - -#: fas/templates/cla/view.html:37 -msgid "Signed CLA:" -msgstr "test" - -#: fas/templates/group/edit.html:7 fas/templates/group/view.html:7 -msgid "Edit Group" -msgstr "test" - -#: fas/templates/group/edit.html:10 -#, python-format -msgid "Edit Group: %s" -msgstr "test" - -#: fas/templates/group/edit.html:13 fas/templates/group/new.html:17 -msgid "Display Name:" -msgstr "test" - -#: fas/templates/group/edit.html:17 fas/templates/group/new.html:25 -msgid "Group Type:" -msgstr "test" - -#: fas/templates/group/edit.html:21 fas/templates/group/new.html:21 -msgid "Group Owner:" -msgstr "test" - -#: fas/templates/group/edit.html:25 fas/templates/group/new.html:29 -#: fas/templates/group/view.html:38 -msgid "Needs Sponsor:" -msgstr "test" - -#: fas/templates/group/edit.html:30 fas/templates/group/new.html:33 -#: fas/templates/group/view.html:42 -msgid "Self Removal:" -msgstr "test" - -#: fas/templates/group/edit.html:35 -msgid "Group Prerequisite:" -msgstr "test" - -#: fas/templates/group/edit.html:40 -msgid "Group Join Message:" -msgstr "test" - -#: fas/templates/group/edit.html:44 fas/templates/user/edit.html:73 -msgid "Save!" -msgstr "test" - -#: fas/templates/group/invite.html:7 fas/templates/group/invite.html:10 -msgid "Invite a new community member!" -msgstr "test" - -#: fas/templates/group/invite.html:14 -msgid "To email:" -msgstr "test" - -#: fas/templates/group/invite.html:15 -msgid "From:" -msgstr "test" - -#: fas/templates/group/invite.html:16 -msgid "Subject:" -msgstr "test" - -#: fas/templates/group/invite.html:17 -msgid "Message:" -msgstr "test" - -#: fas/templates/group/invite.html:39 -msgid "Send!" -msgstr "test" - -#: fas/templates/group/list.html:7 -msgid "Groups List" -msgstr "test" - -#: fas/templates/group/list.html:19 fas/templates/user/list.html:11 -#, python-format -msgid "List (%s)" -msgstr "test" - -#: fas/templates/group/list.html:20 -msgid "Search Groups" -msgstr "test" - -#: fas/templates/group/list.html:22 -msgid "\"*\" is a wildcard (Ex: \"cvs*\")" -msgstr "test" - -#: fas/templates/group/list.html:28 fas/templates/user/list.html:19 -msgid "Results" -msgstr "test" - -#: fas/templates/group/list.html:31 fas/templates/user/list.html:22 -msgid "All" -msgstr "test" - -#: fas/templates/group/list.html:36 -msgid "Group" -msgstr "test" - -#: fas/templates/group/list.html:36 -msgid "Description" -msgstr "test" - -#: fas/templates/group/list.html:36 -msgid "Status" -msgstr "test" - -#: fas/templates/group/list.html:44 fas/templates/group/view.html:20 -#: fas/templates/user/view.html:56 -msgid "Approved" -msgstr "test" - -#: fas/templates/group/list.html:45 fas/templates/group/view.html:21 -#: fas/templates/user/view.html:57 -msgid "Unapproved" -msgstr "test" - -#: fas/templates/group/list.html:47 -msgid "Apply" -msgstr "test" - -#: fas/templates/group/new.html:7 fas/templates/group/new.html:10 -msgid "Create a new FAS Group" -msgstr "test" - -#: fas/templates/group/new.html:13 -msgid "Group Name:" -msgstr "test" - -#: fas/templates/group/new.html:37 -msgid "Must Belong To:" -msgstr "test" - -#: fas/templates/group/new.html:41 fas/templates/group/view.html:46 -msgid "Join Message:" -msgstr "test" - -#: fas/templates/group/new.html:45 -msgid "Create!" -msgstr "test" - -#: fas/templates/group/view.html:19 -msgid "My Status:" -msgstr "test" - -#: fas/templates/group/view.html:22 -msgid "Not a Member" -msgstr "test" - -#: fas/templates/group/view.html:30 -msgid "Remove me" -msgstr "test" - -#: fas/templates/group/view.html:31 fas/templates/user/view.html:13 -msgid "(edit)" -msgstr "test" - -#: fas/templates/group/view.html:34 fas/templates/openid/id.html:16 -msgid "Name:" -msgstr "test" - -#: fas/templates/group/view.html:35 -msgid "Description:" -msgstr "test" - -#: fas/templates/group/view.html:36 -msgid "Owner:" -msgstr "test" - -#: fas/templates/group/view.html:37 -msgid "Type:" -msgstr "test" - -#: fas/templates/group/view.html:39 fas/templates/group/view.html:43 -msgid "Yes" -msgstr "test" - -#: fas/templates/group/view.html:40 fas/templates/group/view.html:44 -msgid "No" -msgstr "test" - -#: fas/templates/group/view.html:47 -msgid "Prerequisite:" -msgstr "test" - -#: fas/templates/group/view.html:50 -msgid "Created:" -msgstr "test" - -#: fas/templates/group/view.html:58 -msgid "Members" -msgstr "test" - -#: fas/templates/group/view.html:62 fas/templates/user/list.html:27 -msgid "Username" -msgstr "test" - -#: fas/templates/group/view.html:63 fas/templates/group/view.html:83 -msgid "Sponsor" -msgstr "test" - -#: fas/templates/group/view.html:64 -msgid "Date Added" -msgstr "test" - -#: fas/templates/group/view.html:65 -msgid "Date Approved" -msgstr "test" - -#: fas/templates/group/view.html:66 -msgid "Approval" -msgstr "test" - -#: fas/templates/group/view.html:67 -msgid "Role Type" -msgstr "test" - -#: fas/templates/group/view.html:68 -msgid "Action" -msgstr "test" - -#: fas/templates/group/view.html:74 -msgid "None" -msgstr "test" - -#: fas/templates/group/view.html:84 -msgid "Approve" -msgstr "test" - -#: fas/templates/group/view.html:87 -msgid "Remove" -msgstr "test" - -#: fas/templates/group/view.html:90 -msgid "Upgrade" -msgstr "test" - -#: fas/templates/group/view.html:93 -msgid "Downgrade" -msgstr "test" - -#: fas/templates/openid/about.html:10 fas/templates/openid/trusted.html:10 -msgid "Fedora Project OpenID Provider" -msgstr "test" - -#: fas/templates/openid/id.html:11 -#, python-format -msgid "User %s" -msgstr "test" - -#: fas/templates/openid/id.html:14 fas/templates/user/new.html:13 -#: fas/templates/user/resetpass.html:13 -msgid "Username:" -msgstr "test" - -#: fas/templates/openid/trusted.html:15 -#, python-format -msgid "Allow %s to authenticate to your OpenID identity?" -msgstr "test" - -#: fas/templates/openid/trusted.html:16 -msgid "Submit" -msgstr "test" - -#: fas/templates/user/changepass.html:7 fas/templates/user/changepass.html:10 -#: fas/templates/user/changepass.html:16 -msgid "Change Password" -msgstr "test" - -#: fas/templates/user/changepass.html:13 -msgid "Current Password:" -msgstr "test" - -#: fas/templates/user/changepass.html:14 -msgid "New Password:" -msgstr "test" - -#: fas/templates/user/changepass.html:15 -msgid "Confirm Password:" -msgstr "test" - -#: fas/templates/user/edit.html:7 -msgid "Edit Account" -msgstr "test" - -#: fas/templates/user/edit.html:10 -#, python-format -msgid "Edit Account (%s)" -msgstr "test" - -#: fas/templates/user/edit.html:13 -msgid "Human Name" -msgstr "test" - -#: fas/templates/user/edit.html:19 -msgid "Email" -msgstr "test" - -#: fas/templates/user/edit.html:28 -msgid "IRC Nick" -msgstr "test" - -#: fas/templates/user/edit.html:33 -msgid "PGP Key" -msgstr "test" - -#: fas/templates/user/edit.html:38 -msgid "Telephone Number" -msgstr "test" - -#: fas/templates/user/edit.html:43 -msgid "Postal Address" -msgstr "test" - -#: fas/templates/user/edit.html:48 -msgid "Time Zone" -msgstr "test" - -#: fas/templates/user/edit.html:58 -msgid "Locale" -msgstr "test" - -#: fas/templates/user/edit.html:68 -msgid "Comments" -msgstr "test" - -#: fas/templates/user/edit.html:74 -msgid "Cancel" -msgstr "test" - -#: fas/templates/user/list.html:7 -msgid "Users List" -msgstr "test" - -#: fas/templates/user/list.html:13 -msgid "\"*\" is a wildcard (Ex: \"ric*\")" -msgstr "test" - -#: fas/templates/user/list.html:28 -msgid "Account Status" -msgstr "test" - -#: fas/templates/user/list.html:44 fas/templates/user/view.html:32 -msgid "Not Done" -msgstr "test" - -#: fas/templates/user/new.html:7 fas/templates/user/new.html:10 -msgid "Sign up for a Fedora account" -msgstr "test" - -#: fas/templates/user/new.html:21 fas/templates/user/view.html:18 -msgid "Email:" -msgstr "test" - -#: fas/templates/user/new.html:31 fas/templates/user/view.html:22 -msgid "Telephone Number:" -msgstr "test" - -#: fas/templates/user/new.html:35 fas/templates/user/view.html:23 -msgid "Postal Address:" -msgstr "test" - -#: fas/templates/user/new.html:39 -msgid "Sign up!" -msgstr "test" - -#: fas/templates/user/resetpass.html:7 fas/templates/user/resetpass.html:10 -#: fas/templates/user/resetpass.html:16 -msgid "Reset Password" -msgstr "test" - -#: fas/templates/user/resetpass.html:14 -msgid "Primary Email:" -msgstr "test" - -#: fas/templates/user/resetpass.html:15 -msgid "Encrypt/Sign password reset email" -msgstr "test" - -#: fas/templates/user/view.html:7 -msgid "View Account" -msgstr "test" - -#: fas/templates/user/view.html:11 -msgid "Your Fedora Account" -msgstr "test" - -#: fas/templates/user/view.html:12 -#, python-format -msgid "%s's Fedora Account" -msgstr "test" - -#: fas/templates/user/view.html:13 -msgid "Account Details" -msgstr "test" - -#: fas/templates/user/view.html:16 -msgid "Account Name:" -msgstr "test" - -#: fas/templates/user/view.html:17 -msgid "Real Name:" -msgstr "test" - -#: fas/templates/user/view.html:20 -msgid "IRC Nick:" -msgstr "test" - -#: fas/templates/user/view.html:21 -msgid "PGP Key:" -msgstr "test" - -#: fas/templates/user/view.html:24 -msgid "Comments:" -msgstr "test" - -#: fas/templates/user/view.html:25 fas/templates/user/view.html:26 -msgid "Valid" -msgstr "test" - -#: fas/templates/user/view.html:26 -msgid "Account Status:" -msgstr "test" - -#: fas/templates/user/view.html:29 -msgid "CLA:" -msgstr "test" - -#: fas/templates/user/view.html:31 -msgid "GPG Sign it!" -msgstr "test" - -#: fas/templates/user/view.html:32 -msgid "Sign it!" -msgstr "test" - -#: fas/templates/user/view.html:36 -msgid "Your Roles" -msgstr "test" - -#: fas/templates/user/view.html:37 -#, python-format -msgid "%s's Roles" -msgstr "test" - -#: fas/templates/user/view.html:54 -msgid "Status:" -msgstr "test" - -#: fas/templates/user/view.html:59 -msgid "Tools:" -msgstr "test" - -#: fas/templates/user/view.html:62 -msgid "View Group" -msgstr "test" - -#: fas/templates/user/view.html:63 -msgid "Invite a New Member..." -msgstr "test" - -#: fas/templates/user/view.html:64 -msgid "Manage Group Membership..." -msgstr "test" - -#: fas/templates/user/view.html:65 -msgid "Manage Group Details..." -msgstr "test" - -#: fas/templates/user/view.html:69 -msgid "Queue:" -msgstr "test" - -#: fas/templates/user/view.html:73 -#, python-format -msgid "test" -"%(user)s requests approval to join " -"%(group)s." -msgstr "test" -