Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Add browserid/persona plugin

  • Loading branch information...
commit e87ca2922c15d2e7d42607b6d5eabdc2a229d5c5 1 parent 73e6e48
@craigcook craigcook authored
Showing with 6,277 additions and 0 deletions.
  1. BIN  plugins/browserid/browserid-de_DE.mo
  2. BIN  plugins/browserid/browserid-de_DE.png
  3. +77 −0 plugins/browserid/browserid-de_DE.po
  4. BIN  plugins/browserid/browserid-en_US.png
  5. BIN  plugins/browserid/browserid-fr_FR.mo
  6. +139 −0 plugins/browserid/browserid-fr_FR.po
  7. BIN  plugins/browserid/browserid-it_IT.mo
  8. BIN  plugins/browserid/browserid-it_IT.png
  9. +140 −0 plugins/browserid/browserid-it_IT.po
  10. BIN  plugins/browserid/browserid-logo.png
  11. BIN  plugins/browserid/browserid-nb_NO.mo
  12. +80 −0 plugins/browserid/browserid-nb_NO.po
  13. BIN  plugins/browserid/browserid-nl_BE.mo
  14. +95 −0 plugins/browserid/browserid-nl_BE.po
  15. BIN  plugins/browserid/browserid-nl_NL.mo
  16. +95 −0 plugins/browserid/browserid-nl_NL.po
  17. BIN  plugins/browserid/browserid-sv_SE.mo
  18. +79 −0 plugins/browserid/browserid-sv_SE.po
  19. +887 −0 plugins/browserid/browserid.php
  20. +3,825 −0 plugins/browserid/cacert.pem
  21. +101 −0 plugins/browserid/login.js
  22. +361 −0 plugins/browserid/readme.txt
  23. BIN  plugins/browserid/screenshot-1.png
  24. BIN  plugins/browserid/screenshot-2.png
  25. BIN  plugins/browserid/screenshot-3.png
  26. +398 −0 plugins/browserid/wp-browserid-only-login.php
View
BIN  plugins/browserid/browserid-de_DE.mo
Binary file not shown
View
BIN  plugins/browserid/browserid-de_DE.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
77 plugins/browserid/browserid-de_DE.po
@@ -0,0 +1,77 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Verification void"
+msgstr "Überprüfung ungültig"
+
+msgid "Login failed"
+msgstr "Anmeldung fehlgeschlagen"
+
+msgid "Verification failed"
+msgstr "Überprüfung fehlgeschlagen"
+
+msgid "Verification invalid"
+msgstr "Überprüfung ungültig"
+
+msgid "BrowserID"
+msgstr "BrowserID"
+
+msgid "Administration"
+msgstr "Administration"
+
+msgid "Logout"
+msgstr "Abmelden"
+
+msgid "Custom login HTML:"
+msgstr "Benutzerdefiniertes Anmelde HTML:"
+
+msgid "Custom logout HTML:"
+msgstr "Benutzerdefiniertes Abmelde HTML:"
+
+msgid "Login redirection URL:"
+msgstr "Anmeldeweiterleitungs URL:"
+
+msgid "Default WordPress dashboard"
+msgstr "Standard WordPress Dashboard"
+
+msgid "Enable for comments:"
+msgstr "Für Kommentare aktivierenr:"
+
+msgid "Enable bbPress integration:"
+msgstr "Für bbPress aktivieren:"
+
+msgid "Enables anonymous posting implicitly"
+msgstr "Indirekt anonymes Kommentieren erlauben"
+
+msgid "Custom comment HTML:"
+msgstr "Benutzerdefiniertes Kommentar HTML:"
+
+msgid "Verification server:"
+msgstr "Bestätigungs Server:"
+
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Standard https://verifier.login.persona.org/verify"
+
+msgid "Do not check valid until time:"
+msgstr "Nicht kontrollieren Ablaufzeit:"
+
+msgid "Do not verify SSL certificate:"
+msgstr "SSL Zertifikat nicht überprüfen:"
+
+msgid "Security risk!"
+msgstr "Sicherheitsrisiko!"
+
+msgid "What is BrowserID?"
+msgstr "Was ist BrowserID?"
+
+msgid "Debug mode:"
+msgstr "Debug Modus:"
+
View
BIN  plugins/browserid/browserid-en_US.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  plugins/browserid/browserid-fr_FR.mo
Binary file not shown
View
139 plugins/browserid/browserid-fr_FR.po
@@ -0,0 +1,139 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-07-20 19:19+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-KeywordsList: _e;__\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: browserid.php:92
+msgid "Logout"
+msgstr "Se déconnecter"
+
+#: browserid.php:121
+#: browserid.php:243
+#: browserid.php:429
+msgid "Verification failed"
+msgstr "Échec de vérification"
+
+#: browserid.php:204
+msgid "Verification void"
+msgstr "Vérification vide"
+
+#: browserid.php:229
+msgid "Verification invalid"
+msgstr "Vérification invalide"
+
+#: browserid.php:302
+msgid "Login failed"
+msgstr "Échec de connexion"
+
+#: browserid.php:476
+msgid "What is Persona?"
+msgstr "Qu'est-ce que Persona ?"
+
+#: browserid.php:504
+#: browserid.php:505
+#: browserid.php:639
+msgid "Mozilla Persona"
+msgstr "Mozilla Persona"
+
+#: browserid.php:504
+msgid "Administration"
+msgstr "Administration"
+
+#: browserid.php:515
+msgid "Site name:"
+msgstr "Nom du site :"
+
+#: browserid.php:516
+msgid "Site logo:"
+msgstr "Logo du site :"
+
+#: browserid.php:517
+msgid "Custom login HTML:"
+msgstr "HTML de connexion :"
+
+#: browserid.php:518
+msgid "Custom logout HTML:"
+msgstr "HTML de déconnexion :"
+
+#: browserid.php:519
+msgid "Login redirection URL:"
+msgstr "URL de redirection après connexion :"
+
+#: browserid.php:520
+msgid "Enable for comments:"
+msgstr "Activer pour les commentaires :"
+
+#: browserid.php:521
+msgid "Enable bbPress integration:"
+msgstr "Activer l'intégration bbPress"
+
+#: browserid.php:522
+msgid "Custom comment HTML:"
+msgstr "HTML pour commenter :"
+
+#: browserid.php:523
+msgid "Verification server:"
+msgstr "Serveur de vérification :"
+
+#: browserid.php:524
+msgid "Do not check valid until time:"
+msgstr "Ne pas vérifier la date limite de validité :"
+
+#: browserid.php:525
+msgid "Do not verify SSL certificate:"
+msgstr "Ne pas vérifier le certificat SSL :"
+
+#: browserid.php:526
+msgid "Debug mode:"
+msgstr "Mode debug :"
+
+#: browserid.php:540
+msgid "Default the WordPress site name"
+msgstr "Défaut : le nom du site Wordpress"
+
+#: browserid.php:549
+msgid "Absolute path, works only with SSL"
+msgstr "Chemin absolu, obligatoirement sur SSL"
+
+#: browserid.php:574
+msgid "Default WordPress dashboard"
+msgstr "Panneau WordPress standard"
+
+#: browserid.php:591
+msgid "Enables anonymous posting implicitly"
+msgstr "Active implicitement les commentaires anonymes"
+
+#: browserid.php:608
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Défaut https://verifier.login.persona.org/verify"
+
+#: browserid.php:616
+#: browserid.php:624
+#: browserid.php:632
+msgid "Security risk!"
+msgstr "Risque de sécurité !"
+
+#: browserid.php:644
+msgid "Save Changes"
+msgstr "Sauvegarder les changements"
+
+#: browserid.php:722
+msgid "Mozilla Persona login button"
+msgstr "Bouton de connexion Mozilla Persona"
+
+#: browserid.php:745
+msgid "Title:"
+msgstr "Titre :"
+
+#~ msgid "BrowserID"
+#~ msgstr "Persona"
View
BIN  plugins/browserid/browserid-it_IT.mo
Binary file not shown
View
BIN  plugins/browserid/browserid-it_IT.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
140 plugins/browserid/browserid-it_IT.po
@@ -0,0 +1,140 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-07-20 19:19+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-KeywordsList: _e;__\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: browserid.php:92
+msgid "Logout"
+msgstr "Disconnettiti"
+
+#: browserid.php:121
+#: browserid.php:243
+#: browserid.php:429
+msgid "Verification failed"
+msgstr "Convalida fallita"
+
+#: browserid.php:204
+msgid "Verification void"
+msgstr "Convalida nulla"
+
+#: browserid.php:229
+msgid "Verification invalid"
+msgstr "Convalida non valida"
+
+#: browserid.php:302
+msgid "Login failed"
+msgstr "Errore di connessione"
+
+#: browserid.php:476
+msgid "What is Persona?"
+msgstr "Che cos'è Persona?"
+
+#: browserid.php:504
+#: browserid.php:505
+#: browserid.php:639
+msgid "Mozilla Persona"
+msgstr "Mozilla Persona"
+
+#: browserid.php:504
+msgid "Administration"
+msgstr "Amministrazione"
+
+#: browserid.php:515
+msgid "Site name:"
+msgstr "Nome del sito:"
+
+#: browserid.php:516
+msgid "Site logo:"
+msgstr "Logo del sito:"
+
+#: browserid.php:517
+msgid "Custom login HTML:"
+msgstr "HTML personalizzato per la connessione:"
+
+#: browserid.php:518
+msgid "Custom logout HTML:"
+msgstr "HTML personalizzato per la disconnessione:"
+
+#: browserid.php:519
+msgid "Login redirection URL:"
+msgstr "URL di reindirizzamento dopo la connessione:"
+
+#: browserid.php:520
+msgid "Enable for comments:"
+msgstr "Attiva per i commenti:"
+
+#: browserid.php:521
+msgid "Enable bbPress integration:"
+msgstr "Attiva l'integrazione bbPress"
+
+#: browserid.php:522
+msgid "Custom comment HTML:"
+msgstr "HTML personalizzato per i commenti:"
+
+#: browserid.php:523
+msgid "Verification server:"
+msgstr "Server di convalida:"
+
+#: browserid.php:524
+msgid "Do not check valid until time:"
+msgstr "Non controllare la scadenza di validità:"
+
+#: browserid.php:525
+msgid "Do not verify SSL certificate:"
+msgstr "Non controllare il certificato SSL:"
+
+#: browserid.php:526
+msgid "Debug mode:"
+msgstr "Modalità di debug:"
+
+#: browserid.php:540
+msgid "Default the WordPress site name"
+msgstr "Predefinito Nome del sito di Wordpress"
+
+#: browserid.php:549
+msgid "Absolute path, works only with SSL"
+msgstr "Percorso assoluto, necessario per SSL"
+
+#: browserid.php:574
+msgid "Default WordPress dashboard"
+msgstr "Predefinito Bacheca Wordpress"
+
+#: browserid.php:591
+msgid "Enables anonymous posting implicitly"
+msgstr "Attiva implicitamente i commenti anonimi"
+
+#: browserid.php:608
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Predefinito https://verifier.login.persona.org/verify"
+
+#: browserid.php:616
+#: browserid.php:624
+#: browserid.php:632
+msgid "Security risk!"
+msgstr "Rischio di sicurezza!"
+
+#: browserid.php:644
+msgid "Save Changes"
+msgstr "Salva le Modifiche"
+
+#: browserid.php:722
+msgid "Mozilla Persona login button"
+msgstr "Pulsante di accesso di Mozilla Persona"
+
+#: browserid.php:745
+msgid "Title:"
+msgstr "Titolo:"
+
+msgid "BrowserID"
+msgstr "Persona"
+
View
BIN  plugins/browserid/browserid-logo.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  plugins/browserid/browserid-nb_NO.mo
Binary file not shown
View
80 plugins/browserid/browserid-nb_NO.po
@@ -0,0 +1,80 @@
+# Copyright (C) 2010 Marcel Bokhorst
+# This file is distributed under the same license as the Add Link to Facebook package.
+msgid ""
+msgstr ""
+"Project-Id-Version: BrowserID\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/add-link-to-facebook\n"
+"POT-Creation-Date: 2011-07-16 12:26:46+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2012-07-27 11:56+0100\n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: Marcel Bokhorst\n"
+"X-Poedit-Language: Dutch\n"
+"X-Poedit-Country: BELGIUM\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Verification void"
+msgstr "Verifisering tom"
+
+msgid "Login failed"
+msgstr "Logg inn feilet"
+
+msgid "Verification failed"
+msgstr "Verifisering feilet"
+
+msgid "Verification invalid"
+msgstr "Verifisering ugyldig"
+
+msgid "BrowserID"
+msgstr "BrowserID"
+
+msgid "Administration"
+msgstr "Administrasjon"
+
+msgid "Logout"
+msgstr "Logg ut"
+
+msgid "Custom login HTML:"
+msgstr "Tilpasset logg inn HTML:"
+
+msgid "Custom logout HTML:"
+msgstr "Tilpasset logg ut HTML:"
+
+msgid "Verification server:"
+msgstr "Verifisering server:"
+
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Standard https://verifier.login.persona.org/verify"
+
+msgid "Do not check valid until time:"
+msgstr "Ikke sjekk gyldig til tid:"
+
+msgid "Do not verify SSL certificate:"
+msgstr "Ikke kontroller SSL-sertifikat:"
+
+msgid "Security risk!"
+msgstr "Sikkerhetsrisiko!"
+
+msgid "Debug mode:"
+msgstr "Debug modus:"
+
+msgid "Login redirection URL:"
+msgstr "Logg inn omdirigering URL:"
+
+msgid "Default WordPress dashboard"
+msgstr "Standard WordPress kontrollpanel"
+
+msgid "What is BrowserID?"
+msgstr "Hva er BrowserID?"
+
+msgid "Enable for comments:"
+msgstr "Aktiver for kommentarer:"
+
+msgid "Enable bbPress integration:"
+msgstr "Aktiver bbPress integrasjon:"
+
+msgid "Enables anonymous posting implicitly"
+msgstr "Aktiverer anonym postering ubetinget"
+
View
BIN  plugins/browserid/browserid-nl_BE.mo
Binary file not shown
View
95 plugins/browserid/browserid-nl_BE.po
@@ -0,0 +1,95 @@
+# Copyright (C) 2010 Marcel Bokhorst
+# This file is distributed under the same license as the Add Link to Facebook package.
+msgid ""
+msgstr ""
+"Project-Id-Version: BrowserID\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/add-link-to-facebook\n"
+"POT-Creation-Date: 2011-07-16 12:26:46+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2012-07-27 11:56+0100\n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: Marcel Bokhorst\n"
+"X-Poedit-Language: Dutch\n"
+"X-Poedit-Country: BELGIUM\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Verification void"
+msgstr "Verificatie leeg"
+
+msgid "Login failed"
+msgstr "Login mislukt"
+
+msgid "Verification failed"
+msgstr "Verificatie mislukt"
+
+msgid "Verification invalid"
+msgstr "Verificatie ongeldig"
+
+msgid "BrowserID"
+msgstr "BrowserID"
+
+msgid "Administration"
+msgstr "Administratie"
+
+msgid "Logout"
+msgstr "Log uit"
+
+msgid "Custom login HTML:"
+msgstr "Maatwerk inlog HTML:"
+
+msgid "Custom logout HTML:"
+msgstr "Maatwerk uitlog HTML:"
+
+msgid "Login redirection URL:"
+msgstr "Login omleiding URL:"
+
+msgid "Default WordPress dashboard"
+msgstr "Standaard WordPress dashboard"
+
+msgid "Enable for comments:"
+msgstr "Zet aan voor commentaar:"
+
+msgid "Enable bbPress integration:"
+msgstr "Zet bbPress integratie aan:"
+
+msgid "Enables anonymous posting implicitly"
+msgstr "Zet impliciet anonieme berichten aan"
+
+msgid "Custom comment HTML:"
+msgstr "Maatwerk commentaar HTML:"
+
+msgid "Verification server:"
+msgstr "Verificatie server:"
+
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Standaard https://verifier.login.persona.org/verify"
+
+msgid "Do not check valid until time:"
+msgstr "Controleer geldig tot tijd niet:"
+
+msgid "Do not verify SSL certificate:"
+msgstr "Controleer SSL certificaat niet:"
+
+msgid "Security risk!"
+msgstr "Veiligheidsrisico!"
+
+msgid "What is BrowserID?"
+msgstr "Wat is BrowserID?"
+
+msgid "Debug mode:"
+msgstr "Debug modus:"
+
+msgid "Site name:"
+msgstr "Website naam:"
+
+msgid "Site logo:"
+msgstr "Website logo:"
+
+msgid "Absolute path, works only with SSL"
+msgstr "Absoluut pad, werkt alleen met SSL"
+
+msgid "Default the WordPress site name"
+msgstr "Standaard de WordPress website naam"
+
View
BIN  plugins/browserid/browserid-nl_NL.mo
Binary file not shown
View
95 plugins/browserid/browserid-nl_NL.po
@@ -0,0 +1,95 @@
+# Copyright (C) 2010 Marcel Bokhorst
+# This file is distributed under the same license as the Add Link to Facebook package.
+msgid ""
+msgstr ""
+"Project-Id-Version: BrowserID\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/add-link-to-facebook\n"
+"POT-Creation-Date: 2011-07-16 12:26:46+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2012-07-27 11:56+0100\n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: Marcel Bokhorst\n"
+"X-Poedit-Language: Dutch\n"
+"X-Poedit-Country: NETHERLANDS\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Verification void"
+msgstr "Verificatie leeg"
+
+msgid "Login failed"
+msgstr "Login mislukt"
+
+msgid "Verification failed"
+msgstr "Verificatie mislukt"
+
+msgid "Verification invalid"
+msgstr "Verificatie ongeldig"
+
+msgid "BrowserID"
+msgstr "BrowserID"
+
+msgid "Administration"
+msgstr "Administratie"
+
+msgid "Logout"
+msgstr "Log uit"
+
+msgid "Custom login HTML:"
+msgstr "Maatwerk inlog HTML:"
+
+msgid "Custom logout HTML:"
+msgstr "Maatwerk uitlog HTML:"
+
+msgid "Login redirection URL:"
+msgstr "Login omleiding URL:"
+
+msgid "Default WordPress dashboard"
+msgstr "Standaard WordPress dashboard"
+
+msgid "Enable for comments:"
+msgstr "Zet aan voor commentaar:"
+
+msgid "Enable bbPress integration:"
+msgstr "Zet bbPress integratie aan:"
+
+msgid "Enables anonymous posting implicitly"
+msgstr "Zet impliciet anonieme berichten aan"
+
+msgid "Custom comment HTML:"
+msgstr "Maatwerk commentaar HTML:"
+
+msgid "Verification server:"
+msgstr "Verificatie server:"
+
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Standaard https://verifier.login.persona.org/verify"
+
+msgid "Do not check valid until time:"
+msgstr "Controleer geldig tot tijd niet:"
+
+msgid "Do not verify SSL certificate:"
+msgstr "Controleer SSL certificaat niet:"
+
+msgid "Security risk!"
+msgstr "Veiligheidsrisico!"
+
+msgid "What is BrowserID?"
+msgstr "Wat is BrowserID?"
+
+msgid "Debug mode:"
+msgstr "Debug modus:"
+
+msgid "Site name:"
+msgstr "Website naam:"
+
+msgid "Site logo:"
+msgstr "Website logo:"
+
+msgid "Absolute path, works only with SSL"
+msgstr "Absoluut pad, werkt alleen met SSL"
+
+msgid "Default the WordPress site name"
+msgstr "Standaard de WordPress website naam"
+
View
BIN  plugins/browserid/browserid-sv_SE.mo
Binary file not shown
View
79 plugins/browserid/browserid-sv_SE.po
@@ -0,0 +1,79 @@
+# This file is public domain
+msgid ""
+msgstr ""
+"Project-Id-Version: BrowserID\n"
+"Report-Msgid-Bugs-To: http://wendt.se/blog/\n"
+"POT-Creation-Date: 2011-07-16 12:26:46+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2012-07-27 11:56+0100\n"
+"Last-Translator: Marcel Bokhorst\n"
+"Language-Team: \n"
+"X-Poedit-Language: Swedish\n"
+"X-Poedit-Country: SWEDEN\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Verification void"
+msgstr "Verifikat saknas"
+
+msgid "Login failed"
+msgstr "Inloggning misslyckades"
+
+msgid "Verification failed"
+msgstr "Verifiering misslyckades"
+
+msgid "Verification invalid"
+msgstr "Verifiering ogiltig"
+
+msgid "BrowserID"
+msgstr "BrowserID"
+
+msgid "Administration"
+msgstr "Administration"
+
+msgid "Logout"
+msgstr "Logga ut"
+
+msgid "Custom login HTML:"
+msgstr "Anpassad inloggningskod (HTML):"
+
+msgid "Custom logout HTML:"
+msgstr "Anpassad utloggningskod (HTML):"
+
+msgid "Verification server:"
+msgstr "Verifieringsserver:"
+
+msgid "Default https://verifier.login.persona.org/verify"
+msgstr "Grundinställning: https://verifier.login.persona.org/verify"
+
+msgid "Do not check valid until time:"
+msgstr "Kontrollera inte giltighetstid:"
+
+msgid "Do not verify SSL certificate:"
+msgstr "Kontrollera inte SSL-certifikat:"
+
+msgid "Security risk!"
+msgstr "Säkerhetsrisk!"
+
+msgid "Debug mode:"
+msgstr "Felavsökningsläge:"
+
+msgid "Login redirection URL:"
+msgstr "Omdirigerings-URL vid inloggning:"
+
+msgid "Default WordPress dashboard"
+msgstr "WordPress kontrollpanel"
+
+msgid "What is BrowserID?"
+msgstr "Vad är BrowserID?"
+
+msgid "Enable for comments:"
+msgstr "Aktivera för kommentarer:"
+
+msgid "Enable bbPress integration:"
+msgstr "Aktivera bbPress-integration:"
+
+msgid "Enables anonymous posting implicitly"
+msgstr "Aktiverar (implicit) anonyma inlägg"
+
View
887 plugins/browserid/browserid.php
@@ -0,0 +1,887 @@
+<?php
+/*
+Plugin Name: Mozilla Persona
+Plugin URI: http://wordpress.org/extend/plugins/browserid/
+Description: Mozilla Persona, the safest & easiest way to sign in
+Version: 0.34
+Author: Marcel Bokhorst
+Author URI: http://blog.bokhorst.biz/about/
+*/
+
+/*
+ Copyright (c) 2011, 2012 Marcel Bokhorst
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#error_reporting(E_ALL);
+
+// Check PHP version
+if (version_compare(PHP_VERSION, '5.0.0', '<'))
+ die('Mozilla Persona requires at least PHP 5, installed version is ' . PHP_VERSION);
+
+// Define constants
+define('c_bid_text_domain', 'browserid');
+define('c_bid_option_version', 'bid_version');
+define('c_bid_option_request', 'bid_request');
+define('c_bid_option_response', 'bid_response');
+
+// Define class
+if (!class_exists('M66BrowserID')) {
+ class M66BrowserID {
+ // Class variables
+ var $debug = null;
+
+ // Constructor
+ function __construct() {
+ // Get plugin options
+ $options = get_option('browserid_options');
+
+ // Debug mode
+ $this->debug = (isset($options['browserid_debug']) && $options['browserid_debug']);
+
+ // Register de-activation
+ register_deactivation_hook(__FILE__, array(&$this, 'Deactivate'));
+
+ // Register actions & filters
+ add_action('init', array(&$this, 'Init'), 0);
+ add_filter('login_message', array(&$this, 'Login_message'));
+ add_action('login_form', array(&$this, 'Login_form'));
+ add_action('widgets_init', create_function('', 'return register_widget("BrowserID_Widget");'));
+ if (is_admin()) {
+ add_action('admin_menu', array(&$this, 'Admin_menu'));
+ add_action('admin_init', array(&$this, 'Admin_init'));
+ }
+ add_action('http_api_curl', array(&$this, 'http_api_curl'));
+ add_action('admin_bar_menu', array(&$this, 'Admin_toolbar'), 999);
+ add_action('update_option_browserid_options', array(&$this, 'Update_browserid_options'));
+ add_action('generate_rewrite_rules', array(&$this, 'Generate_rewrite_rules'));
+
+ // Comment integration
+ if (isset($options['browserid_comments']) && $options['browserid_comments']) {
+ add_filter('comment_form_default_fields', array(&$this, 'Comment_form_fields'));
+ add_action('comment_form', array(&$this, 'Comment_form'));
+ }
+
+ // bbPress integration
+ if (isset($options['browserid_bbpress']) && $options['browserid_bbpress']) {
+ add_action('bbp_allow_anonymous', create_function('', 'return !is_user_logged_in();'));
+ add_action('bbp_is_anonymous', create_function('', 'return !is_user_logged_in();'));
+ add_action('bbp_theme_before_topic_form_submit_button', array(&$this, 'bbPress_submit'));
+ add_action('bbp_theme_before_reply_form_submit_button', array(&$this, 'bbPress_submit'));
+ }
+
+ // Shortcode
+ add_shortcode('browserid_loginout', array(&$this, 'Shortcode_loginout'));
+ add_shortcode('mozilla_persona', array(&$this, 'Shortcode_loginout'));
+ }
+
+ // Handle plugin activation
+ function Activate() {
+ global $wpdb;
+ $version = get_option(c_bid_option_version);
+ if ($version < 2) {
+ $options = get_option('browserid_options');
+ $options['browserid_logout_html'] = __('Logout', c_bid_text_domain);
+ update_option('browserid_options', $options);
+ }
+ update_option(c_bid_option_version, 2);
+ }
+
+ // Handle plugin deactivation
+ function Deactivate() {
+ // TODO: delete options
+ }
+
+ // Initialization
+ function Init() {
+ global $user_email;
+ get_currentuserinfo();
+
+ // I18n
+ load_plugin_textdomain(c_bid_text_domain, false, dirname(plugin_basename(__FILE__)));
+
+ // Check for assertion
+ self::Check_assertion();
+
+ // Enqueue BrowserID scripts
+ wp_register_script('browserid', 'https://login.persona.org/include.js', array(), '', true);
+ wp_register_script('browserid_common', plugins_url('login.js', __FILE__), array('jquery', 'browserid'), '', true);
+
+ $redirect = (isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : null);
+ $browserid_error = (isset($_REQUEST['browserid_error']) ? $_REQUEST['browserid_error'] : null);
+ $browserid_failed = __('Verification failed', c_bid_text_domain);
+ $data_array = array(
+ 'siteurl' => get_site_url(null, '/'),
+ 'login_redirect' => $redirect,
+ 'error' => $browserid_error,
+ 'failed' => $failed,
+ // If the user posted a comment and they are not logged in to WordPress
+ // that means the user used Persona only to submit a comment. Force a
+ // persona logout.
+ 'logout' => !is_user_logged_in(),
+ 'sitename' => self::Get_sitename(),
+ 'sitelogo' => self::Get_sitelogo(),
+ 'logout_redirect' => wp_logout_url(),
+ 'logged_in_user' => $user_email
+ );
+ wp_localize_script( 'browserid_common', 'browserid_common', $data_array );
+ wp_enqueue_script('browserid_common');
+ }
+
+ function Check_assertion() {
+ // Workaround for Microsoft IIS bug
+ if (isset($_REQUEST['?browserid_assertion']))
+ $_REQUEST['browserid_assertion'] = $_REQUEST['?browserid_assertion'];
+
+ // Verify received assertion
+ if (isset($_REQUEST['browserid_assertion'])) {
+ // Get options
+ $options = get_option('browserid_options');
+
+ // Get assertion/audience/remember me
+ $assertion = $_REQUEST['browserid_assertion'];
+ $audience = $_SERVER['HTTP_HOST'];
+
+ $rememberme = (isset($_REQUEST['rememberme']) && $_REQUEST['rememberme'] == 'true');
+
+ // Get verification server URL
+ if (isset($options['browserid_vserver']) && $options['browserid_vserver'])
+ $vserver = $options['browserid_vserver'];
+ else
+ $vserver = 'https://verifier.login.persona.org/verify';
+
+ // No SSL verify?
+ $noverify = (isset($options['browserid_noverify']) && $options['browserid_noverify']);
+
+ // Build arguments
+ $args = array(
+ 'method' => 'POST',
+ 'timeout' => 30,
+ 'redirection' => 0,
+ 'httpversion' => '1.0',
+ 'blocking' => true,
+ 'headers' => array(),
+ 'body' => array(
+ 'assertion' => $assertion,
+ 'audience' => $audience
+ ),
+ 'cookies' => array(),
+ 'sslverify' => !$noverify
+ );
+ if ($this->debug)
+ update_option(c_bid_option_request, $vserver . ' ' . print_r($args, true));
+
+ // Verify assertion
+ $response = wp_remote_post($vserver, $args);
+
+ // Check result
+ if (is_wp_error($response)) {
+ // Debug info
+ $message = __($response->get_error_message());
+ if ($this->debug) {
+ update_option(c_bid_option_response, $response);
+ header('Content-type: text/plain');
+ echo $message . PHP_EOL;
+ print_r($response);
+ exit();
+ }
+ else
+ self::Handle_error($message);
+ }
+ else {
+ // Persist debug info
+ if ($this->debug) {
+ $response['vserver'] = $vserver;
+ $response['audience'] = $audience;
+ $response['rememberme'] = $rememberme;
+ update_option(c_bid_option_response, $response);
+ }
+
+ // Decode response
+ $result = json_decode($response['body'], true);
+
+ // Check result
+ if (empty($result) || empty($result['status'])) {
+ // No result or status
+ $message = __('Verification void', c_bid_text_domain);
+ if ($this->debug) {
+ header('Content-type: text/plain');
+ echo $message . PHP_EOL;
+ echo $response['response']['message'] . PHP_EOL;
+ print_r($response);
+ exit();
+ }
+ else
+ self::Handle_error($message);
+ }
+ else if ($result['status'] == 'okay' &&
+ $result['audience'] == $audience) {
+ // Check expiry time
+ $novalid = (isset($options['browserid_novalid']) && $options['browserid_novalid']);
+ if ($novalid || time() < $result['expires'] / 1000)
+ {
+ // Succeeded
+ if (self::Is_comment())
+ self::Handle_comment($result);
+ else
+ self::Handle_login($result, $rememberme);
+ }
+ else {
+ $message = __('Verification invalid', c_bid_text_domain);
+ if ($this->debug) {
+ header('Content-type: text/plain');
+ echo $message . PHP_EOL;
+ echo 'time=' . time() . PHP_EOL;
+ print_r($result);
+ exit();
+ }
+ else
+ self::Handle_error($message);
+ }
+ }
+ else {
+ // Failed
+ $message = __('Verification failed', c_bid_text_domain);
+ if (isset($result['reason']))
+ $message .= ': ' . __($result['reason'], c_bid_text_domain);
+ if ($this->debug) {
+ header('Content-type: text/plain');
+ echo $message . PHP_EOL;
+ echo 'audience=' . $audience . PHP_EOL;
+ echo 'vserver=' . parse_url($vserver, PHP_URL_HOST) . PHP_EOL;
+ echo 'time=' . time() . PHP_EOL;
+ print_r($result);
+ exit();
+ }
+ else
+ self::Handle_error($message);
+ }
+ }
+ }
+ }
+
+ // Determine if login or comment
+ function Is_comment() {
+ $options = get_option('browserid_options');
+ if ((isset($options['browserid_comments']) && $options['browserid_comments']) ||
+ (isset($options['browserid_bbpress']) && $options['browserid_bbpress']))
+ return (isset($_REQUEST['browserid_comment']) ? $_REQUEST['browserid_comment'] : null);
+ else
+ return null;
+ }
+
+ // Generic error handling
+ function Handle_error($message) {
+ $post_id = self::Is_comment();
+ $redirect = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : null;
+ $url = ($post_id ? get_permalink($post_id) : wp_login_url($redirect));
+ $url .= (strpos($url, '?') === false ? '?' : '&') . 'browserid_error=' . urlencode($message);
+ if ($post_id)
+ $url .= '#browserid_' . $post_id;
+ wp_redirect($url);
+ exit();
+ }
+
+ // Process login
+ function Handle_login($result, $rememberme) {
+ // Login
+ $user = self::Login_by_email($result['email'], $rememberme);
+ if ($user) {
+ // Beam me up, Scotty!
+ if (isset($result['redirect_to']))
+ $redirect_to = $result['redirect_to'];
+ else if (isset($options['browserid_login_redir']) && $options['browserid_login_redir'])
+ $redirect_to = $options['browserid_login_redir'];
+ else if (isset($_REQUEST['redirect_to']))
+ $redirect_to = $_REQUEST['redirect_to'];
+ else
+ $redirect_to = admin_url();
+ $redirect_to = apply_filters('login_redirect', $redirect_to, '', $user);
+ wp_redirect($redirect_to);
+ exit();
+ }
+ else {
+ // User not found? Try to create them!
+ if ( !get_option('users_can_register') ) {
+ $message = __('User registration is currently not allowed');
+ self::Handle_error($message);
+ exit();
+ } else {
+ $user_id = wp_create_user($result['email'], 'password', $result['email']);
+
+ if ($user_id) {
+ if (isset($options['browserid_newuser_redir']) && $options['browserid_newuser_redir']) {
+ $result['redirect_to'] = $options['browserid_newuser_redir'];
+ } else {
+ $result['redirect_to'] = admin_url() . 'profile.php';
+ }
+ self::Handle_login($result, $rememberme);
+ } else {
+ $message = __('New user creation failed', c_bid_text_domain);
+ $message .= ' (' . $result['email'] . ')';
+ if ($this->debug) {
+ header('Content-type: text/plain');
+ echo $message . PHP_EOL;
+ print_r($result);
+ }
+ else
+ self::Handle_error($message);
+
+ exit();
+ }
+ }
+ }
+ }
+
+ // Login user using e-mail address
+ function Login_by_email($email, $rememberme) {
+ global $user;
+ $user = null;
+
+ $userdata = get_user_by('email', $email);
+ if ($userdata) {
+ $user = new WP_User($userdata->ID);
+ wp_set_current_user($userdata->ID, $userdata->user_login);
+ wp_set_auth_cookie($userdata->ID, $rememberme);
+ do_action('wp_login', $userdata->user_login);
+ }
+ return $user;
+ }
+
+ // Process comment
+ function Handle_comment($result) {
+ // Initialize
+ $email = $result['email'];
+ $author = $_REQUEST['author'];
+ $url = $_REQUEST['url'];
+
+ // Check WordPress user
+ $userdata = get_user_by('email', $email);
+ if ($userdata) {
+ $author = $userdata->display_name;
+ $url = $userdata->user_url;
+ }
+ else if (empty($author) || empty($url)) {
+ // Check Gravatar profile
+ $response = wp_remote_get('http://www.gravatar.com/' . md5($email) . '.json');
+ if (!is_wp_error($response)) {
+ $json = json_decode($response['body']);
+ if (empty($author))
+ $author = $json->entry[0]->displayName;
+
+ if (empty($url))
+ $url = $json->entry[0]->profileUrl;
+ }
+ }
+
+ if (empty($author)) {
+ // Use first part of e-mail
+ $parts = explode('@', $email);
+ $author = $parts[0];
+ }
+
+
+ // Update post variables
+ $_POST['author'] = $author;
+ $_POST['email'] = $email;
+ $_POST['url'] = $url;
+ // bbPress
+ $_POST['bbp_anonymous_name'] = $author;
+ $_POST['bbp_anonymous_email'] = $email;
+ $_POST['bbp_anonymous_website'] = $url;
+ }
+
+ // Filter login error message
+ function Login_message($message) {
+ if (isset($_REQUEST['browserid_error']))
+ $message .= '<div id="login_error"><strong>' . stripslashes($_REQUEST['browserid_error']) . '</strong></div>';
+ return $message;
+ }
+
+ // Add login button to login page
+ function Login_form() {
+ echo '<p>' . self::Get_loginout_html(false) . '<br /><br /></p>';
+ }
+
+ // bbPress integration
+ function bbPress_submit() {
+ $id = bbp_get_topic_id();
+ if (empty($id))
+ $id = bbp_get_forum_id();
+ self::Comment_form($id);
+ }
+
+ // Imply anonymous commenting
+ function bbPress_anonymous() {
+ return !is_user_logged_in();
+ }
+
+ // Get rid of the email field in the comment form
+ function Comment_form_fields($fields) {
+ unset($fields['email']);
+ return $fields;
+ }
+
+ // Add BrowserID to comment form
+ function Comment_form($post_id) {
+ if (!is_user_logged_in()) {
+ // Get link content
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_comment_html']))
+ $html = '<img src="' . self::Get_image_url() . '" style="border: none; vertical-align: middle; margin-right: 5px;" />';
+ else
+ $html = $options['browserid_comment_html'];
+
+ // Render link
+ echo '<a href="#" id="browserid_' . $post_id . '" onclick="return browserid_comment(' . $post_id . ');" title="Mozilla Persona" class="browserid">' . $html . '</a>';
+ echo self::What_is();
+
+ // Display error message
+ if (isset($_REQUEST['browserid_error'])) {
+ echo '<span style="color: red; font-weight: bold; margin: 10px; vertical-align: top;">';
+ echo htmlspecialchars(stripslashes($_REQUEST['browserid_error']), ENT_QUOTES, get_bloginfo('charset'));
+ echo '</span>';
+ }
+ }
+ }
+
+ // Shortcode "mozilla_persona"
+ function Shortcode_loginout() {
+ return self::Get_loginout_html();
+ }
+
+ // Git spiffy logout text for Persona
+ function Get_logout_text() {
+ // User logged in
+ if (empty($options['browserid_logout_html']))
+ $html = __('Logout');
+ else
+ $html = $options['browserid_logout_html'];
+
+ return $html;
+ }
+
+
+ // Build HTML for login/out button/link
+ function Get_loginout_html($check_login = true) {
+ $options = get_option('browserid_options');
+
+ if ($check_login && is_user_logged_in()) {
+ // User logged in
+ if (empty($options['browserid_logout_html']))
+ $html = '';
+ else
+ $html = $options['browserid_logout_html'];
+ // Simple link
+ if (empty($html))
+ return '';
+ else
+ return '<a href="' . wp_logout_url() . '">' . $html . '</a>';
+ }
+ else {
+ // User not logged in
+ if (empty($options['browserid_login_html']))
+ $html = '<img src="' . self::Get_image_url() . '" style="border: 0;" />';
+ else
+ $html = $options['browserid_login_html'];
+ // Button
+ $html = '<a href="#" onclick="return browserid_login();" title="Mozilla Persona" class="browserid">' . $html . '</a>';
+ $html .= '<br />' . self::What_is();
+
+ return $html;
+ }
+ }
+
+ // Get localized image URL
+ function Get_image_url() {
+ $image_url = plugins_url('browserid-en_US.png', __FILE__);
+ $locale = get_bloginfo('language');
+ $locale = str_replace('-', '_', $locale);
+ if (!empty($locale)) {
+ $image = 'browserid-' . $locale . '.png';
+ $image_file = dirname(__FILE__) . '/' . $image;
+ if (file_exists($image_file))
+ $image_url = plugins_url($image, __FILE__);
+ }
+ return $image_url;
+ }
+
+ function What_is() {
+ return '<a href="https://login.persona.org/" target="_blank" style="font-size: smaller;">' . __('What is Persona?', c_bid_text_domain) . '</a>';
+ }
+
+ // Get (customized) site name
+ function Get_sitename() {
+ $name = null;
+ $options = get_option('browserid_options');
+ if (isset($options['browserid_sitename']))
+ $name = $options['browserid_sitename'];
+ if (empty($name))
+ $name = get_bloginfo('name');
+ return $name;
+ }
+
+ // Get site logo
+ function Get_sitelogo() {
+ $options = get_option('browserid_options');
+ // sitelogo is only valid with SSL connections
+ if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443)
+ if (isset($options['browserid_sitelogo']))
+ return $options['browserid_sitelogo'];
+ return '';
+ }
+
+ // Override logout on site menu
+ function Admin_toolbar($wp_toolbar) {
+ $wp_toolbar->remove_node('logout');
+ $wp_toolbar->add_node(array(
+ 'id' => 'logout',
+ 'title' => self::Get_logout_text(),
+ 'parent' => 'user-actions',
+ 'href' => '#',
+ 'meta' => array(
+ 'onclick' => 'return browserid_logout()'
+ )
+ ));
+ }
+
+
+ // Register options page
+ function Admin_menu() {
+ if (function_exists('add_options_page'))
+ add_options_page(
+ __('Mozilla Persona', c_bid_text_domain) . ' ' . __('Administration', c_bid_text_domain),
+ __('Mozilla Persona', c_bid_text_domain),
+ 'manage_options',
+ __FILE__,
+ array(&$this, 'Administration'));
+ }
+
+ // Define options page
+ function Admin_init() {
+ register_setting('browserid_options', 'browserid_options', null);
+ add_settings_section('plugin_main', null, array(&$this, 'Options_main'), 'browserid');
+ add_settings_field('browserid_sitename', __('Site name:', c_bid_text_domain), array(&$this, 'Option_sitename'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_sitelogo', __('Site logo:', c_bid_text_domain), array(&$this, 'Option_sitelogo'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_only_auth', __('Disable non-Persona logins:', c_bid_text_domain), array(&$this, 'Option_browserid_only_auth'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_login_html', __('Custom login HTML:', c_bid_text_domain), array(&$this, 'Option_login_html'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_logout_html', __('Custom logout HTML:', c_bid_text_domain), array(&$this, 'Option_logout_html'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_newuser_redir', __('New user redirection URL:', c_bid_text_domain), array(&$this, 'Option_newuser_redir'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_login_redir', __('Login redirection URL:', c_bid_text_domain), array(&$this, 'Option_login_redir'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_comments', __('Enable for comments:', c_bid_text_domain), array(&$this, 'Option_comments'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_bbpress', __('Enable bbPress integration:', c_bid_text_domain), array(&$this, 'Option_bbpress'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_comment_html', __('Custom comment HTML:', c_bid_text_domain), array(&$this, 'Option_comment_html'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_vserver', __('Verification server:', c_bid_text_domain), array(&$this, 'Option_vserver'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_novalid', __('Do not check valid until time:', c_bid_text_domain), array(&$this, 'Option_novalid'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_noverify', __('Do not verify SSL certificate:', c_bid_text_domain), array(&$this, 'Option_noverify'), 'browserid', 'plugin_main');
+ add_settings_field('browserid_debug', __('Debug mode:', c_bid_text_domain), array(&$this, 'Option_debug'), 'browserid', 'plugin_main');
+ }
+
+ function Update_browserid_options() {
+ // force a flush of the rewrite rules cache because the
+ // "browserid_only_auth" rule may have changed
+ global $wp_rewrite;
+ $wp_rewrite->flush_rules();
+ }
+
+ // Generate rewrite rules
+ function Generate_rewrite_rules() {
+ // If the site only allows Persona logins, show the
+ // specialized signin page.
+ $options = get_option('browserid_options');
+ if (isset($options['browserid_only_auth']) && $options['browserid_only_auth']) {
+
+ global $wp_rewrite;
+ $redirect_to = "wp-content/plugins/browserid/wp-browserid-only-login.php";
+ $non_wp_rules = array(
+ 'wp-login.php(.*)$' => $redirect_to
+ );
+
+ $wp_rewrite->non_wp_rules = $non_wp_rules + $wp_rewrite->non_wp_rules;
+ }
+ }
+
+ // Main options section
+ function Options_main() {
+ // Empty
+ }
+
+ // Site name option
+ function Option_sitename() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_sitename']))
+ $options['browserid_sitename'] = null;
+ echo "<input id='browserid_sitename' name='browserid_options[browserid_sitename]' type='text' size='100' value='{$options['browserid_sitename']}' />";
+ echo '<br />' . __('Default the WordPress site name', c_bid_text_domain);
+ }
+
+ // Site logo option
+ function Option_sitelogo() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_sitelogo']))
+ $options['browserid_sitelogo'] = null;
+ echo "<input id='browserid_sitelogo' name='browserid_options[browserid_sitelogo]' type='text' size='100' value='{$options['browserid_sitelogo']}' />";
+ echo '<br />' . __('Absolute path, works only with SSL', c_bid_text_domain);
+ }
+
+ // Login HTML option
+ function Option_login_html() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_login_html']))
+ $options['browserid_login_html'] = null;
+ echo "<input id='browserid_login_html' name='browserid_options[browserid_login_html]' type='text' size='100' value='{$options['browserid_login_html']}' />";
+ }
+
+ // Logout HTML option
+ function Option_logout_html() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_logout_html']))
+ $options['browserid_logout_html'] = null;
+ echo "<input id='browserid_logout_html' name='browserid_options[browserid_logout_html]' type='text' size='100' value='{$options['browserid_logout_html']}' />";
+ }
+
+ // New user redir URL option
+ function Option_newuser_redir() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_newuser_redir']))
+ $options['browserid_newuser_redir'] = null;
+ echo "<input id='browserid_newuser_redir' name='browserid_options[browserid_newuser_redir]' type='text' size='100' value='{$options['browserid_newuser_redir']}' />";
+ echo '<br />' . __('Default User Profile', c_bid_text_domain);
+ }
+
+ // Login redir URL option
+ function Option_login_redir() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_login_redir']))
+ $options['browserid_login_redir'] = null;
+ echo "<input id='browserid_login_redir' name='browserid_options[browserid_login_redir]' type='text' size='100' value='{$options['browserid_login_redir']}' />";
+ echo '<br />' . __('Default WordPress dashboard', c_bid_text_domain);
+ }
+
+ // Enable comments integration
+ function Option_comments() {
+ $options = get_option('browserid_options');
+ $chk = (isset($options['browserid_comments']) && $options['browserid_comments'] ? " checked='checked'" : '');
+ echo "<input id='browserid_comments' name='browserid_options[browserid_comments]' type='checkbox'" . $chk. "/>";
+ echo '<strong>Beta!</strong>';
+ }
+
+ // Enable bbPress integration
+ function Option_bbpress() {
+ $options = get_option('browserid_options');
+ $chk = (isset($options['browserid_bbpress']) && $options['browserid_bbpress'] ? " checked='checked'" : '');
+ echo "<input id='browserid_bbpress' name='browserid_options[browserid_bbpress]' type='checkbox'" . $chk. "/>";
+ echo '<strong>Beta!</strong>';
+ echo '<br />' . __('Enables anonymous posting implicitly', c_bid_text_domain);
+ }
+
+ // Comment HTML option
+ function Option_comment_html() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_comment_html']))
+ $options['browserid_comment_html'] = null;
+ echo "<input id='browserid_comment_html' name='browserid_options[browserid_comment_html]' type='text' size='100' value='{$options['browserid_comment_html']}' />";
+ }
+
+ // Verification server option
+ function Option_vserver() {
+ $options = get_option('browserid_options');
+ if (empty($options['browserid_vserver']))
+ $options['browserid_vserver'] = null;
+ echo "<input id='browserid_vserver' name='browserid_options[browserid_vserver]' type='text' size='100' value='{$options['browserid_vserver']}' />";
+ echo '<br />' . __('Default https://verifier.login.persona.org/verify', c_bid_text_domain);
+ }
+
+ // No valid until option
+ function Option_novalid() {
+ $options = get_option('browserid_options');
+ $chk = (isset($options['browserid_novalid']) && $options['browserid_novalid'] ? " checked='checked'" : '');
+ echo "<input id='browserid_novalid' name='browserid_options[browserid_novalid]' type='checkbox'" . $chk. "/>";
+ echo '<strong>' . __('Security risk!', c_bid_text_domain) . '</strong>';
+ }
+
+ // No SSL verify option
+ function Option_noverify() {
+ $options = get_option('browserid_options');
+ $chk = (isset($options['browserid_noverify']) && $options['browserid_noverify'] ? " checked='checked'" : '');
+ echo "<input id='browserid_noverify' name='browserid_options[browserid_noverify]' type='checkbox'" . $chk. "/>";
+ echo '<strong>' . __('Security risk!', c_bid_text_domain) . '</strong>';
+ }
+
+ // Debug option
+ function Option_debug() {
+ $options = get_option('browserid_options');
+ $chk = (isset($options['browserid_debug']) && $options['browserid_debug'] ? " checked='checked'" : '');
+ echo "<input id='browserid_debug' name='browserid_options[browserid_debug]' type='checkbox'" . $chk. "/>";
+ echo '<strong>' . __('Security risk!', c_bid_text_domain) . '</strong>';
+ }
+
+ // Debug option
+ function Option_browserid_only_auth() {
+ $options = get_option('browserid_options');
+ $chk = (isset($options['browserid_only_auth']) && $options['browserid_only_auth'] ? " checked='checked'" : '');
+ echo "<input id='browserid_only_auth' name='browserid_options[browserid_only_auth]' type='checkbox'" . $chk. "/>";
+ }
+
+ // Render options page
+ function Administration() {
+?>
+ <div class="wrap">
+ <h2><?php _e('Mozilla Persona', c_bid_text_domain); ?></h2>
+ <form method="post" action="options.php">
+ <?php settings_fields('browserid_options'); ?>
+ <?php do_settings_sections('browserid'); ?>
+ <p class="submit">
+ <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
+ </p>
+ </form>
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_s-xclick">
+ <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHVwYJKoZIhvcNAQcEoIIHSDCCB0QCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYCNVn+0+6KlCz283aGlIVPJbPXwm4YpfVEfgQJlGT4WKuCrFGL5vaB+DiDaZVgEtF4WgL22Acb2CkoJ8nl75zUUtJO4qpZFwJGIcl27hZxT3WP+o19/VpjT4X1fLDUOtNdAjXm8lqMC9Rm/8m2tvrndVo66MSqU/TEh7wI6f0uXxjELMAkGBSsOAwIaBQAwgdQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIlm4gwL1TxqiAgbAQhh1QBShIVUbWmZQMFDOnTiiuAxQn2lj+YIx1p8RO/9j9CL1bmy3R1w5tsin0auEqAzdIKsmiMRUNjloMrmSloTvAjkDEQmY0IodJ19CdbQBye0POtqedmeHCgEqw+0cOXalfWHrlm2G1Abz/LNUiyL2wq6PBg8p27q+5xcR6CzjRyAzsm4P2+d0YTbkZELwSNH1kPeYp2+6nTFp9e/IbDSw0zD8yWI46WfBG1D4PcKCCA4cwggODMIIC7KADAgECAgEAMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTAeFw0wNDAyMTMxMDEzMTVaFw0zNTAyMTMxMDEzMTVaMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUdO3fxEzEtcnI7ZKZL412XvZPugoni7i7D7prCe0AtaHTc97CYgm7NsAtJyxNLixmhLV8pyIEaiHXWAh8fPKW+R017+EmXrr9EaquPmsVvTywAAE1PMNOKqo2kl4Gxiz9zZqIajOm1fZGWcGS0f5JQ2kBqNbvbg2/Za+GJ/qwUCAwEAAaOB7jCB6zAdBgNVHQ4EFgQUlp98u8ZvF71ZP1LXChvsENZklGswgbsGA1UdIwSBszCBsIAUlp98u8ZvF71ZP1LXChvsENZklGuhgZSkgZEwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAgV86VpqAWuXvX6Oro4qJ1tYVIT5DgWpE692Ag422H7yRIr/9j/iKG4Thia/Oflx4TdL+IFJBAyPK9v6zZNZtBgPBynXb048hsP16l2vi0k5Q2JKiPDsEfBhGI+HnxLXEaUWAcVfCsQFvd2A1sxRr67ip5y2wwBelUecP3AjJ+YcxggGaMIIBlgIBATCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTExMDcxNjA4NDAzMFowIwYJKoZIhvcNAQkEMRYEFAWYvtWGat4+67ovefTVzOY61K2fMA0GCSqGSIb3DQEBAQUABIGAZC5+zjCCCi1Cg7ZONfFRca5mE/wDx13NfnDJCJQ484WX16wGXnIYzVFYDV5CmS87GmQogLEUOK5jJC4htNTE4jVoNMiAlaC6sLmQcCfvb58FlnHxhvyv4Yw23ExgXgoBsf3t3EeoXmar/CavbD3trebm2llr7/uKbvvvPLqPn9g=-----END PKCS7-----">
+ <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+ </form>
+ </div>
+<?php
+ if ($this->debug) {
+ $options = get_option('browserid_options');
+ $request = get_option(c_bid_option_request);
+ $response = get_option(c_bid_option_response);
+ if (is_wp_error($response))
+ $result = $response;
+ else
+ $result = json_decode($response['body'], true);
+
+ echo '<p><strong>Site URL</strong>: ' . get_site_url() . ' (WordPress address / folder)</p>';
+ echo '<p><strong>Home URL</strong>: ' . get_home_url() . ' (Blog address / Home page)</p>';
+
+ if (!empty($result) && !is_wp_error($result)) {
+ echo '<p><strong>PHP Time</strong>: ' . time() . ' > ' . date('c', time()) . '</p>';
+ echo '<p><strong>Assertion valid until</strong>: ' . $result['expires'] . ' > ' . date('c', $result['expires'] / 1000) . '</p>';
+ }
+
+ echo '<p><strong>PHP audience</strong>: ' . $_SERVER['HTTP_HOST'] . '</p>';
+ echo '<script type="text/javascript">';
+ echo 'document.write("<p><strong>JS audience</strong>: " + window.location.hostname + "</p>");';
+ echo '</script>';
+
+ echo '<br /><pre>Options=' . htmlentities(print_r($options, true)) . '</pre>';
+ echo '<br /><pre>BID request=' . htmlentities(print_r($request, true)) . '</pre>';
+ echo '<br /><pre>BID response=' . htmlentities(print_r($response, true)) . '</pre>';
+ echo '<br /><pre>PHP request=' . htmlentities(print_r($_REQUEST, true)) . '</pre>';
+ echo '<br /><pre>PHP server=' . htmlentities(print_r($_SERVER, true)) . '</pre>';
+ }
+ else {
+ delete_option(c_bid_option_request);
+ delete_option(c_bid_option_response);
+ }
+ }
+
+ function http_api_curl($handle) {
+ curl_setopt($handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
+ }
+
+ // Check environment
+ function Check_prerequisites() {
+ // Check WordPress version
+ global $wp_version;
+ if (version_compare($wp_version, '3.1') < 0)
+ die('Mozilla Persona requires at least WordPress 3.1');
+
+ // Check basic prerequisities
+ self::Check_function('add_action');
+ self::Check_function('wp_enqueue_script');
+ self::Check_function('json_decode');
+ self::Check_function('parse_url');
+ self::Check_function('md5');
+ self::Check_function('wp_remote_post');
+ self::Check_function('wp_remote_get');
+ }
+
+ function Check_function($name) {
+ if (!function_exists($name))
+ die('Required WordPress function "' . $name . '" does not exist');
+ }
+ }
+}
+
+// Define widget
+class BrowserID_Widget extends WP_Widget {
+ // Widget constructor
+ function BrowserID_Widget() {
+ $widget_ops = array(
+ 'classname' => 'browserid_widget',
+ 'description' => __('Mozilla Persona login button', c_bid_text_domain)
+ );
+ $this->WP_Widget('BrowserID_Widget', 'Mozilla Persona', $widget_ops);
+ }
+
+ // Widget contents
+ function widget($args, $instance) {
+ extract($args);
+ $title = apply_filters('widget_title', $instance['title']);
+ echo $before_widget;
+ if (!empty($title))
+ echo $before_title . $title . $after_title;
+
+ echo "<ul><li class='only-child'>" . M66BrowserID::Get_loginout_html() . "</li></ul>";
+ echo $after_widget;
+ }
+
+ // Update settings
+ function update($new_instance, $old_instance) {
+ $instance = $old_instance;
+ $instance['title'] = strip_tags($new_instance['title']);
+ return $instance;
+ }
+
+ // Render settings
+ function form($instance) {
+ if (empty($instance['title']))
+ $instance['title'] = null;
+?>
+ <p>
+ <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
+ <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($instance['title']); ?>" />
+ </p>
+<?php
+ }
+}
+
+// Check pre-requisites
+M66BrowserID::Check_prerequisites();
+
+// Start plugin
+global $m66browserid;
+if (empty($m66browserid)) {
+ $m66browserid = new M66BrowserID();
+ register_activation_hook(__FILE__, array(&$m66browserid, 'Activate'));
+}
+
+// Template tag "mozilla_persona"
+if (!function_exists('mozilla_persona')) {
+ function mozilla_persona() {
+ echo M66BrowserID::Get_loginout_html();
+ }
+}
+
+// Template tag "browserid_loginout"
+if (!function_exists('browserid_loginout')) {
+ function browserid_loginout() {
+ echo M66BrowserID::Get_loginout_html();
+ }
+}
+
+?>
View
3,825 plugins/browserid/cacert.pem
3,825 additions, 0 deletions not shown
View
101 plugins/browserid/login.js
@@ -0,0 +1,101 @@
+/*jshint browser: true*/
+/*global browserid_common: true, alert: true*/
+(function() {
+ "use strict";
+
+ var login_type, post_id;
+
+ window.browserid_login = function() {
+ return browserid_authenticate("login");
+ };
+
+ window.browserid_comment = function(postid) {
+ return browserid_authenticate("comment", postid);
+ };
+
+ window.browserid_logout = function() {
+ // log user out from browserid.
+ navigator.id.logout();
+
+ return false;
+ };
+
+ if (browserid_common.logout || browserid_common.error) {
+ navigator.id.logout();
+ }
+
+ navigator.id.watch({
+ loggedInUser: browserid_common.logged_in_user || null,
+ onlogin: function(assertion) {
+ if (assertion) {
+ if(!login_type || login_type === "login") {
+ var rememberme = document.getElementById('rememberme');
+ if (rememberme !== null)
+ rememberme = rememberme.checked;
+
+ var form = document.createElement('form');
+ form.setAttribute('style', 'display: none;');
+ form.method = 'POST';
+ form.action = browserid_common.siteurl;
+
+ var fields = [
+ {name: 'browserid_assertion', value: assertion},
+ {name: 'rememberme', value: rememberme}
+ ];
+
+ if (browserid_common.login_redirect !== null)
+ fields.push({name: 'redirect_to', value: browserid_common.login_redirect});
+
+ for (var i = 0; i < fields.length; i++) {
+ var field = document.createElement('input');
+ field.type = 'hidden';
+ field.name = fields[i].name;
+ field.value = fields[i].value;
+ form.appendChild(field);
+ }
+
+ document.body.appendChild(form).submit();
+ }
+ else if(login_type === "comment") {
+ var form = jQuery('#browserid_' + post_id).closest('form')[0];
+ var fields = [
+ {name: 'browserid_comment', value: post_id},
+ {name: 'browserid_assertion', value: assertion}
+ ];
+ for (var i = 0; i < fields.length; i++) {
+ var field = document.createElement('input');
+ field.type = 'hidden';
+ field.name = fields[i].name;
+ field.value = fields[i].value;
+ form.appendChild(field);
+ }
+ form.submit();
+ }
+
+ }
+ else
+ alert(browserid_common.failed);
+ },
+ onlogout: function() {
+ // There is a bug in Persona with Chrome. When a user signs in, the
+ // onlogout callback is first fired. Check if a user is actually
+ // signed in before redirecting to the logout URL.
+ if (browserid_common.logged_in_user) {
+ document.location = browserid_common.logout_redirect;
+ }
+ }
+ });
+
+ function browserid_authenticate(type, postid) {
+ login_type = type;
+ post_id = postid;
+
+ navigator.id.request({
+ siteName: browserid_common.sitename || '',
+ siteLogo: browserid_common.sitelogo || ''
+ });
+
+ return false;
+ }
+
+}());
View
361 plugins/browserid/readme.txt
@@ -0,0 +1,361 @@
+=== Mozilla Persona (BrowserID) ===
+Contributors: Marcel Bokhorst, M66B
+Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=AJSBB7DGNA3MJ&lc=US&item_name=BrowserID%20WordPress%20plugin&item_number=Marcel%20Bokhorst&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted
+Tags: security, admin, authentication, access, widget, login, shortcode, comment, comments, discussion, bbPress, bbPress 2.0
+Requires at least: 3.1
+Tested up to: 3.5
+Stable tag: 0.34
+
+Implementation of Mozilla Persona (BrowserID) for WordPress
+
+== Description ==
+
+"*As a user of Mozilla Persona (BrowserID), you confirm your email addresses once. Then, you can sign into any web site that supports Mozilla Persona with just two clicks.*"
+
+This plugin adds a Mozilla Persona login button as an additional way to login to your login page.
+There is also a widget, shortcode and template tag. It is possible to customize the login and logout button/link.
+
+**Beta features:**
+
+* Submit comments with Mozilla Persona
+* [bbPress 2](http://bbpress.org/ "bbPress") integration: create topics / reply with Mozilla Persona
+
+[Mozilla Persona](https://login.persona.org/ "Mozilla Persona") is an open source experiment from the [Identity Team](http://identity.mozilla.com/ "Identity Team") at [Mozilla Labs](https://mozillalabs.com/ "Mozilla Labs").
+
+**Mozilla Persona and this plugin are experimental !**
+
+Please report any issue you have with this plugin on the [forum](http://forum.bokhorst.biz/), so I can at least try to fix it.
+If you rate this plugin low, please let me know why.
+
+See my [other plugins](http://wordpress.org/extend/plugins/profile/m66b "Marcel Bokhorst")
+
+== Installation ==
+
+*Using the WordPress dashboard*
+
+1. Login to your weblog
+1. Go to Plugins
+1. Select Add New
+1. Search for Mozilla Persona
+1. Select Install
+1. Select Install Now
+1. Select Activate Plugin
+
+*Manual*
+
+1. Download and unzip the plugin
+1. Upload the entire *browserid/* directory to the */wp-content/plugins/* directory
+1. Activate the plugin through the Plugins menu in WordPress
+
+== Frequently Asked Questions ==
+
+= What is 'Custom login HTML for?' =
+
+Try putting the following into this option:
+
+`<img src="https://login.persona.org/i/browserid_logo_sm.png" />`
+
+Now you will see the Mozilla Persona logo instead of the login button.
+
+= Which server verifies the assertion? =
+
+The assertion is verified by the server at https://login.persona.org/verify.
+
+= I get 'SSL certificate problem, verify that the CA cert is OK' =
+
+Your hosting provider should take a look at the SSL certificates.
+You can check the option *Do not verify SSL certificate*, but please realize this isn't entirely safe.
+
+= I get 'Bad Gateway' =
+
+The login.persona.org service is still in testing phase.
+Trying again may help.
+
+= I get 'Login failed' =
+
+Only users that registered before can login.
+The e-mail address used for Mozilla Persona should match the e-mail address registered with.
+
+= I get 'Verification failed' =
+
+Are you cheating?
+If there isn't an error message, turn on debug mode to see the complete response.
+
+= I get 'Verification void' =
+
+Something went terribly wrong.
+If there isn't an error message, turn on debug mode to see the complete response.
+
+= I get 'Verification invalid' =
+
+Maybe the time of your hosting server is incorrect.
+You could check the option *Do not check valid until time* to solve this.
+
+= Where can I ask questions, report bugs and request features? =
+
+You can write comments on the [forum](http://forum.bokhorst.biz/).
+
+== Screenshots ==
+
+1. Mozilla Persona logo
+1. Mozilla Persona login button
+1. WordPress login dialog
+
+== Changelog ==
+
+= Development version =
+* ...
+
+Follow these steps to install the development version:
+
+* Download the development version by clicking on [this link](http://downloads.wordpress.org/plugin/browserid.zip)
+* Go to *Plugins* on your WordPress dashboard
+* *Deactivate* Mozilla Persona
+* *Delete* Mozilla Persona (*Yes, delete these files*)
+* Click *Add New*
+* Click *Upload* (a link at the top)
+* Click *Choose file* and select the file you downloaded before
+* Click *Install*, then *Activate Plugin*
+
+= 0.34 =
+* Added Italian translation by [John R. D'Orazio](http://johnromanodorazio.blogspot.it/ "John R. D'Orazio")
+
+= 0.33 =
+* Updated URL to verification server
+* Updated Mozilla CA certificates
+
+= 0.32 =
+* Fixed notices
+* Updated French translation
+
+= 0.31 =
+* Renamed Mozilla BrowserID into Mozilla Persona
+* New feature: site name/logo in login dialog
+* Both by [Shane Tomlinson](https://shanetomlinson.com/), thanks!
+* Added French translation
+* Updated Dutch and Flemish translations
+* Tested with WordPress 3.4.1
+
+= 0.29 =
+* Added Swedish (sv\_SE) translation
+* Improvement: load scripts at footer by *Marvin Rühe*
+* Tested with WordPress 3.4
+
+= 0.28 =
+* Improvement: POST assertion by *Marvin Rühe*
+* Improvement: included Mozilla CA certificates
+* Improvement: included BrowserID logo
+* New feature: login button localization
+* Added German Translation by *Marvin Rühe*
+
+= 0.27 =
+* Bugfix: remember me
+
+= 0.26 =
+* New feature: BrowserID for comments (beta, option)
+* New feature: bbPress integration (beta, option)
+* Improvement: added title/class to BrowserID buttons
+* Improvement: files instead of inline JavaScript script
+* Improvement: added 'What is?' link
+* Improvement: more debug info
+* Updated Dutch and Flemish translations
+* Updated Norwegian (nb\_NO) translation by [Stein Ivar Johnsen](http://www.idyrøy.no/ "Stein Ivar Johnsen")
+
+= 0.25 =
+* Improvement: store debug info only when debugging enabled
+* Improvement: add trailing slash to site URL
+* Improvement: respect login redirect to parameter
+* Improvement: better error messages
+* Thanks to [mitcho](http://mitcho.com "mitcho") for the suggestions and testing!
+
+= 0.24 =
+* Removed [Sustainable Plugins Sponsorship Network](http://pluginsponsors.com/)
+
+= 0.23 =
+* Improvement: compatibility with WordPress 3.3
+
+= 0.22 =
+* Re-release of version 0.21, because of a bug in wordpress.org
+
+= 0.21 =
+* Bugfix: renamed *valid-until* into *expires*
+* Improvement: fixed a few notices
+
+= 0.20 =
+* Bugfix: shortcode still not working
+
+= 0.19 =
+* Bugfix: widget, shortcode, template tag not working
+
+= 0.18 =
+* Improvement: workaround for bug in Microsoft IIS
+
+= 0.17 =
+* Improvement: applying filter *login_redirect*
+
+= 0.16 =
+* Improvement: only load BrowserID script on login page
+
+= 0.15 =
+* **Protocol change**: verification with POST instead of GET
+* Improvement: no logout link on login page
+* Updated Dutch and Flemish translations
+* Updated Norwegian (nb\_NO) translation by [Stein Ivar Johnsen](http://www.idyrøy.no/ "Stein Ivar Johnsen")
+
+= 0.14 =
+* New feature: option to redirect to set URL after login
+
+= 0.13 =
+* Bug fix: correctly handling WordPress errors
+
+= 0.12 =
+* Improvement: check issuer
+* Improvement: more debug info
+
+= 0.11 =
+* Fixed IDN
+
+= 0.9 =
+* New feature: shortcode for login/out button/link: *[mozilla_persona]*
+* New feature: template tag for login/out button/link: *mozilla_persona*
+* Updated Dutch and Flemish translations
+* Updated Norwegian (nb\_NO) translation by [Stein Ivar Johnsen](http://www.idyrøy.no/ "Stein Ivar Johnsen")
+
+= 0.8 =
+* New feature: option to set verification server
+* Improvement: checking assertion valid until time (can be switch off with an option)
+* Improvement: using [idn_to_utf8](http://php.net/manual/en/function.idn-to-utf8.php "idn_to_utf8") when available
+* Updated FAQ
+* Updated Dutch and Flemish translations
+
+= 0.7 =
+* New feature: support for *Remember Me* check box
+* Updated Norwegian (nb\_NO) translation by [Stein Ivar Johnsen](http://www.idyrøy.no/ "Stein Ivar Johnsen")
+
+= 0.6 =
+* New feature: option *Do not verify SSL certificate*
+* Updated Dutch and Flemish translations
+
+= 0.5 =
+* Improvement: more debug info
+* Tested with WordPress 3.1
+
+= 0.4 =
+* Bug fix: using site URL in stead of home URL
+* Updated FAQ
+
+= 0.3 =
+* Improvement: better error messages
+* Improvement: more debug info
+* Improvement: support for [internationalized domain names](http://en.wikipedia.org/wiki/Internationalized_domain_name "IDN")
+* Updated FAQ
+* Added Norwegian (nb\_NO) translation by [Stein Ivar Johnsen](http://www.idyrøy.no/ "Stein Ivar Johnsen"), thanks!
+
+= 0.2 =
+* Bugfix: custom HTML for login page
+* Added Flemish translation
+* Updated Dutch translation
+
+= 0.1 =
+* Initial version
+
+= 0.0 =
+* Development version
+
+== Upgrade Notice ==
+
+= 0.33 =
+Updated URL to verification server
+
+= 0.32 =
+Fixed notices
+
+= 0.31 =
+Renamed Mozilla BrowserID into Mozilla Persona
+
+= 0.29 =
+One improvement, one new translation
+
+= 0.28 =
+One new feature, threee improvements
+
+= 0.27 =
+One bugfix
+
+= 0.26 =
+Two new features, four improvements, translation updates
+
+= 0.25 =
+Four improvements
+
+= 0.24 =
+Compliance
+
+= 0.23 =
+Compatibility
+
+= 0.21 =
+One bugfix, one improvement
+
+= 0.20 =
+One bugfix
+
+= 0.19 =
+One bugfix
+
+= 0.18 =
+One improvement
+
+= 0.17 =
+One improvement
+
+= 0.16 =
+One improvement
+
+= 0.15 =
+Protocol change! Verification with POST instead of GET
+
+= 0.14 =
+One new feature
+
+= 0.13 =
+One bugfix
+
+= 0.12 =
+Two improvements
+
+= 0.11 =
+Fixed IDN
+
+= 0.9 =
+Two new features, translation update
+
+= 0.8 =
+One new feature, two improvements
+
+= 0.7 =
+One new feature
+
+= 0.6 =
+One new feature
+
+= 0.5 =
+One improvement
+
+= 0.4 =
+Bugfix
+
+= 0.3 =
+Three improvements
+
+= 0.2 =
+One bugfix
+
+= 0.1 =
+First public release
+
+== Acknowledgments ==
+
+This plugin uses:
+
+* The client side [Mozilla Persona script](https://login.persona.org/include.js "Mozilla Persona script")
View
BIN  plugins/browserid/screenshot-1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  plugins/browserid/screenshot-2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  plugins/browserid/screenshot-3.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
398 plugins/browserid/wp-browserid-only-login.php
@@ -0,0 +1,398 @@
+<?php
+/**
+ * WordPress User Page
+ *
+ * Handles authentication, registering, resetting passwords, forgot password,
+ * and other user handling.
+ *
+ * @package WordPress
+ */
+
+/** Make sure that the WordPress bootstrap has run before continuing. */
+require( '../../../wp-load.php' );
+
+// Redirect to https login if forced to use SSL
+if ( force_ssl_admin() && ! is_ssl() ) {
+ if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
+ wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
+ exit();
+ } else {
+ wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+ exit();
+ }
+}
+
+
+/**
+ * Outputs the header for the login page.
+ *
+ * @uses do_action() Calls the 'login_head' for outputting HTML in the Log In
+ * header.
+ * @uses apply_filters() Calls 'login_headerurl' for the top login link.
+ * @uses apply_filters() Calls 'login_headertitle' for the top login title.
+ * @uses apply_filters() Calls 'login_message' on the message to display in the
+ * header.
+ * @uses $error The error global, which is checked for displaying errors.
+ *
+ * @param string $title Optional. WordPress Log In Page title to display in
+ * <title/> element.
+ * @param string $message Optional. Message to display in header.
+ * @param WP_Error $wp_error Optional. WordPress Error Object
+ */
+function login_header($title = 'Log In', $message = '', $wp_error = '') {
+ global $error, $interim_login, $current_site, $action;
+
+ // Don't index any of these forms
+ add_action( 'login_head', 'wp_no_robots' );
+
+ if ( empty($wp_error) )
+ $wp_error = new WP_Error();
+
+ // Shake it!
+ $shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );
+ $shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes );
+
+ if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
+ add_action( 'login_head', 'wp_shake_js', 12 );
+
+ ?><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
+ <head>
+ <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
+ <title><?php bloginfo('name'); ?> &rsaquo; <?php echo $title; ?></title>
+ <?php
+
+ wp_admin_css( 'wp-admin', true );
+ wp_admin_css( 'colors-fresh', true );
+
+ if ( wp_is_mobile() ) { ?>
+ <meta name="viewport" content="width=320; initial-scale=0.9; maximum-scale=1.0; user-scalable=0;" /><?php
+ }
+
+ do_action( 'login_enqueue_scripts' );
+ do_action( 'login_head' );
+
+ if ( is_multisite() ) {
+ $login_header_url = network_home_url();
+ $login_header_title = $current_site->site_name;
+ } else {
+ $login_header_url = __( 'http://wordpress.org/' );
+ $login_header_title = __( 'Powered by WordPress' );
+ }
+
+ $login_header_url = apply_filters( 'login_headerurl', $login_header_url );
+ $login_header_title = apply_filters( 'login_headertitle', $login_header_title );
+
+ // Don't allow interim logins to navigate away from the page.
+ if ( $interim_login )
+ $login_header_url = '#';
+
+ $classes = array( 'login-action-' . $action, 'wp-core-ui' );
+ if ( wp_is_mobile() )
+ $classes[] = 'mobile';
+ if ( is_rtl() )
+ $classes[] = 'rtl';
+ $classes = apply_filters( 'login_body_class', $classes, $action );
+ ?>
+ </head>
+ <body class="login <?php echo esc_attr( implode( ' ', $classes ) ); ?>">
+ <div id="login">
+ <h1><a href="<?php echo esc_url( $login_header_url ); ?>" title="<?php echo esc_attr( $login_header_title ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
+ <?php
+
+ unset( $login_header_url, $login_header_title );
+
+ $message = apply_filters('login_message', $message);
+ if ( !empty( $message ) )
+ echo $message . "\n";
+
+ // In case a plugin uses $error rather than the $wp_errors object
+ if ( !empty( $error ) ) {
+ $wp_error->add('error', $error);
+ unset($error);
+ }
+
+ if ( $wp_error->get_error_code() ) {
+ $errors = '';
+ $messages = '';
+ foreach ( $wp_error->get_error_codes() as $code ) {
+ $severity = $wp_error->get_error_data($code);
+ foreach ( $wp_error->get_error_messages($code) as $error ) {
+ if ( 'message' == $severity )
+ $messages .= ' ' . $error . "<br />\n";
+ else
+ $errors .= ' ' . $error . "<br />\n";