locale,templates: dispatch templates and locale files to sub applications

Now to update translations you must explicitely exclude sub-applications
like that:

	../authentic2-ctl makemessages -a -i idp -i saml -i attribute_aggregator -i authsaml2 -i auth2_auth -i disco_service -i auth2_user
This commit is contained in:
Benjamin Dauvergne 2013-07-23 15:32:26 +02:00
parent b8ff8baee9
commit 9c5bcffa71
42 changed files with 3217 additions and 2852 deletions

File diff suppressed because it is too large Load Diff

View File

@ -67,6 +67,10 @@ class AttributeSource(models.Model):
pass
return None
class Meta:
verbose_name = _('attribute source')
verbose_name_plural = _('attribute sources')
def get_source_from_name(name):
try:
@ -112,19 +116,23 @@ if ldap:
super(LdapSource, self).__init__(*args, **kwargs)
self.namespace = "X500"
class Meta:
verbose_name = _('ldap attribute source')
verbose_name_plural = _('ldap attribute sources')
class UserAliasInSource(models.Model):
name = models.CharField(
verbose_name = _("Name"),
max_length = 200)
source = models.ForeignKey(AttributeSource,
verbose_name = _('Attribute Source'))
verbose_name = _('attribute source'))
user = models.ForeignKey(settings.AUTH_USER_MODEL,
verbose_name = _("User"),
verbose_name = _("user"),
related_name='user_alias_in_source')
class Meta:
verbose_name = _('alias in source')
verbose_name_plural = _('aliases in source')
verbose_name = _('user alias from source')
verbose_name_plural = _('user aliases from source')
unique_together = ("name", "source")
def __unicode__(self):
@ -133,7 +141,6 @@ class UserAliasInSource(models.Model):
class AttributeData:
def __init__(self, definition, values=None, source=None,
expiration_date=None):
'''
@ -558,3 +565,8 @@ class UserAttributeProfile(models.Model):
for d in self.get_all_data():
s = s + "\n\t" + d.__unicode__()
return s
class Meta:
verbose_name = _('user attribute profile')
verbose_name_plural = _('user attribute profiles')

View File

@ -0,0 +1,120 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 17:44+0200\n"
"PO-Revision-Date: 2013-07-23 17:42+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: frontend.py:22
msgid ""
"Please enter a correct username and one-time password. Note that both fields "
"are case-sensitive."
msgstr ""
"Veuillez taper un nom d'utilisateur correct et un mot de passe à usage "
"unique. Notez que les deux champs sont sensibles à la casse."
#: frontend.py:24
msgid "This account is inactive."
msgstr "Ce compte est inactif."
#: frontend.py:29
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in."
msgstr ""
"Il semblerait que votre navigateur ne supporte pas les cookies. Les cookies "
"sont requis pour se connecter."
#: frontend.py:39
msgid "One time password"
msgstr "Mot de passe à usage unique"
#: templates/auth/login_form_oath.html:5
msgid ""
"\n"
"Once you have created your account, log in with an other authentication "
"method.\n"
"Then, in account management, follow the instructions to deploy the\n"
"One Time password authentication method.\n"
msgstr ""
"\n"
"Une fois votre compte créé, connectez-vous à l'aide d'une autre méthode.\n"
"Alors, dans l'interface de gestion de votre compte, suivez les instructions "
"pour déployer la\n"
"méthode d'authentification basée sur le mot de passe à usage unique.\n"
#: templates/auth/login_form_oath.html:16
msgid "Log in"
msgstr "S'identifier"
#: templates/auth/login_form_oath.html:18
msgid "Cancel"
msgstr "Annuler"
#: templates/auth/login_form_oath.html:24
msgid "Forgot password?"
msgstr "Mot de passe oublié ?"
#: templates/auth/login_form_oath.html:24
msgid "Reset it!"
msgstr "Le réinitialiser !"
#: templates/auth/login_form_oath.html:25
msgid "Not a member?"
msgstr "Pas un membre ?"
#: templates/auth/login_form_oath.html:25
msgid "Register!"
msgstr "S'inscrire !"
#: templates/oath/totp_profile.html:5
msgid "Time based one-time password"
msgstr "Mot de passe à usage unique basé sur le temps"
#: templates/oath/totp_profile.html:8
msgid "Secret"
msgstr "Secret"
#: templates/oath/totp_profile.html:10
msgid "Google authenticator"
msgstr "Google authenticator"
#: templates/oath/totp_profile.html:12
msgid "Bookmarklet"
msgstr "Marque-page générateur de mot de passe"
#: templates/oath/totp_profile.html:13
msgid ""
"Copy this link to your bookmarks. When clicking on it it will generate a new "
"one-time password which will allow you to login"
msgstr ""
"Copier ce lien dans vos marque-pages. Cliquez le pour générer un nouveau mot "
"de passe à usage unique pour vous connecter."
#: templates/oath/totp_profile.html:16
msgid "Delete this credential"
msgstr "Supprimer ce moyen d'authentification"
#: templates/oath/totp_profile.html:19
msgid ""
"This kind of authentication is actually not possible, because you do not "
"have any secret setup."
msgstr ""
"Ce moyen d'authentification n'est pas disponible actuellement car vous "
"n'avez pas encore généré de secret."
#: templates/oath/totp_profile.html:23
msgid "Generate a new credential"
msgstr "Générer un nouveau secret"

View File

@ -0,0 +1,204 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 16:57+0200\n"
"PO-Revision-Date: 2013-07-23 16:57+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: templates/auth/login_form_openid.html:13
#: templates/authopenid/associate.html:44
#: templates/authopenid/signin-iframe.html:39
#: templates/authopenid/signin.html:45
msgid "Please select your account provider:"
msgstr "Si vous avez un compte sur un de ces sites, connectez-vous avec:"
#: templates/auth/login_form_openid.html:16
msgid "Log in"
msgstr "S'identifier"
#: templates/auth/login_form_openid.html:18
#: templates/authopenid/signin-iframe.html:43
#: templates/authopenid/signin.html:49
msgid "Or enter your OpenID identity:"
msgstr "Ou entrez une identité OpenIDL (URL):"
#: templates/auth/login_form_openid.html:19
#: templates/authopenid/associate.html:48
#: templates/authopenid/signin-iframe.html:44
#: templates/authopenid/signin.html:50
msgid "OpenId URL :"
msgstr "URL OpenID:"
#: templates/auth/login_form_openid.html:22
#: templates/authopenid/dissociate.html:33
msgid "Cancel"
msgstr "Annuler"
#: templates/auth/openid_profile.html:6
msgid "Associate your account with an OpenID"
msgstr "Associer votre compte avec un OpenID"
#: templates/authopenid/associate.html:5
msgid "Associate OpenID"
msgstr "Lier un identifiant OpenID"
#: templates/authopenid/associate.html:20
msgid "OpenID URL:"
msgstr "URL OpenID:"
#: templates/authopenid/associate.html:25
#: templates/authopenid/dissociate.html:26
msgid "Dissociate OpenID URL"
msgstr "Délier un identifiant OpenID"
#: templates/authopenid/associate.html:38
msgid "Add a new OpenID account"
msgstr "Ajouter une nouveau compte OpenID"
#: templates/authopenid/associate.html:49
msgid "Add OpenID"
msgstr ""
#: templates/authopenid/associate_email.txt:1
msgid "Thank you to join"
msgstr ""
#: templates/authopenid/associate_email_subject.txt:1
msgid "Welcome to"
msgstr ""
#: templates/authopenid/complete.html:18
msgid "Your OpenID is verified! "
msgstr "Votre identifiant OpenID a été vérifié."
#: templates/authopenid/complete.html:19
msgid ""
"\n"
"\t<p>Your OpenID can now be associated with a new or existing membership. "
"You can change the association later in your preferences.</p>\n"
"\t"
msgstr ""
"\n"
"\t<p>Votre OpenID peut desormais etre associe a un compte nouveau ou "
"existant. Vous pourrez modifier cette association dans vos preferences.</p>\n"
"\t"
#: templates/authopenid/complete.html:22
msgid "Associate your OpenID"
msgstr "Associez votre OpenID"
#: templates/authopenid/complete.html:23
msgid ""
"\n"
"\t<p>If you're joining <strong>Sitename</strong>, associate your OpenID with "
"a new account. If you're already a member, associate with your existing "
"account.</p>\n"
"\t"
msgstr ""
#: templates/authopenid/complete.html:30 templates/authopenid/complete.html:40
#: templates/authopenid/signin-iframe.html:16
#: templates/authopenid/signin.html:22
msgid "Please correct errors below:"
msgstr "Veuillez corriger les erreurs suivantes :"
#: templates/authopenid/complete.html:55
msgid "A new account"
msgstr "Un nouveau compte"
#: templates/authopenid/complete.html:56 templates/authopenid/complete.html:72
msgid "Username"
msgstr "Identifiant"
#: templates/authopenid/complete.html:57
msgid "Email"
msgstr "Courriel"
#: templates/authopenid/complete.html:58
msgid "Create account"
msgstr "Créer un compte"
#: templates/authopenid/complete.html:71
msgid "An existing account"
msgstr "Un compte existant"
#: templates/authopenid/complete.html:73
msgid "Password"
msgstr "Mot de passe"
#: templates/authopenid/complete.html:74
msgid "Verify"
msgstr "Verifier"
#: templates/authopenid/dissociate.html:32
msgid "Dissociate OpenID"
msgstr "Dissocier vot OpenID"
#: templates/authopenid/password_change_form.html:6
#: templates/authopenid/password_change_form.html:25
msgid "Set password"
msgstr "Change le mot de passe"
#: templates/authopenid/password_change_form.html:8
msgid "Change password"
msgstr "Modifier votre mot de passe"
#: templates/authopenid/password_change_form.html:26
msgid ""
"Please enter your new password twice so we can verify you typed it in "
"correctly."
msgstr ""
#: templates/authopenid/password_change_form.html:31
#: templates/authopenid/password_change_form.html:47
msgid "New password:"
msgstr "Nouveau mot de passe :"
#: templates/authopenid/password_change_form.html:33
#: templates/authopenid/password_change_form.html:49
msgid "Confirm password:"
msgstr "Confirmation du mot de passe :"
#: templates/authopenid/password_change_form.html:34
#: templates/authopenid/password_change_form.html:51
msgid "Change my password"
msgstr "Modifier son mot de passe"
#: templates/authopenid/password_change_form.html:39
msgid "Password change"
msgstr "Changer de mot de passe"
#: templates/authopenid/password_change_form.html:40
msgid ""
"Please enter your old password, for security's sake, and then enter your new "
"password twice so we can verify you typed it in correctly."
msgstr ""
"Veuillez entre votre ancien mot de passe, par raison de sécurité, et entrez "
"ensuite votre nouveau mot de passe deux fois pour s'assurer que vous l'avez "
"tapé correctement."
#: templates/authopenid/password_change_form.html:45
msgid "Old password:"
msgstr "Ancien mot de passe :"
#: templates/authopenid/signin-iframe.html:5
#: templates/authopenid/signin.html:5
msgid "OpenID Signin"
msgstr "Connexion OpenID"
#: templates/authopenid/signin-iframe.html:45
#: templates/authopenid/signin.html:51
msgid "Sign in with OpenID"
msgstr "Connectez vous avec OpenID"

View File

@ -0,0 +1,110 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 17:40+0200\n"
"PO-Revision-Date: 2013-07-23 17:41+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: forms.py:32
msgid "username"
msgstr "Identifiant"
#: forms.py:35
msgid "email address"
msgstr "Adresse email"
#: forms.py:53
msgid "This username is already taken. Please choose another."
msgstr "Ce nom d'utilisateur est déja utilisé. Choisissez-en un autre."
#: frontend.py:18
msgid "SSL with certificates"
msgstr "Certificats SSL"
#: login_ssl.py:46
msgid ""
"SSL Client Authentication failed. No client certificate found."
msgstr "Echec de l'authentification cliente SSL. Aucun certificat trouvé."
#: login_ssl.py:53
msgid ""
"SSL Client Authentication failed. Your client certificate is not "
"valid."
msgstr ""
"Echec de l'authentification cliente SSL. Votre certificat n'est pas valide."
#: login_ssl.py:73 login_ssl.py:90 login_ssl.py:103 login_ssl.py:157
msgid "SSL Client Authentication failed. Internal server error."
msgstr "Echec de l'authentification SSL. Erreur interne du serveur."
#: login_ssl.py:221
msgid "No certificate name provided for deletion."
msgstr "Aucun nom de certificat fourni pour la suppression."
#: login_ssl.py:237
msgid "Successful certificate deletion."
msgstr "Succès de la suppression du certificat."
#: login_ssl.py:246
msgid "Certificate deletion failed."
msgstr "Échec de suppression du certificat"
#: templates/auth/account_linking_ssl.html:5
#: templates/auth/account_linking_ssl.html:9
msgid "Log in to link your certificate with an existing account"
msgstr "connectez-vous pour lier votre certificat avec un compte existant"
#: templates/auth/account_linking_ssl.html:18
#: templates/auth/account_linking_ssl.html:25
msgid "Username:"
msgstr "Nom d'utilisateur :"
#: templates/auth/account_linking_ssl.html:21
#: templates/auth/account_linking_ssl.html:29
msgid "Password:"
msgstr "Mot de passe :"
#: templates/auth/account_linking_ssl.html:34
msgid "Create me a new account"
msgstr "Me créer un nouveau compte"
#: templates/auth/account_linking_ssl.html:38
#: templates/auth/login_form_ssl.html:9
msgid "Log in"
msgstr "S'identifier"
#: templates/auth/login_form_ssl.html:4
msgid "Use a self-generated X509 certificate to log in."
msgstr "Utilisez un certificat x509 auto-généré pour vous connecter."
#: templates/auth/login_form_ssl.html:11
msgid "Cancel"
msgstr "Annuler"
#: templates/ssl/profile.html:2
msgid "SSL Certificates"
msgstr "Certificats SSL"
#: templates/ssl/profile.html:11
msgid "Delete"
msgstr "Supprimer"
#: templates/ssl/profile.html:17
msgid "Add a certificate?"
msgstr "Ajouter un certificat ?"
#: templates/ssl/profile.html:19
msgid "Add"
msgstr "Ajouter"

View File

@ -0,0 +1,67 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 18:01+0200\n"
"PO-Revision-Date: 2013-07-23 18:01+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: backend.py:17 templates/auth/login_password_profile.html:2
msgid "Password"
msgstr "Mot de passe"
#: models.py:23
#, python-format
msgid "Authentication of %(who)s by %(how)s at %(when)s"
msgstr "Authentification de %(who)s par la méthode %(how)s à %(when)s"
#: templates/error_ssl.html:4
msgid "Error: authentication failure"
msgstr "Erreur: Echec de l'authentification"
#: templates/error_ssl.html:8
msgid "Authentication failure"
msgstr "Échec d'authentification"
#: templates/error_ssl.html:10
msgid "The SSL authentication has failed"
msgstr "L'authentification par certificat électronique a échouée."
#: templates/auth/login.html:5 templates/auth/login_form.html:6
msgid "Log in"
msgstr "S'identifier"
#: templates/auth/login_form.html:8
msgid "Cancel"
msgstr "Annuler"
#: templates/auth/login_form.html:14
msgid "Forgot password?"
msgstr "Mot de passe oublié ?"
#: templates/auth/login_form.html:14
msgid "Reset it!"
msgstr "Le réinitialiser !"
#: templates/auth/login_form.html:15
msgid "Not a member?"
msgstr "Pas un membre ?"
#: templates/auth/login_form.html:15
msgid "Register!"
msgstr "S'inscrire !"
#: templates/auth/login_password_profile.html:6
msgid "Change password"
msgstr "Modifier votre mot de passe"

View File

@ -0,0 +1,410 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 16:39+0200\n"
"PO-Revision-Date: 2013-07-23 16:39+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: backends.py:67
#, python-format
msgid "Sending logout to %(pid)s...."
msgstr "Envoi de la deconnesion a %(pid)s...."
#: frontend.py:20
msgid "Choose your identity provider"
msgstr "Choisissez votre fournisseur d'identité"
#: frontend.py:34
msgid "SAML 2.0"
msgstr "SAML 2.0"
#: models.py:90
msgid "Anonymous"
msgstr "Anonyme"
#: saml2_endpoints.py:128
msgid "redirect_to_disco: unable to build disco request"
msgstr ""
#: saml2_endpoints.py:135
#, python-format
msgid "disco_response: HTTP request not supported %s"
msgstr ""
#: saml2_endpoints.py:176 saml2_endpoints.py:182
msgid "sso: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:188
msgid "sso: No SAML2 identity provider selected"
msgstr ""
#: saml2_endpoints.py:196
msgid "sso: The provider does not exist"
msgstr ""
#: saml2_endpoints.py:201
msgid "sso: Unable to create Login object"
msgstr ""
#: saml2_endpoints.py:210
#, python-format
msgid "sso: %s does not have any supported SingleSignOn endpoint"
msgstr ""
#: saml2_endpoints.py:216
#, python-format
msgid "sso: initAuthnRequest %s"
msgstr ""
#: saml2_endpoints.py:222
msgid "sso: No IdP policy defined"
msgstr ""
#: saml2_endpoints.py:228
#, python-format
msgid "SSO: buildAuthnRequestMsg %s"
msgstr ""
#: saml2_endpoints.py:255
msgid "singleSignOnArtifact: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:273
msgid "singleSignOnArtifact: Unable to create Login object"
msgstr ""
#: saml2_endpoints.py:279
msgid "singleSignOnArtifact: No message given."
msgstr ""
#: saml2_endpoints.py:300
#, python-format
msgid "singleSignOnArtifact: provider %r unknown"
msgstr ""
#: saml2_endpoints.py:309
#, python-format
msgid "singleSignOnArtifact: initRequest %s"
msgstr ""
#: saml2_endpoints.py:317
#, python-format
msgid "singleSignOnArtifact: buildRequestMsg %s"
msgstr ""
#: saml2_endpoints.py:329
#, python-format
msgid ""
"singleSignOnArtifact: Failure to communicate with artifact "
"resolver %r"
msgstr ""
#: saml2_endpoints.py:334
#, python-format
msgid ""
"singleSignOnArtifact: Artifact resolver at %r returned an empty "
"response"
msgstr ""
#: saml2_endpoints.py:350
#, python-format
msgid "singleSignOnArtifact: processResponseMsg raised %s"
msgstr ""
#: saml2_endpoints.py:365
msgid "singleSignOnPost: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:371
msgid "singleSignOnPost: Unable to create Login object"
msgstr ""
#: saml2_endpoints.py:380
msgid "singleSignOnPost: No message given."
msgstr ""
#: saml2_endpoints.py:407
#, python-format
msgid "singleSignOnPost: provider %r unknown"
msgstr ""
#: saml2_endpoints.py:418
#, python-format
msgid "singleSignOnPost: %s"
msgstr ""
#: saml2_endpoints.py:441
msgid "sso_after_response: error checking authn response"
msgstr ""
#: saml2_endpoints.py:447
#, python-format
msgid "sso_after_response: acceptSso raised %s"
msgstr ""
#: saml2_endpoints.py:583
msgid "sso_after_response: No IdP policy defined"
msgstr ""
#: saml2_endpoints.py:632
msgid ""
"sso_after_response: No backend for temporary federation "
"is configured"
msgstr ""
#: saml2_endpoints.py:653
msgid ""
"sso_after_response: Transient access policy: Configuration error"
msgstr ""
#: saml2_endpoints.py:703
msgid ""
"sso_after_response: You were not asked your consent for "
"account linking"
msgstr ""
#: saml2_endpoints.py:720
msgid ""
"sso_after_response: Persistent Account policy: Configuration "
"error"
msgstr ""
#: saml2_endpoints.py:724
msgid ""
"sso_after_response: Transient access policy: NameId format not "
"supported"
msgstr ""
#: saml2_endpoints.py:747
msgid "finish_federation: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:753
msgid "finish_federation: Unable to create Login object"
msgstr ""
#: saml2_endpoints.py:760
msgid "finish_federation: Error loading session."
msgstr ""
#: saml2_endpoints.py:777
msgid ""
"SSO/finish_federation: Error adding new federation for "
"this user"
msgstr ""
#: saml2_endpoints.py:816
msgid "finish_federation: Unable to perform federation"
msgstr ""
#: saml2_endpoints.py:958
msgid "logout: not a logged in user"
msgstr ""
#: saml2_endpoints.py:963
msgid "logout: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:968
msgid "logout: Unable to create Login object"
msgstr ""
#: saml2_endpoints.py:976
msgid "logout: No session for global logout."
msgstr ""
#: saml2_endpoints.py:984
msgid "logout: Session malformed."
msgstr ""
#: saml2_endpoints.py:990
msgid "logout: Error loading provider."
msgstr ""
#: saml2_endpoints.py:1018
msgid "logout: SOAP error - Only local logout performed."
msgstr ""
#: saml2_endpoints.py:1066
msgid "logout: Unknown HTTP method."
msgstr ""
#: saml2_endpoints.py:1076
#, python-format
msgid ""
"localLogout: SOAP error with %s - Only local logout performed."
msgstr ""
#: saml2_endpoints.py:1080
#, python-format
msgid "localLogout: %s - Only local logout performed."
msgstr ""
#: saml2_endpoints.py:1092
msgid "singleLogoutReturn: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:1098
msgid ""
"singleLogoutReturn: Unable to handle Single Logout by Redirect "
"without request"
msgstr ""
#: saml2_endpoints.py:1105
msgid "singleLogoutReturn: Unable to create Login object"
msgstr ""
#: saml2_endpoints.py:1391
#, python-format
msgid "singleLogout: provider %r unknown"
msgstr ""
#: saml2_endpoints.py:1469
msgid "fedTerm/SP UI: No provider for defederation"
msgstr ""
#: saml2_endpoints.py:1474
msgid "fedTerm/SP UI: Unable to defederate a not logged user!"
msgstr ""
#: saml2_endpoints.py:1480
msgid "fedTerm/SP UI: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:1487
msgid "fedTerm/SP UI: No such identity provider."
msgstr ""
#: saml2_endpoints.py:1497
msgid "fedTerm/SP UI: Not a valid federation"
msgstr ""
#: saml2_endpoints.py:1513
#, python-format
msgid "fedTerm/SP UI: %s"
msgstr ""
#: saml2_endpoints.py:1521 saml2_endpoints.py:1552
#, python-format
msgid "fedTerm/SP SOAP: %s"
msgstr ""
#: saml2_endpoints.py:1530
msgid ""
"fedTerm/SP SOAP: Unable to perform SOAP defederation "
"request"
msgstr ""
#: saml2_endpoints.py:1539 saml2_endpoints.py:1573
#, python-format
msgid "fedTerm/SP Redirect: %s"
msgstr ""
#: saml2_endpoints.py:1561
msgid ""
"fedTerm/SP SOAP: Unable to perform SOAP defederation request"
msgstr ""
#: saml2_endpoints.py:1578
msgid "Unknown HTTP method."
msgstr ""
#: saml2_endpoints.py:1591
msgid "fedTerm/SP Redirect: Service provider not configured"
msgstr ""
#: saml2_endpoints.py:1599
msgid "fedTerm/SP Redirect: Error managing manage dump"
msgstr ""
#: saml2_endpoints.py:1614
msgid "fedTerm/SP Redirect: Defederation failed"
msgstr ""
#: saml2_endpoints.py:1640
#, python-format
msgid "fedTerm/Return: provider %r unknown"
msgstr ""
#: saml2_endpoints.py:1647
#, python-format
msgid "fedTerm/manage_name_id_return: %s"
msgstr ""
#: saml2_endpoints.py:1695
#, python-format
msgid "fedTerm/SOAP: provider %r unknown"
msgstr ""
#: saml2_endpoints.py:1888
msgid "Successful federation deletion."
msgstr ""
#: utils.py:42
#, python-format
msgid "An error happened. Report this %s to the administrator."
msgstr ""
#: templates/error_authsaml2.html:8
msgid "Back"
msgstr "Retour"
#: templates/profile.html:3
msgid "SAML2 Federations"
msgstr "Fédérations SAML2"
#: templates/profile.html:9
msgid "Delete a federation?"
msgstr "Supprimer une fédération ?"
#: templates/profile.html:15
msgid "Delete"
msgstr "Supprimer"
#: templates/profile.html:23
msgid "Add a federation?"
msgstr "Ajouter une fédération ?"
#: templates/profile.html:27 templates/auth/saml2/account_linking.html:32
#: templates/auth/saml2/login_form.html:6
msgid "Log in"
msgstr "S'identifier"
#: templates/auth/saml2/account_linking.html:5
msgid "Log in to link your account"
msgstr "Connectez-vous pour lier vos comptes"
#: templates/auth/saml2/account_linking.html:9
msgid "Log in to link with your existing account"
msgstr "Connectez-vous pour lier avec un compte existant"
#: templates/auth/saml2/account_linking.html:17
#: templates/auth/saml2/account_linking.html:24
msgid "Username:"
msgstr "Nom d'utilisateur :"
#: templates/auth/saml2/account_linking.html:20
#: templates/auth/saml2/account_linking.html:28
msgid "Password:"
msgstr "Mot de passe :"
#: templates/auth/saml2/logout.html:5
msgid "Logout"
msgstr "Déconnexion"
#: templates/auth/saml2/logout.html:18
msgid "Continue logout"
msgstr "Continuer la déconnexion"

View File

@ -40,7 +40,7 @@ class CustomIndexDashboard(Dashboard):
# append an app list module for "Applications"
self.children.append(modules.ModelList(
_('User and groups'),
_('Users and groups'),
models=('authentic2.models.User',
'django.contrib.auth.models.Group'),
))

View File

@ -19,7 +19,7 @@ from django.core.urlresolvers import reverse
from django.utils.http import urlquote
from authentic2 import settings
from authentic2.saml.common import error_page
from authentic2.saml.common import error_page as base_error_page
from authentic2.saml.models import LibertyProvider
logger = logging.getLogger('authentic2.disco.responder')
@ -32,6 +32,12 @@ except:
logger.error("disco: missing parameters in settings for idp discovery.")
def error_page(request, message, logger):
'''Customized disco service error page'''
message = u'disco: ' + message
return base_error_page(request, message, logger)
def save_key_values(request, *values):
request.session['save_key_values'] = values
@ -132,7 +138,7 @@ def add_param_to_url(url, param_name, value):
def disco(request):
if not request.method == "GET":
message = _('disco: HTTP request not supported %s' % request.method)
message = _('HTTP verb not supported %s' % request.method)
return error_page(request, message, logger=logger)
entityID = None
@ -175,12 +181,12 @@ def disco(request):
isPAssive=False
if not entityID:
message = _('disco: missing mandatory parameter entityID')
message = _('missing mandatory parameter entityID')
return error_page(request, message, logger=logger)
if not policy == \
if policy != \
'urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol:single':
message = _('disco: policy not implemented')
message = _('policy %r not implemented') % policy
return error_page(request, message, logger=logger)
# If we use metadata, we ignore the parameter return and take it from the
@ -191,14 +197,14 @@ def disco(request):
else:
return_url = _return
if not return_url:
message = _('disco: unable to find a valid return url for %s' \
message = _('unable to find a valid return url for %s' \
% entityID)
return error_page(request, message, logger=logger)
# Check that the return_url does not already contain a param with name
# equal to returnIDParam. Else, it is an unconformant SP.
if is_param_id_in_return_url(return_url, returnIDParam):
message = _('disco: invalid return url %(return_url)s for %(entity_id)s' \
message = _('invalid return url %(return_url)s for %(entity_id)s' \
% dict(return_url=return_url, entity_id=entityID))
return error_page(request, message, logger=logger)

View File

@ -0,0 +1,43 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-24 11:31+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: disco_responder.py:141
#, python-format
msgid "HTTP verb not supported %s"
msgstr "verbe HTTP %s non supporté"
#: disco_responder.py:184
msgid "missing mandatory parameter entityID"
msgstr "paramètre obligatoire entityID manquant"
#: disco_responder.py:189
#, python-format
msgid "policy %r not implemented"
msgstr "le règlement %r n'est pas géré"
#: disco_responder.py:200
#, python-format
msgid "unable to find a valid return url for %s"
msgstr "impossible de trouver une URL de retour valide pour %s"
#: disco_responder.py:207
#, python-format
msgid "invalid return url %(return_url)s for %(entity_id)s"
msgstr "URL de retour %(return_url)s invalide pour %(entity_id)s"

View File

@ -0,0 +1,43 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 17:46+0200\n"
"PO-Revision-Date: 2013-07-23 17:46+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: views.py:266
msgid "Trust this site?"
msgstr "Faire confiance à ce site ?"
#: templates/django_openid_provider/manage_id.html:5
#: templates/django_openid_provider/manage_id_confirm.html:5
msgid "Manage OpenID"
msgstr "Gérer la connexion OpenID"
#: templates/django_openid_provider/manage_id.html:23
msgid "Your current OpenID"
msgstr "Vos identifiants OpenID actuels"
#: templates/django_openid_provider/manage_id.html:52
msgid "Add a new OpenID identity"
msgstr "Ajouter une nouvelle identité OpenID"
#: templates/django_openid_provider/manage_trustroot.html:5
msgid "Manage trusted site"
msgstr "Gérer vos sites de confiance"
#: templates/django_openid_provider/manage_trustroot.html:17
msgid "Your trusted site"
msgstr "Vos sites de confiance"

View File

@ -0,0 +1,304 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-23 17:54+0200\n"
"PO-Revision-Date: 2013-07-23 17:56+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: models.py:54
msgid "user consent for attributes propagation"
msgstr "consentement utilisateur pour la propagation des attributs"
#: models.py:55
msgid "user consents for attributes propagation"
msgstr "consentements utilisateur pour la propagation des attributs"
#: models.py:58
msgid "user {0} consent to release attributes {1} to provider {2}"
msgstr ""
"l'utilisateur {0} consent à libérer les attributs {1} au fournisseur {2}"
#: models.py:67
msgid "Attribute name"
msgstr "Nom de l'attribut"
#: models.py:73 models.py:170
msgid "Output name format"
msgstr "Format du nom de l'attribut en sortie"
#: models.py:79 models.py:177
msgid "Output namespace"
msgstr "Espace de nom de sortie"
#: models.py:83
msgid "Required"
msgstr "Requis"
#: models.py:86
msgid "Attribute source"
msgstr "Source d'attributs"
#: models.py:90
msgid "attribute list item"
msgstr "élément d'une liste d'attributs"
#: models.py:91
msgid "attribute list items"
msgstr "éléments d'une liste d'attributs"
#: models.py:112
msgid "Name"
msgstr "Nom"
#: models.py:115
msgid "Attributes"
msgstr "Attributs"
#: models.py:120
msgid "attribute list"
msgstr "liste d'attributs"
#: models.py:121
msgid "attribute lists"
msgstr "listes d'attributs"
#: models.py:133
msgid "Enabled"
msgstr "Activé"
#: models.py:135
msgid "Ask the user consent before forwarding attributes"
msgstr ""
"Demander le consentement de l'utilisateur avant d'envoyer des attributs"
#: models.py:138
msgid "Allow the user to select the forwarding attributes"
msgstr "Permettre à l'utilisateur de séléctioner les attributs à envoyer"
#: models.py:145
msgid "Pull attributes list"
msgstr "Liste des attributs des sources locales"
#: models.py:154
msgid "Forward pushed attributes"
msgstr "Faire suivre les attributs poussés"
#: models.py:164
msgid "Map forwarded pushed attributes"
msgstr "Mapper les attributs poussés à faire suivre"
#: models.py:185
msgid "Filter by source the forwarded pushed attributes"
msgstr "Filtrer par source les attributs poussés à faire suivre"
#: models.py:193
msgid "Filter by attribute names the forwarded pushed attributes"
msgstr "Filtrer par attribut les attributs poussés à faire suivre"
#: models.py:201
msgid "Filter by source and per attribute the forwarded pushed attributes"
msgstr ""
"Filtrer par source et par attribut les attributs poussés à faire suivre"
#: models.py:209
msgid "Map filtered attributes"
msgstr "Mapper les attributs filtrés"
#: models.py:216
msgid "Send an error when a required attribute is missing"
msgstr "envoyer une erreur lorsqu'un attribut requis est manquant"
#: models.py:223
msgid "attribute policy"
msgstr "règlement sur les attributs"
#: models.py:224
msgid "attribute policies"
msgstr "règlements sur les attributs"
#: views.py:108
msgid "Local logout..."
msgstr "Déconnexion locale"
#: views.py:116
msgid "Logging out from all your services"
msgstr "Déconnexion de tous vos services"
#: views.py:122
msgid "Logged out"
msgstr "Déconnecté"
#: saml/backend.py:69
#, python-format
msgid "Sending logout to %(name)s...."
msgstr "Communication de la déconnexion à %(name)s...."
#: saml/saml2_endpoints.py:370
#, python-format
msgid ""
"SAMLv2 Single Sign On: invalid message for WebSSO profile with HTTP-Redirect "
"binding: %r"
msgstr ""
"SAMLv2 Single Sign On: message invalide pour le profile WebSSO avec le binding "
"HTTP-Redirect: %r"
#: saml/saml2_endpoints.py:375
msgid ""
"SAMLv2 Single Sign On: the request cannot be answered because no valid "
"protocol binding could be found"
msgstr ""
#: saml/saml2_endpoints.py:393
#, python-format
msgid "sso: fail to load unknown provider %s"
msgstr ""
#: saml/saml2_endpoints.py:400
msgid "sso: No SP policy defined"
msgstr ""
#: saml/saml2_endpoints.py:526
msgid "continue_sso: error loading login"
msgstr ""
#: saml/saml2_endpoints.py:530
#, python-format
msgid "continue_sso: unknown provider %s"
msgstr ""
#: saml/saml2_endpoints.py:662 saml/saml2_endpoints.py:954
#, python-format
msgid "Provider %s is unknown"
msgstr ""
#: saml/saml2_endpoints.py:668
msgid "No service provider policy defined"
msgstr ""
#: saml/saml2_endpoints.py:846
msgid "Authentication response"
msgstr ""
#: saml/saml2_endpoints.py:937
msgid "Error trying to initiate a single sign on"
msgstr ""
#: saml/saml2_endpoints.py:943
msgid "A provider identifier was not provided"
msgstr ""
#: saml/saml2_endpoints.py:974
msgid "idp_sso: No SP policy defined"
msgstr ""
#: saml/saml2_endpoints.py:986
msgid "Server error"
msgstr ""
#: saml/saml2_endpoints.py:1375 saml/saml2_endpoints.py:1385
msgid "Logout response"
msgstr ""
#: saml/saml2_endpoints.py:1378
msgid "Invalid logout request"
msgstr ""
#: templates/idp/account_management.html:5
msgid "Authentic - Account Management"
msgstr "Authentic - Gestion du compte"
#: templates/idp/account_management.html:10 templates/idp/homepage.html:13
msgid "Account Management"
msgstr "Gestion de votre compte"
#: templates/idp/account_management.html:11
msgid "Profile"
msgstr "Profil"
#: templates/idp/account_management.html:28
msgid "Edit profile"
msgstr "Edition du profil"
#: templates/idp/account_management.html:29
msgid "Delete profile"
msgstr "Supprimer le profil"
#: templates/idp/account_management.html:31
msgid "Credentials"
msgstr "Moyens d'authentification"
#: templates/idp/account_management.html:35
msgid "Back"
msgstr "Retour"
#: templates/idp/homepage.html:5
msgid "Authentic"
msgstr "Authentic"
#: templates/idp/homepage.html:20
msgid "Services"
msgstr "Services"
#: templates/idp/homepage.html:44
msgid "Administration"
msgstr "Administration"
#: templates/idp/logout.html:5
msgid "Logout"
msgstr "Déconnexion"
#: templates/idp/logout.html:18
msgid "Continue logout"
msgstr "Continuer la déconnexion"
#: templates/interaction/consent_attributes.html:4
msgid "Consent page for attribute propagation"
msgstr "Page de consentement pour la transmission des attributs"
#: templates/interaction/consent_attributes.html:14
msgid "Choose attributes to send to "
msgstr "Choisissez les attributs à envoyer"
#: templates/interaction/consent_attributes.html:31
msgid "Send selected"
msgstr "Envoyer la selection"
#: templates/interaction/consent_attributes.html:33
msgid "Send all"
msgstr "Tout envoyer"
#: templates/interaction/consent_attributes.html:35
msgid "Refuse all"
msgstr "Aucun"
#: templates/interaction/consent_federation.html:4
msgid "Consent page for federation"
msgstr "Page de consentement pour la fédération"
#: templates/interaction/consent_federation.html:13
msgid "Do you accept to federate your account with "
msgstr "Acceptez-vous de fédérer votre compte avec "
#: templates/interaction/consent_federation.html:15
msgid "Do you accept to federate your account ?"
msgstr "Acceptez-vous de federez vos comptes ?"
#: templates/interaction/consent_federation.html:23
msgid "Accept"
msgstr "Accepter"
#: templates/interaction/consent_federation.html:24
msgid "Refuse"
msgstr "Refuser"

View File

@ -51,11 +51,16 @@ class UserConsentAttributes(models.Model):
attributes = models.TextField()
class Meta:
verbose_name = _('User consent for attributes propagation')
verbose_name = _('user consent for attributes propagation')
verbose_name_plural = _('user consents for attributes propagation')
def __unicode__(self):
return "User consent for attributes propagation"
return _(u"user {0} consent to release attributes {1} to provider {2}") % (
self.user, self.attributes, self.provider)
def __repr__(self):
return '<UserConsentAttributes {0!r}>'.format(
self.__dict__)
class AttributeItem(models.Model):
attribute_name = models.CharField(
@ -82,17 +87,25 @@ class AttributeItem(models.Model):
blank = True, null = True)
class Meta:
verbose_name = _('attribute of a list (SSO Login)')
verbose_name_plural = _('attributes of lists (SSO Login)')
verbose_name = _('attribute list item')
verbose_name_plural = _('attribute list items')
def __unicode__(self):
s = self.attribute_name
s += ' (Output name fomat: %s)' % self.output_name_format
s += ' (Output namespace: %s)' % self.output_namespace
s += ' (Required: %s)' % self.required
s += ' (Source: %s)' % self.source
attributes = []
attributes.append(u'output name fomat: %s' % self.output_name_format)
attributes.append(u'output namespace: %s' % self.output_namespace)
if self.required:
attributes.append(u'required' % self.required)
if self.source:
attributes.append(u'source: %s' % self.source)
s += u' (%s)' % u', '.join(attributes)
return s
def __repr__(self):
return '<AttributeItem {0!r}>'.format(
self.__dict__)
class AttributeList(models.Model):
name = models.CharField(
@ -104,12 +117,16 @@ class AttributeList(models.Model):
blank = True, null = True)
class Meta:
verbose_name = _('attribute list (SSO Login)')
verbose_name_plural = _('attribute lists (SSO Login)')
verbose_name = _('attribute list')
verbose_name_plural = _('attribute lists')
def __unicode__(self):
return self.name
def __repr__(self):
return '<AttributeList name:{0!r} attributes:[{1:r}]>'.format(
self.name, ', '.join(map(repr, self.attributes.all())))
class AttributePolicy(models.Model):
name = models.CharField(max_length = 100, unique = True)
@ -203,12 +220,16 @@ class AttributePolicy(models.Model):
#ask_user_consent = models.BooleanField(default=False)
class Meta:
verbose_name = _('attribute options policy')
verbose_name_plural = _('attribute options policies')
verbose_name = _('attribute policy')
verbose_name_plural = _('attribute policies')
def __unicode__(self):
return self.name
def __repr__(self):
return '<AttributePolicy {0!r}>'.format(self.__dict__)
def get_attribute_policy(provider):
try:

File diff suppressed because it is too large Load Diff

View File

@ -60,7 +60,7 @@ def get_soap_message(request, on_error_raise = True):
if request.method != 'POST' or \
'text/xml' not in request.META['CONTENT_TYPE']:
if on_error_raise:
raise Http404(_('Only SOAP messages here'))
raise Http404('Only SOAP messages here')
else:
return None
return request.raw_post_data

View File

@ -0,0 +1,461 @@
# French translation of Authentic
# Copyright (C) 2010, 2011 Entr'ouvert
# This file is distributed under the same license as the Authentic package.
# Frederic Peters <fpeters@entrouvert.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Authentic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-24 11:14+0200\n"
"PO-Revision-Date: 2013-07-24 11:14+0200\n"
"Last-Translator: Mikaël Ates <mates@entrouvert.com>\n"
"Language-Team: None\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: admin.py:148
#, python-format
msgid "Failure to resolve %(entity_id)s: %(error)s"
msgstr "Échec dans la résolution de %(entity_id)s: %(error)s"
#: admin.py:152
#, python-format
msgid "Metadata update for: %s"
msgstr "Mise à jour des metadatas pour: %s"
#: admin.py:165
msgid "Metadata files"
msgstr "Fichiers de metadonnées"
#: common.py:720
msgid "Your access is denied. At least one attribute does not match."
msgstr "Accés interdit. Au moins un attribut ne correspond pas."
#: models.py:23
msgid "Bad metadata file"
msgstr "Fichier de metadonnées incorrect"
#: models.py:77
msgid "Use the default from the metadata file"
msgstr "Utilisation des valeurs par défaut du fichier de métadonnées"
#: models.py:78 models.py:113
msgid "Artifact binding"
msgstr "Binding utilisant les artefacts"
#: models.py:79 models.py:114
msgid "POST binding"
msgstr "Binding utilisant le verbe HTTP POST"
#: models.py:85
msgid "None"
msgstr "Aucun"
#: models.py:87
msgid "Persistent"
msgstr "Persistant"
#: models.py:89
msgid "Transient"
msgstr "Temporaire"
#: models.py:91
msgid "Email (only supported by SAMLv2)"
msgstr "Email (seulement supporté en SAML2)"
#: models.py:119
msgid "Redirect binding"
msgstr "Binding utilisant les redirections HTTP"
#: models.py:120
msgid "SOAP binding"
msgstr "Binding utilisant le protocole SOAP sur HTTP"
#: models.py:125
msgid "Let authentic decides which signatures to check"
msgstr "Laisser authentic decider quelles signatures vérifier"
#: models.py:126
msgid "Always check signatures"
msgstr "Vérifier toutes les signatures"
#: models.py:127
msgid "Does not check signatures"
msgstr "Ne pas vérifier les signatures"
#: models.py:133
msgid "How to verify signatures Authentication Request ?"
msgstr "Comment vérifier les signatures des requêtes d'authentification"
#: models.py:143
msgid "liberty service provider policy"
msgstr "règlement d'options pour fournisseur de service liberty"
#: models.py:144
msgid "liberty service provider policies"
msgstr "règlements d'options pour fournisseur de service liberty"
#: models.py:149
msgid "Account linking by authentication"
msgstr "Liaison des comptes par authentification"
#: models.py:151
msgid "Create new account"
msgstr "Créer un nouveau compte"
#: models.py:155
msgid "Ask authentication"
msgstr "Requerir l'authentification"
#: models.py:156
msgid "Open a session"
msgstr "Etablir une session"
#: models.py:167 models.py:248 models.py:313
msgid "name"
msgstr "nom"
#: models.py:168 models.py:249 models.py:314 models.py:404 models.py:434
msgid "Enabled"
msgstr "Activé"
#: models.py:170
msgid "Do not send a nameId Policy"
msgstr "Ne pas envoyer une nameId Policy"
#: models.py:172
msgid "Requested NameID format"
msgstr "Format du NameID demandé"
#: models.py:178
msgid "This IdP falsely sends a transient NameID which is in fact persistent"
msgstr ""
"Cet IdP envoie un nameID transient qui doit être considéré comme persistent"
#: models.py:180
msgid "Allow IdP to create an identity"
msgstr "Autoriser l'IdP à créer une identité"
#: models.py:182
msgid ""
"Binding for Authnresponse (taken from metadata by the IdP if not "
"enabled)"
msgstr ""
"Transport pour les réponses d'authentification (extrait des métadonnées du "
"fournisseur de service si non activé)"
#: models.py:185
msgid "Binding for the SSO responses"
msgstr "Binding pour les reponses au SSO"
#: models.py:189
msgid ""
"HTTP method for single logout request (taken from metadata if "
"not enabled)"
msgstr ""
"Transport pour les requêtes de déconnexion (extrait des métadonnées du "
"fournisseur de service si non activé)"
#: models.py:192
msgid "HTTP binding for the SLO requests"
msgstr "Binding HTTP pour les requêtes de SLO"
#: models.py:197
msgid ""
"HTTP method for federation termination request (taken from "
"metadata if not enabled)"
msgstr ""
"Transport pour les requêtes de suppression de fédération (extrait des "
"métadonnées du fournisseur de service si non activé)"
#: models.py:200
msgid "HTTP method for the SLO requests"
msgstr "Méthode HTTP pour les requêtes de SLO"
#: models.py:205
msgid "Require the user consent be given at account linking"
msgstr ""
"Requerir que le consentement utilisateur soit donné lors de la liaison de "
"compte"
#: models.py:208
msgid "Force authentication"
msgstr "Forcer l'authentification"
#: models.py:210
msgid "Passive authentication"
msgstr "Authentification sans action de l'utilisateur"
#: models.py:212
msgid "Want AuthnRequest signed"
msgstr "Les requêtes d'authentification doivent être signées"
#: models.py:215
msgid "Behavior with persistent NameID"
msgstr "Comportement avec un NameID persistent"
#: models.py:220
msgid "Behavior with transient NameID"
msgstr "Comportement avec un NameID transient"
#: models.py:226
msgid "Return URL after a successful authentication"
msgstr "URL de retour après un authentification valide"
#: models.py:228 models.py:276
msgid "Accept to receive Single Logout requests"
msgstr "Accepter les requêtes de déconnexion"
#: models.py:231 models.py:279
msgid "Forward Single Logout requests"
msgstr "Faire suivre les requêtes de déconnexion"
#: models.py:235 models.py:440
msgid "identity provider options policy"
msgstr "règlement des options de fournisseur d'identités"
#: models.py:236
msgid "identity provider options policies"
msgstr "règlements des options de fournisseur d'identités"
#: models.py:251
msgid "Prefered assertion consumer binding"
msgstr "Binding du consommateur d'assertion préféré"
#: models.py:254
msgid "Encrypt NameID"
msgstr "Encrypter le NameID"
#: models.py:256
msgid "Encrypt Assertion"
msgstr "Encrypter l'assertion"
#: models.py:258
msgid "Authentication request signed"
msgstr "Requête d'authentification signée"
#: models.py:260
msgid "Allow IdP initiated SSO"
msgstr "Autoriser le SSO initié par l'IdP"
#: models.py:267
msgid "NameID formats accepted"
msgstr "Formats de NameID acceptés"
#: models.py:274
msgid "Ask user for consent when creating a federation"
msgstr "Demander le consentement utilisateur à la création d'une fédération"
#: models.py:283 models.py:407
msgid "service provider options policy"
msgstr "règlement des options de fournisseur de services"
#: models.py:284
msgid "service provider options policies"
msgstr "règlement des options de fournisseur de services"
#: models.py:296
msgid "authorization attribute map"
msgstr "carte des attributs d'autorisation"
#: models.py:297
msgid "authorization attribute maps"
msgstr "cartes des attributs d'autorisation"
#: models.py:309
msgid "authorization attribute mapping"
msgstr "correspondance entre attributs d'autorisation"
#: models.py:310
msgid "authorization attribute mappings"
msgstr "correspondances entre attributs d'autorisation"
#: models.py:321
msgid "Default message to display to the user when access is denied"
msgstr ""
"Message par défaut à afficher à l'utilisateur quand l'accès lui est refusé"
#: models.py:322
msgid "You are not authorized to access the service."
msgstr "Vous n'etes pas autorise à acceder a ce service."
#: models.py:325 models.py:447
msgid "authorization identity providers policy"
msgstr "règlement des autorisations pour les fournisseurs d'identité"
#: models.py:326
msgid "authorization identity providers policies"
msgstr "règlement des autorisations pour les fournisseurs d'identité"
#: models.py:335
msgid "Internal nickname for the service provider"
msgstr "Nom local du fournisseur de service"
#: models.py:378
msgid "Protocol other than SAML 2.0 are unsupported"
msgstr "Les protocoles autre que SAML 2.0 ne sont pas supportés"
#: models.py:382
msgid "liberty provider"
msgstr "fournisseur liberty"
#: models.py:383
msgid "liberty providers"
msgstr "fournisseurs liberty"
#: models.py:406
msgid ""
"The following options policy will apply except if a policy for all service "
"provider is defined."
msgstr ""
"Active le règlement d'option de fournisseur de service qui suit sauf si un "
"règlementpour tous les fournisseurs de service est actif"
#: models.py:409
msgid "Protocol policy"
msgstr "Règlement sur le protocole"
#: models.py:411
msgid ""
"The following attribute policy will apply except if a policy for all service "
"provider is defined."
msgstr ""
"Le règlement sur les attributs qui suit s'appliquera sauf si un "
"règlementpour tous les fournisseurs de services est défini."
#: models.py:414
msgid "attribute policy"
msgstr "règlement sur les attributs"
#: models.py:423
msgid "liberty service provider"
msgstr "fournisseur de service liberty"
#: models.py:424
msgid "liberty service providers"
msgstr "fournisseurs de service liberty"
#: models.py:436
msgid ""
"The following options policy will apply except if a policy for all identity "
"provider is defined."
msgstr ""
"Le règlement d'option pour les fournisseurs d'identité qui suit s'appliquera "
"sauf si un règlement pour tous les fournisseurs d'identité est défini."
#: models.py:443
msgid ""
"The following authorization policy will apply except if a policy for all "
"identity provider is defined."
msgstr ""
"Le règlement des autorisations pour les fournisseurs d'identité qui suit "
"s'appliquera sauf si un règlement pour tous les fournisseurs d'identité est "
"défini."
#: models.py:457
msgid "liberty identity provider"
msgstr "fournisseur d'identité liberty"
#: models.py:458
msgid "liberty identity providers"
msgstr "fournisseurs d'identité liberty"
#: models.py:491
msgid "liberty session dump"
msgstr "dump de session liberty"
#: models.py:492
msgid "liberty session dumps"
msgstr "dumps de session liberty"
#: models.py:505
msgid "liberty manage dump"
msgstr "dump du profil gestion des fédérations liberty"
#: models.py:506
msgid "liberty manage dumps"
msgstr "dumps du profil gestion des fédérations liberty"
#: models.py:524
msgid "liberty artifact"
msgstr "artéfact liberty"
#: models.py:525
msgid "liberty artifacts"
msgstr "artéfacts liberty"
#: models.py:556
msgid "liberty assertion"
msgstr "assertion liberty"
#: models.py:557
msgid "liberty assertions"
msgstr "assertions liberty"
#: models.py:594
msgid "liberty federation"
msgstr "fédérations liberty"
#: models.py:595
msgid "liberty federations"
msgstr "fédérations liberty"
#: models.py:609
msgid "Qualifier"
msgstr ""
#: models.py:611
msgid "NameIDFormat"
msgstr ""
#: models.py:613
msgid "NameID"
msgstr ""
#: models.py:615
msgid "SPNameQualifier"
msgstr ""
#: models.py:642
msgid "liberty session"
msgstr "session liberty"
#: models.py:643
msgid "liberty sessions"
msgstr "sessions liberty"
#: models.py:652
msgid "liberty service provider session"
msgstr "session de fournisseur de service liberty"
#: models.py:653
msgid "liberty service provider sessions"
msgstr "sessions de fournisseur de service liberty"
#: models.py:663
msgid "key value association"
msgstr "association clé valeur"
#: models.py:664
msgid "key value associations"
msgstr "associations clé valeurs"
#: templates/saml/post_form.html:11
msgid "You should be automatically redirected."
msgstr "Vous devriez être automatiquement redirigés."
#: templates/saml/post_form.html:12
msgid ""
"If this page is still visible after a few seconds, press the Send button "
"below."
msgstr ""
"Si cette page est encore visible après quelques secondes, cliquez sur le "
"bouton Envoyer ci-dessous."
#: templates/saml/post_form.html:18
msgid "Send"
msgstr "Envoyer"

View File

@ -76,7 +76,7 @@ def organization_name(provider):
ASSERTION_CONSUMER_PROFILES = (
('meta', _('Use the default from the metadata file')),
('art', _('Artifact binding')),
('post', _('Post binding')))
('post', _('POST binding')))
DEFAULT_NAME_ID_FORMAT = 'none'
@ -139,6 +139,10 @@ class LibertyProviderPolicy(models.Model):
options.append(u'AuthnRequest signature: %s' % SIGNATURE_VERIFY_HINT[self.authn_request_signature_check_hint])
return self.name + ' (%s)' % ', '.join(options)
class Meta:
verbose_name = _('liberty service provider policy')
verbose_name_plural = _('liberty service provider policies')
AUTHSAML2_UNAUTH_PERSISTENT = (
('AUTHSAML2_UNAUTH_PERSISTENT_ACCOUNT_LINKING_BY_AUTH',
@ -288,6 +292,10 @@ class AuthorizationAttributeMap(models.Model):
def __unicode__(self):
return self.name
class Meta:
verbose_name = _('authorization attribute map')
verbose_name_plural = _('authorization attribute maps')
class AuthorizationAttributeMapping(models.Model):
source_attribute_name = models.CharField(max_length = 40,
blank=True)
@ -297,6 +305,10 @@ class AuthorizationAttributeMapping(models.Model):
attribute_value = models.CharField(max_length = 40)
map = models.ForeignKey(AuthorizationAttributeMap)
class Meta:
verbose_name = _('authorization attribute mapping')
verbose_name_plural = _('authorization attribute mappings')
class AuthorizationSPPolicy(models.Model):
name = models.CharField(_('name'), max_length=80, unique=True)
enabled = models.BooleanField(verbose_name = _('Enabled'))
@ -310,8 +322,8 @@ class AuthorizationSPPolicy(models.Model):
default=_('You are not authorized to access the service.'))
class Meta:
verbose_name = _('authorization policy')
verbose_name_plural = _('authorization policies')
verbose_name = _('authorization identity providers policy')
verbose_name_plural = _('authorization identity providers policies')
def __unicode__(self):
return self.name
@ -368,6 +380,7 @@ class LibertyProvider(models.Model):
class Meta:
ordering = ('name',)
verbose_name = _('liberty provider')
verbose_name_plural = _('liberty providers')
def get_all_custom_or_default(instance, name):
model = instance._meta.get_field_by_name(name)[0].rel.to
@ -391,14 +404,14 @@ class LibertyServiceProvider(models.Model):
enabled = models.BooleanField(verbose_name = _('Enabled'))
enable_following_sp_options_policy = models.BooleanField(verbose_name = \
_('The following options policy will apply except if a policy for all service provider is defined.'))
sp_options_policy = models.ForeignKey(SPOptionsIdPPolicy, related_name = "sp_options_policy", verbose_name = _('SP Options Policy'), blank=True, null=True)
sp_options_policy = models.ForeignKey(SPOptionsIdPPolicy, related_name = "sp_options_policy", verbose_name = _('service provider options policy'), blank=True, null=True)
policy = models.ForeignKey(LibertyProviderPolicy,
verbose_name=_("Protocol policy"), null=True, default=1)
enable_following_attribute_policy = models.BooleanField(verbose_name = \
_('The following attribute policy will apply except if a policy for all service provider is defined.'))
attribute_policy = models.ForeignKey(AttributePolicy,
related_name = "attribute_policy",
verbose_name=_("Attribute policy"), null=True, blank=True)
verbose_name=_("attribute policy"), null=True, blank=True)
def get_policy(self):
return get_all_custom_or_default(self, 'policy')
@ -406,6 +419,10 @@ class LibertyServiceProvider(models.Model):
def __unicode__(self):
return unicode(self.liberty_provider)
class Meta:
verbose_name = _('liberty service provider')
verbose_name_plural = _('liberty service providers')
# TODO: The choice for requests must be restricted by the IdP metadata
# The SP then chooses the binding in this list.
@ -416,11 +433,18 @@ class LibertyIdentityProvider(models.Model):
primary_key = True, related_name = 'identity_provider')
enabled = models.BooleanField(verbose_name = _('Enabled'))
enable_following_idp_options_policy = models.BooleanField(verbose_name = \
_('The following options policy will apply except if a policy for all identity provider is defined.'))
idp_options_policy = models.ForeignKey(IdPOptionsSPPolicy, related_name = "idp_options_policy", verbose_name = _('IdP Options Policy'), blank=True, null=True)
_('The following options policy will apply except if a policy for all '
'identity provider is defined.'))
idp_options_policy = models.ForeignKey(IdPOptionsSPPolicy,
related_name="idp_options_policy",
verbose_name=_('identity provider options policy'), blank=True,
null=True)
enable_following_authorization_policy = models.BooleanField(verbose_name = \
_('The following authorization policy will apply except if a policy for all identity provider is defined.'))
authorization_policy = models.ForeignKey(AuthorizationSPPolicy, related_name = "authorization_policy", verbose_name = _('Authorization Policy'), blank=True, null=True)
_('The following authorization policy will apply except if a policy for'
' all identity provider is defined.'))
authorization_policy = models.ForeignKey(AuthorizationSPPolicy,
related_name="authorization_policy",
verbose_name=_('authorization identity providers policy'), blank=True, null=True)
# TODO: add clean method which checks that the LassoProvider we can create
# with the metadata file support the IDP role
@ -429,6 +453,9 @@ class LibertyIdentityProvider(models.Model):
def __unicode__(self):
return unicode(self.liberty_provider)
class Meta:
verbose_name = _('liberty identity provider')
verbose_name_plural = _('liberty identity providers')
class SessionLinkedManager(models.Manager):
def cleanup(self):
@ -460,6 +487,10 @@ class LibertySessionDump(models.Model):
objects = SessionLinkedManager()
class Meta:
verbose_name = _('liberty session dump')
verbose_name_plural = _('liberty session dumps')
class LibertyManageDump(models.Model):
'''Store lasso manage dump
@ -470,6 +501,10 @@ class LibertyManageDump(models.Model):
objects = SessionLinkedManager()
class Meta:
verbose_name = _('liberty manage dump')
verbose_name_plural = _('liberty manage dumps')
class LibertyArtifactManager(models.Manager):
def cleanup(self):
expire = getattr(settings, 'SAML2_ARTIFACT_EXPIRATION', 600)
@ -485,6 +520,10 @@ class LibertyArtifact(models.Model):
objects = LibertyArtifactManager()
class Meta:
verbose_name = _('liberty artifact')
verbose_name_plural = _('liberty artifacts')
def nameid2kwargs(name_id):
return {
'name_id_content': name_id.content,
@ -513,6 +552,10 @@ class LibertyAssertion(models.Model):
kwargs['assertion'] = saml2_assertion.exportToXml()
models.Model.__init__(self, *args, **kwargs)
class Meta:
verbose_name = _('liberty assertion')
verbose_name_plural = _('liberty assertions')
class LibertyFederation(models.Model):
"""Store a federation, i.e. an identifier shared with another provider, be
it IdP or SP"""
@ -548,8 +591,8 @@ class LibertyFederation(models.Model):
return not qs.exists()
class Meta:
verbose_name = _("Liberty federation")
verbose_name_plural = _("Liberty federations")
verbose_name = _("liberty federation")
verbose_name_plural = _("liberty federations")
def __unicode__(self):
return self.name_id_content
@ -589,17 +632,26 @@ class LibertySession(models.Model):
@classmethod
def get_for_nameid_and_session_indexes(cls, name_id, session_indexes):
kwargs = nameid2kwargs(name_id)
return LibertySession.objects.filter(session_index__in = session_indexes, **kwargs)
return LibertySession.objects.filter(session_index__in=session_indexes,
**kwargs)
def __unicode__(self):
return '<LibertySession %s>' % self.__dict__
class Meta:
verbose_name = _("liberty session")
verbose_name_plural = _("liberty sessions")
class LibertySessionSP(models.Model):
"""Store the link between a Django session and a Liberty session on the SP"""
django_session_key = models.CharField(max_length = 128)
session_index = models.CharField(max_length = 80, )
federation = models.ForeignKey(LibertyFederation)
class Meta:
verbose_name = _("liberty service provider session")
verbose_name_plural = _("liberty service provider sessions")
class KeyValue(models.Model):
key = models.CharField(max_length=128, primary_key=True)
value = PickledObjectField()
@ -607,6 +659,10 @@ class KeyValue(models.Model):
def __unicode__(self):
return self.key
class Meta:
verbose_name = _("key value association")
verbose_name_plural = _("key value associations")
def save_key_values(key, *values):
KeyValue(key = key, value = values).save()

View File

@ -1,38 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block title %} {% trans "Consent page" %} {% endblock %}
{% block content %}
{% load i18n %}
<div id="consent">
<p>
{% if provider_id %}
{% trans "Do you accept to federate your account with " %} <strong>{{ provider_id }}</strong> ?
{% else %}
{% trans "Do you accept to federate your account ?" %}
{% endif %}
{{ provider_id2 }}
</p>
<p>
{% if attributes %}
{% trans "Do you accept to send these attributes?" %}
<ul>
{% for attribute in attributes %}
<li>{{ attribute }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
<form method="post" action="">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
<input type="hidden" name="nonce" value="{{ nonce }}" />
<input type="submit" name="accept" value="{% trans 'Accept' %}"/>
<input type="submit" name="refuse" value="{% trans 'Refuse' %}"/>
</form>
</div>
{% endblock %}

View File

@ -1,8 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block title %}{% trans "Create profile" %}{% endblock %}
{% block content %}
{{ profile }}
{% endblock %}