Skip to content
Snippets Groups Projects
Unverified Commit ababbcc1 authored by briancanini's avatar briancanini Committed by GitHub
Browse files

Merge pull request #394 from ASCWebServices/yubikey-fix

Remove case-sensitive colliding simplesaml/authYubiKey
parents 5bf53aa0 c624a9b5
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 1141 deletions
coverage:
status:
project: yes
comment:
layout: "diff"
behavior: once
require_changes: true
require_base: no
require_head: yes
branches: null
<?php
$finder = PhpCsFixer\Finder::create()
->in([
__DIR__ . '/lib',
__DIR__ . '/libextinc',
__DIR__ . '/tests',
__DIR__ . '/www',
])
;
return PhpCsFixer\Config::create()
->setRules([
'@PSR2' => true,
'@PSR4' => true,
'@PSR5' => true,
])
->setFinder($finder)
;
sudo: required
language: php
php:
- 5.6
- 7.0
- 7.1
- 7.2
- 7.3
env:
- SIMPLESAMLPHP_VERSION=1.17.*
matrix:
allow_failures:
- php: 7.3
before_script:
- composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
- composer update --no-interaction
- if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
script:
- bin/check-syntax.sh
- if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
- if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
after_success:
# Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
- curl -s https://codecov.io/bash > .codecov
- sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
- chmod +x .codecov
- if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
#!/usr/bin/env bash
PHP='/usr/bin/env php'
RETURN=0
# check PHP files
for FILE in `find lib libextinc templates tests www -name "*.php"`; do
$PHP -l $FILE > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Syntax check failed for ${FILE}"
RETURN=`expr ${RETURN} + 1`
fi
done
exit $RETURN
{
"name": "simplesamlphp/simplesamlphp-module-authyubikey",
"description": "A module that is able to authenticate against YubiKey",
"type": "simplesamlphp-module",
"keywords": ["simplesamlphp", "authyubikey"],
"license": "LGPL-3.0-or-later",
"authors": [
{
"name": "Tim van Dijen",
"email": "tvdijen@gmail.com"
}
],
"config": {
"preferred-install": {
"simplesamlphp/simplesamlphp": "source",
"*": "dist"
}
},
"extra": {
"ssp-mixedcase-module-name": "authYubikey"
},
"autoload": {
"psr-4": {
"SimpleSAML\\modules\\yubikey\\": "lib/"
}
},
"autoload-dev": {
"psr-4": {
"SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
}
},
"require": {
"php": ">=5.6",
"simplesamlphp/composer-module-installer": "~1.1",
"webmozart/assert": "~1.4"
},
"require-dev": {
"simplesamlphp/simplesamlphp": "^1.17",
"phpunit/phpunit": "~5.7"
},
"support": {
"issues": "https://github.com/tvdijen/simplesamlphp-module-authyubikey/issues",
"source": "https://github.com/tvdijen/simplesamlphp-module-authyubikey"
}
}
This file indicates that the default state of this module
is disbled. To enable, create a file named enable in the
same directory as this file.
{
"header": {
"en": "Login with YubiKey"
},
"intro": {
"en": "Some service requested authentication. To authenticate, click the button on your YubiKey. The field below should then automatically be filled out with a secure one-time-password."
}
}
{
"header": {
"no": "Login med YubiKey",
"nn": "Logg inn med YubiKey",
"sv": "Logga in med YubiKey",
"es": "Accede utilizando YubiKey",
"de": "Anmelden mit YubiKey",
"nl": "Inloggen met YubiKey",
"sl": "Prijavi se z YubiKey",
"da": "Login med YubiKey",
"hr": "Prijavite se pomo\u0107u YubiKey-a",
"hu": "YubiKey bejelentkez\u00e9s",
"fi": "Kirjaudu Yubikeylla",
"pt": "Entrar com YubiKey",
"pl": "Login z YubiKey",
"eu": "YubiKey erabiliz",
"tr": "YubiKey ile giri\u015f",
"fr": "S'authentifier avec YubiKey",
"it": "Connessione con YubiKey",
"lt": "Jungtis su YubiKey",
"ja": "YubiKey\u3067\u30ed\u30b0\u30a4\u30f3",
"zh-tw": "\u4f7f\u7528 YubiKey \u767b\u5165",
"et": "Logi sisse YubiKey abil",
"he": "\u05db\u05e0\u05e1 \u05e2\u05dd \u05d9\u05d5\u05d1\u05d9\u05e7\u05d9",
"ru": "\u0412\u043e\u0439\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e YubiKey",
"zh": "\u4f7f\u7528YubiKey\u767b\u5f55",
"ar": "\u0623\u062f\u062e\u0644 \u0645\u0633\u062a\u062e\u062f\u0645\u0627\u064bYubiKey ",
"lv": "Piesl\u0113gties ar YubiKey",
"id": "Login dengan YubiKey",
"sr": "Prijavite se pomo\u0107u YubiKey-a",
"ro": "Login cu YubiKey",
"cs": "P\u0159ihl\u00e1\u0161en\u00ed pomoc\u00ed YubiKey",
"af": "Meld aan met YubiKey",
"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u03bc\u03b5 YubiKey",
"ca": "Inicieu sessió amb YubiKey"
},
"intro": {
"no": "En tjeneste har bedt om at du autentiserer deg. For \u00e5 autentisere seg, trykk p\u00e5 knappen p\u00e5 din YubiKey. Feltet under vil da bli automatisk utfylt med et sikkert engangspassord.",
"nn": "Ei webteneste har spurt om at du loggar inn. For \u00e5 logga inn, klikk p\u00e5 knappen p\u00e5 din YubiKey. Feltet nedanfor blir automatisk fylt ut med eit sikkert eingongspassord n\u00e5r du trykker p\u00e5 YubiKey.",
"sv": "En tj\u00e4nst vill att du ska logga in. F\u00f6r att logga in tryck p\u00e5 knappen p\u00e5 din YubiKey. F\u00e4ltet nedan ska n\u00e4r du trycker bli ifyllt med ett s\u00e4kert eng\u00e5ngsl\u00f6senord.",
"es": "Un servicio ha solicitado que se autentique. Para autenticarse, haga clic en el bot\u00f3n de su YubiKey. El campo situado debajo deber\u00eda rellenarse autom\u00e1tica con una clave de un \u00fanico uso (OTP) segura",
"de": "Ein Service verlangt nach Ihrer validierung. Bitte dr\u00fccken Sie den Knopf auf Ihrem YubiKey. Ihr sicheres Einmalpasswort wird dann in das vorgesehene Feld geschrieben.",
"nl": "Een dienst vroeg om authenticatie. Om te authenticaren, klik op de knop van je YubiKey. In het veld hieronder zal dan automatisch een veilig eenmalig wachtwoord worden ingevuld.",
"sl": "Nekatere storitve zahtevajo avtentikacijo, ki jo izvedete s klikom na gumb YubiKey. V polju spodaj se bo nato samodejno prikazalo geslo za enkratno uporabo.",
"da": "Nogle services kr\u00e6ver autentificering. For at autentificere klik p\u00e5 knappen p\u00e5 din YubiKey. Feltet herunder skulle nu automatisk blive udfyldt med et sikkert one-time-password.",
"hr": "Neki od servisa je zatra\u017eio da se autentificirate. Da biste se autentificirali pritisnite gumb na va\u0161em YubiKey ure\u0111aju. Nakon toga bi u polje ispod trebala biti automatski upisana jednokratna zaporka.",
"hu": "Egy szolg\u00e1ltat\u00e1s azonos\u00edt\u00e1st k\u00e9rt. K\u00e9rj\u00fck, nyomja meg a gombot a YubiKey-n! Az al\u00e1bbi mez\u0151 automatikusan ki kell, hogy t\u00f6lt\u0151dj\u00f6n egy biztons\u00e1gos egyszerhaszn\u00e1latos jelsz\u00f3val.",
"fi": "Jotkin palvelut vaativat k\u00e4ytt\u00e4j\u00e4tunnistuksen. Paina nappia Yubikeyssasi tunnistautuaksesi. Allaolevaan kentt\u00e4\u00e4 tulee automaattisesti kertak\u00e4ytt\u00f6salasanasi.",
"pt": "Um servi\u00e7o necessita de autentica\u00e7\u00e3o. Para se autenticar, clique no bot\u00e3o da sua YubiKey. O campo em baixo dever\u00e1 ser automaticamente preenchido com uma palavra-passe segura que funcionar\u00e1 apenas uma vez.",
"pl": "Jaki\u015b serwis za\u017c\u0105da\u0142 uwierzytelnienia. W celu uwierzytelnienia naci\u015bnij przycisk na Twoim YubiKey. Nast\u0119pnie poni\u017csze pole powinno zosta\u0107 automatycznie wype\u0142nione bezpiecznym jednorazowym has\u0142em.",
"tr": "Baz\u0131 servisler kimlik do\u011frulama istedi. Kimlik do\u011frulamak i\u00e7in, YubiKey'iniz \u00fczerindeki d\u00fc\u011fmeyi t\u0131klay\u0131n\u0131z. Ondan sonra, g\u00fcvenli bir tek kullan\u0131ml\u0131k \u015fifre a\u015fa\u011f\u0131daki alanda otomatik olarak belirecektir.",
"fr": "Ce service requiert une authentification. Pour vous authentifier, appuyez sur le bouton de votre YubiKey. Le champ ci dessous devrait automatiquement \u00eatre renseign\u00e9 avec un mot de passe \u00e0 usage unique.",
"it": "Un servizio ha richiesto l'autenticazione. Per autenticarsi, premere il pulsante sulla propria YukiKey. Il campo sottostante dovrebbe essere automaticamente riempito con una password usa e getta.",
"lt": "Ka\u017ekuri paslauga reikalauja autenti\u0161kumo patvirtinimo. Nor\u0117dami patvirtinti autenti\u0161kum\u0105, paspauskite mygtuk\u0105 ant savo YubiKey. \u012e \u017eemiau esant\u012f laukel\u012f tur\u0117t\u0173 b\u016bti automati\u0161kai \u012fvestas saugus vienkartinis slapta\u017eodis.",
"ja": "\u5e7e\u3064\u304b\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u8a8d\u8a3c\u3092\u8981\u6c42\u3057\u3066\u3044\u307e\u3059\u3002\u8a8d\u8a3c\u3092\u884c\u3046\u306b\u306fYubiKey\u306e\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4ee5\u4e0b\u306e\u9805\u76ee\u306f\u30bb\u30ad\u30e5\u30a2\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u81ea\u52d5\u7684\u306b\u57cb\u3081\u3089\u308c\u307e\u3059\u3002",
"zh-tw": "\u6709\u4e9b\u670d\u52d9\u9700\u8981\u7d93\u904e\u9a57\u8b49\uff0c\u8acb\u9ede\u9078 YubiKey \u6309\u9215\u4f86\u9032\u884c\u9a57\u8b49\u3002\u63a5\u4e0b\u4f86\u7684\u5b57\u4e32\u61c9\u8a72\u8981\u88ab\u81ea\u52d5\u5730\u586b\u5beb\u5165\u52a0\u5bc6\u4e4b\u4e00\u6b21\u6027\u5bc6\u78bc(OTP)\u3002",
"et": "M\u00f5ned teenused n\u00f5uavad autentimist. Autentimiseks kl\u00f5psa YubiKey'l olevat nuppu. Allpool olev v\u00e4li t\u00e4idetakse automaatselt turvalise \u00fchekordse parooliga.",
"he": "\u05e9\u05e8\u05d5\u05ea \u05db\u05dc\u05e9\u05d4\u05d5 \u05d3\u05d5\u05e8\u05e9 \u05d4\u05d6\u05d3\u05d4\u05d5\u05ea. \u05dc\u05d4\u05d6\u05d3\u05d4\u05d5\u05ea, \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05d9\u05d5\u05d1\u05d9\u05e7\u05d9 \u05e9\u05dc\u05da. \u05d4\u05e9\u05d3\u05d4 \u05de\u05ea\u05d7\u05ea \u05d9\u05ea\u05de\u05dc\u05d0 \u05d1\u05d0\u05d5\u05e4\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05e2\u05dd \u05e1\u05d9\u05e1\u05de\u05d4 \u05d7\u05d3 \u05e4\u05e2\u05de\u05d9\u05ea \u05de\u05d0\u05d5\u05d1\u05d8\u05d7\u05ea.",
"ru": "\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c YubiKey. \u0412 \u043f\u043e\u043b\u0435 \u043d\u0438\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c.",
"zh": "\u67d0\u4e9b\u670d\u52a1\u8bf7\u6c42\u8ba4\u8bc1\u3002\u4e3a\u4e86\u8ba4\u8bc1\uff0c\u8bf7\u70b9\u51fb\u4f60\u7684YubiKey\u6309\u94ae\uff0c\u4e0b\u5217\u533a\u57df\u5e94\u8be5\u4f1a\u88ab\u81ea\u52a8\u586b\u5145\u6210\u4e00\u6b21\u6027\u5b89\u5168\u5bc6\u7801",
"ar": "\u0628\u0639\u0636 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u062a\u062a\u0637\u0644\u0628 \u062a\u0635\u062f\u064a\u0642\u0627\u064b. \u0644\u0644\u062a\u0635\u062f\u064a\u0642 \u0623\u0636\u063a\u0637 \u0627\u0644\u0632\u0631 \u0627\u0644\u0645\u0648\u062c\u0648\u062f \u0639\u0644\u064a YubiKey. \u0645\u0645\u0627 \u0633\u064a\u0624\u062f\u064a \u0644\u0645\u0644\u0621 \u0627\u0644\u062d\u0642\u0644 \u0623\u062f\u0646\u0627\u0647 \u0628\u0643\u0644\u0645\u0629 \u0633\u0631 \u0648\u0627\u062d\u062f\u0629 \u0627\u0645\u0646\u0647 \u0627\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a\u0627\u064b",
"lv": "K\u0101ds serviss prasa autentifik\u0101ciju. Klik\u0161\u0137iniet YubiKey pogu. Ievadlauks zem\u0101k autom\u0101tiski tiks aizpild\u012bts ar dro\u0161u vienreiz\u0113ju paroli.",
"id": "Beberapa layanan meminta autentifikasi. Untuk melakukan autentifikasi, klik tombol pada YubiKey Anda. Field dibawah seharusnya secara otomatis akan diisi dengan one-time-password yang aman.",
"sr": "Neki od servisa je zatra\u017eio da se autentifikujete. Da biste se autentifikovali pritisnite dugme na va\u0161em YubiKey ure\u0111aju. Nakon toga bi u polje ispod trebala biti automatski upisana jednokratna lozinka.",
"ro": "Un serviciu a cerut s\u0103 v\u0103 autentifica\u021bi. Pentru autentificare, ap\u0103sa\u021bi butonul de pe YubiKey. C\u00e2mpul de mai jos va fi completat automat cu o parol\u0103 de unic\u0103 folosin\u021b\u0103.",
"cs": "N\u011bkter\u00e1 slu\u017eba si vy\u017e\u00e1dala autentizaci. K p\u0159ihl\u00e1\u0161en\u00ed klikn\u011bte na v\u00e1\u0161 YubiKey. Spodn\u00ed pol\u00ed\u010dko by se pot\u00e9 m\u011blo automaticky vyplnit bezpe\u010dn\u00fdm jednor\u00e1zov\u00fdm heslem.",
"eu": "Zerbitzu batek kautotzeko eskatu du. Kautotzeko, klikatu zure YubiKey botoia. Behean kokatutako eremua automatikoki bete beharko litzateke erabilera bakarreko (OTP) pasahitz seguru batekin",
"af": "Sommige dienste vereis verifikasie. Kliek op jou YubiKey knoppie vir verifikasie. Die onderstaande veld sal dan outomaties gevul word met 'n veilige een-slag-wagwoord.",
"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2 \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 YubiKey \u03bc\u03ad\u03c3\u03c9 \u03c4\u03bf\u03c5 \u03bf\u03c0\u03bf\u03af\u03bf\u03c5 \u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03b5\u03b4\u03af\u03bf \u03b8\u03b1 \u03c3\u03c5\u03bc\u03c0\u03bb\u03b7\u03c1\u03c9\u03b8\u03b5\u03af \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03bc\u03b5 \u03ad\u03bd\u03b1\u03bd \u03b1\u03c3\u03c6\u03b1\u03bb\u03ae \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03bc\u03b9\u03b1\u03c2 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2.",
"ca": "Alguns serveis han sol·licitat l’autenticació. Per autenticar, feu clic al botó del vostre YubiKey. El camp següent s’haurà de completar amb una contrasenya segura única."
}
}
<?php
namespace SimpleSAML\Module\authYubiKey\Auth\Process;
/*
* Copyright (C) 2009 Simon Josefsson <simon@yubico.com>.
*
* This file is part of SimpleSAMLphp
*
* SimpleSAMLphp is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* SimpleSAMLphp 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License License along with GNU SASL Library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
/**
* A processing filter to replace the 'otp' attribute with an attribute
* 'yubiPrefix' that contains the static YubiKey prefix.
*
* Before:
* otp=ekhgjhbctrgnubeeklijcibbgjnbtjlffdnjbhjluvur
*
* After:
* otp undefined
* yubiPrefix=ekhgjhbctrgn
*
* You use it by adding it as an authentication filter in config.php:
*
* 'authproc.idp' => array(
* ...
* 90 => 'authYubiKey:OTP2YubiPrefix',
* ...
* );
*
*/
class OTP2YubiPrefix extends \SimpleSAML\Auth\ProcessingFilter
{
/**
* Filter out YubiKey 'otp' attribute and replace it with
* a 'yubiPrefix' attribute that leaves out the dynamic part.
*
* @param array &$state The state we should update.
* @return void
*/
public function process(&$state)
{
assert(is_array($state));
assert(array_key_exists('Attributes', $state));
$attributes = $state['Attributes'];
\SimpleSAML\Logger::debug('OTP2YubiPrefix: enter with attributes: '.implode(',', array_keys($attributes)));
$otps = $attributes['otp'];
$otp = $otps['0'];
$token_size = 32;
$identity = substr($otp, 0, strlen($otp) - $token_size);
$attributes['yubiPrefix'] = [$identity];
\SimpleSAML\Logger::info(
'OTP2YubiPrefix: otp: '.$otp.' identity: '.$identity.' (otp keys: '.implode(',', array_keys($otps)).')'
);
unset($attributes['otp']);
\SimpleSAML\Logger::debug('OTP2YubiPrefix: leaving with attributes: '.implode(',', array_keys($attributes)));
}
}
<?php
namespace SimpleSAML\Module\authYubiKey\Auth\Source;
/*
* Copyright (C) 2009 Andreas Åkre Solberg <andreas.solberg@uninett.no>
* Copyright (C) 2009 Simon Josefsson <simon@yubico.com>.
*
* This file is part of SimpleSAMLphp
*
* SimpleSAMLphp is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* SimpleSAMLphp 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License License along with GNU SASL Library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
/**
* YubiKey authentication module, see http://www.yubico.com/developers/intro/
*
* Configure it by adding an entry to config/authsources.php such as this:
*
* 'yubikey' => array(
* 'authYubiKey:YubiKey',
* 'id' => 997,
* 'key' => 'b64hmackey',
* ),
*
* To generate your own client id/key you will need one YubiKey, and then
* go to http://yubico.com/developers/api/
*
* @package SimpleSAMLphp
*/
class YubiKey extends \SimpleSAML\Auth\Source
{
/**
* The string used to identify our states.
*/
const STAGEID = '\SimpleSAML\Module\authYubiKey\Auth\Source\YubiKey.state';
/**
* The number of characters of the OTP that is the secure token.
* The rest is the user id.
*/
const TOKENSIZE = 32;
/**
* The key of the AuthId field in the state.
*/
const AUTHID = '\SimpleSAML\Module\authYubiKey\Auth\Source\YubiKey.AuthId';
/**
* The client id/key for use with the Auth_Yubico PHP module.
* @var string
*/
private $yubi_id;
/** @var string */
private $yubi_key;
/**
* Constructor for this authentication source.
*
* @param array $info Information about this authentication source.
* @param array $config Configuration.
*/
public function __construct($info, $config)
{
assert(is_array($info));
assert(is_array($config));
// Call the parent constructor first, as required by the interface
parent::__construct($info, $config);
if (array_key_exists('id', $config)) {
$this->yubi_id = $config['id'];
}
if (array_key_exists('key', $config)) {
$this->yubi_key = $config['key'];
}
}
/**
* Initialize login.
*
* This function saves the information about the login, and redirects to a
* login page.
*
* @param array &$state Information about the current authentication.
* @return void
*/
public function authenticate(&$state)
{
assert(is_array($state));
// We are going to need the authId in order to retrieve this authentication source later
$state[self::AUTHID] = $this->authId;
$id = \SimpleSAML\Auth\State::saveState($state, self::STAGEID);
$url = \SimpleSAML\Module::getModuleURL('authYubiKey/yubikeylogin.php');
\SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['AuthState' => $id]);
}
/**
* Handle login request.
*
* This function is used by the login form (core/www/loginuserpass.php) when the user
* enters a username and password. On success, it will not return. On wrong
* username/password failure, it will return the error code. Other failures will throw an
* exception.
*
* @param string $authStateId The identifier of the authentication state.
* @param string $otp The one time password entered-
* @return string|null Error code in the case of an error.
*/
public static function handleLogin($authStateId, $otp)
{
assert(is_string($authStateId));
assert(is_string($otp));
/* Retrieve the authentication state. */
$state = \SimpleSAML\Auth\State::loadState($authStateId, self::STAGEID);
if (is_null($state)) {
throw new \SimpleSAML\Error\NoState();
}
/* Find authentication source. */
assert(array_key_exists(self::AUTHID, $state));
/** @var \SimpleSAML\Module\authYubiKey\Auth\Source\YubiKey $source */
$source = \SimpleSAML\Auth\Source::getById($state[self::AUTHID]);
if ($source === null) {
throw new \Exception('Could not find authentication source with id '.$state[self::AUTHID]);
}
try {
/* Attempt to log in. */
$attributes = $source->login($otp);
} catch (\SimpleSAML\Error\Error $e) {
/* An error occurred during login. Check if it is because of the wrong
* username/password - if it is, we pass that error up to the login form,
* if not, we let the generic error handler deal with it.
*/
if ($e->getErrorCode() === 'WRONGUSERPASS') {
return 'WRONGUSERPASS';
}
/* Some other error occurred. Rethrow exception and let the generic error
* handler deal with it.
*/
throw $e;
}
$state['Attributes'] = $attributes;
\SimpleSAML\Auth\Source::completeAuth($state);
return null;
}
/**
* Return the user id part of a one time passord
*
* @param string $otp
* @return string
*/
public static function getYubiKeyPrefix($otp)
{
$uid = substr($otp, 0, strlen($otp) - self::TOKENSIZE);
return $uid;
}
/**
* Attempt to log in using the given username and password.
*
* On a successful login, this function should return the users attributes. On failure,
* it should throw an exception. If the error was caused by the user entering the wrong
* username or password, a \SimpleSAML\Error\Error('WRONGUSERPASS') should be thrown.
*
* Note that both the username and the password are UTF-8 encoded.
*
* @param string $otp
* @return array Associative array with the users attributes.
*/
protected function login($otp)
{
assert(is_string($otp));
require_once dirname(dirname(dirname(dirname(__FILE__)))).'/libextinc/Yubico.php';
try {
$yubi = new \Auth_Yubico($this->yubi_id, $this->yubi_key);
$yubi->verify($otp);
$uid = self::getYubiKeyPrefix($otp);
$attributes = ['uid' => [$uid]];
} catch (\Exception $e) {
\SimpleSAML\Logger::info(
'YubiKey:'.$this->authId.': Validation error (otp '.$otp.'), debug output: '.$yubi->getLastResponse()
);
throw new \SimpleSAML\Error\Error('WRONGUSERPASS', $e);
}
\SimpleSAML\Logger::info(
'YubiKey:'.$this->authId.': YubiKey otp '.$otp.' validated successfully: '.$yubi->getLastResponse()
);
return $attributes;
}
}
<?php
/**
* Class for verifying Yubico One-Time-Passcodes
*
* LICENSE:
*
* Copyright (c) 2007, 2008 Simon Josefsson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Auth
* @package Auth_Yubico
* @author Simon Josefsson <simon@yubico.com>
* @copyright 2008 Simon Josefsson
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Yubico.php,v 1.7 2007-10-22 12:56:14 jas Exp $
* @link http://yubico.com/
*/
/**
* Class for verifying Yubico One-Time-Passcodes
*
* Simple example:
* <code>
* require_once 'Auth/Yubico.php';
* $yubi = &new Auth_Yubico('42');
* $auth = $yubi->verify("ccbbddeertkrctjkkcglfndnlihhnvekchkcctif");
* if (PEAR::isError($auth)) {
* print "<p>Authentication failed: " . $auth->getMessage();
* print "<p>Debug output from server: " . $yubi->getLastResponse();
* } else {
* print "<p>You are authenticated!";
* }
* </code>
*/
class Auth_Yubico
{
/**#@+
* @access private
*/
/**
* Yubico client ID
* @var string
*/
private $id;
/**
* Yubico client key
* @var string
*/
private $key;
/**
* Response from server
* @var string
*/
private $response;
/**
* Constructor
*
* Sets up the object
* @param string $id The client identity
* @param string $key The client MAC key (optional)
* @access public
*/
public function __construct($id, $key = '')
{
$this->id = $id;
$this->key = base64_decode($key);
}
/**
* Return the last data received from the server, if any.
*
* @return string Output from server.
* @access public
*/
public function getLastResponse()
{
return $this->response;
}
// TODO? Add functions to get parsed parts of server response?
/**
* Verify Yubico OTP
*
* @param string $token Yubico OTP
* @return mixed PEAR error on error, true otherwise
* @access public
*/
public function verify($token)
{
$parameters = "id=".$this->id."&otp=".$token;
// Generate signature
if ($this->key <> "") {
$signature = base64_encode(hash_hmac('sha1', $parameters, $this->key, true));
$parameters .= '&h='.$signature;
}
// Support https
$url = "https://api.yubico.com/wsapi/verify?".$parameters;
/** @var string $responseMsg */
$responseMsg = \SimpleSAML\Utils\HTTP::fetch($url);
$out = [];
if (preg_match("/status=([a-zA-Z0-9_]+)/", $responseMsg, $out) !== 1) {
throw new Exception('Could not parse response');
}
$status = $out[1];
// Verify signature
if ($this->key <> "") {
$rows = explode("\r\n", $responseMsg);
$response = [];
foreach ($rows as $val) {
// = is also used in BASE64 encoding so we only replace the first = by # which is not used in BASE64
$val = preg_replace('/=/', '#', $val, 1);
$row = explode("#", $val);
$response[$row[0]] = (isset($row[1])) ? $row[1] : "";
}
$check = 'status='.$response['status'].'&t='.$response['t'];
$checksignature = base64_encode(hash_hmac('sha1', $check, $this->key, true));
if ($response['h'] != $checksignature) {
throw new Exception('Checked Signature failed');
}
}
if ($status != 'OK') {
throw new Exception('Status was not OK: '.$status);
}
return true;
}
}
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: af\n"
"Language-Team: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Sommige dienste vereis verifikasie. Kliek op jou YubiKey knoppie vir "
"verifikasie. Die onderstaande veld sal dan outomaties gevul word met 'n "
"veilige een-slag-wagwoord."
msgid "{authYubiKey:yubikey:header}"
msgstr "Meld aan met YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Sommige dienste vereis verifikasie. Kliek op jou YubiKey knoppie vir "
"verifikasie. Die onderstaande veld sal dan outomaties gevul word met 'n "
"veilige een-slag-wagwoord."
msgid "Login with YubiKey"
msgstr "Meld aan met YubiKey"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: ar\n"
"Language-Team: \n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n>=3 "
"&& n<=10 ? 3 : n>=11 && n<=99 ? 4 : 5)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"بعض الخدمات تتطلب تصديقاً. للتصديق أضغط الزر الموجود علي YubiKey. مما "
"سيؤدي لملء الحقل أدناه بكلمة سر واحدة امنه اتوماتيكياً"
msgid "{authYubiKey:yubikey:header}"
msgstr "أدخل مستخدماًYubiKey "
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"بعض الخدمات تتطلب تصديقاً. للتصديق أضغط الزر الموجود علي YubiKey. مما "
"سيؤدي لملء الحقل أدناه بكلمة سر واحدة امنه اتوماتيكياً"
msgid "Login with YubiKey"
msgstr "أدخل مستخدماًYubiKey "
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: cs\n"
"Language-Team: \n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Některá služba si vyžádala autentizaci. K přihlášení klikněte na váš "
"YubiKey. Spodní políčko by se poté mělo automaticky vyplnit bezpečným "
"jednorázovým heslem."
msgid "{authYubiKey:yubikey:header}"
msgstr "Přihlášení pomocí YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Některá služba si vyžádala autentizaci. K přihlášení klikněte na váš "
"YubiKey. Spodní políčko by se poté mělo automaticky vyplnit bezpečným "
"jednorázovým heslem."
msgid "Login with YubiKey"
msgstr "Přihlášení pomocí YubiKey"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: da\n"
"Language-Team: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Nogle services kræver autentificering. For at autentificere klik på "
"knappen på din YubiKey. Feltet herunder skulle nu automatisk blive "
"udfyldt med et sikkert one-time-password."
msgid "{authYubiKey:yubikey:header}"
msgstr "Login med YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Nogle services kræver autentificering. For at autentificere klik på "
"knappen på din YubiKey. Feltet herunder skulle nu automatisk blive "
"udfyldt med et sikkert one-time-password."
msgid "Login with YubiKey"
msgstr "Login med YubiKey"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: de\n"
"Language-Team: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Ein Service verlangt nach Ihrer validierung. Bitte drücken Sie den Knopf "
"auf Ihrem YubiKey. Ihr sicheres Einmalpasswort wird dann in das "
"vorgesehene Feld geschrieben."
msgid "{authYubiKey:yubikey:header}"
msgstr "Anmelden mit YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Ein Service verlangt nach Ihrer validierung. Bitte drücken Sie den Knopf "
"auf Ihrem YubiKey. Ihr sicheres Einmalpasswort wird dann in das "
"vorgesehene Feld geschrieben."
msgid "Login with YubiKey"
msgstr "Anmelden mit YubiKey"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: el\n"
"Language-Team: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Η ταυτοποίησή σας απαιτεί τη χρήση YubiKey μέσω του οποίου το παρακάτω "
"πεδίο θα συμπληρωθεί αυτόματα με έναν ασφαλή κωδικό μιας χρήσης."
msgid "{authYubiKey:yubikey:header}"
msgstr "Είσοδος με YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Η ταυτοποίησή σας απαιτεί τη χρήση YubiKey μέσω του οποίου το παρακάτω "
"πεδίο θα συμπληρωθεί αυτόματα με έναν ασφαλή κωδικό μιας χρήσης."
msgid "Login with YubiKey"
msgstr "Είσοδος με YubiKey"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: en\n"
"Language-Team: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgid "{authYubiKey:yubikey:header}"
msgstr "Login with YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgid "Login with YubiKey"
msgstr "Login with YubiKey"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SimpleSAMLphp 1.15\n"
"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
"POT-Creation-Date: 2016-10-12 09:23+0200\n"
"PO-Revision-Date: 2016-10-14 12:14+0200\n"
"Last-Translator: \n"
"Language: es\n"
"Language-Team: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
msgid "{authYubiKey:yubikey:intro}"
msgstr ""
"Un servicio ha solicitado que se autentique. Para autenticarse, haga clic"
" en el botón de su YubiKey. El campo situado debajo debería rellenarse "
"automática con una clave de un único uso (OTP) segura"
msgid "{authYubiKey:yubikey:header}"
msgstr "Accede utilizando YubiKey"
msgid ""
"Some service requested authentication. To authenticate, click the button "
"on your YubiKey. The field below should then automatically be filled out "
"with a secure one-time-password."
msgstr ""
"Un servicio ha solicitado que se autentique. Para autenticarse, haga clic"
" en el botón de su YubiKey. El campo situado debajo debería rellenarse "
"automática con una clave de un único uso (OTP) segura"
msgid "Login with YubiKey"
msgstr "Accede utilizando YubiKey"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment