diff options
author | Brian Evans <grknight@gentoo.org> | 2020-10-02 15:07:11 -0400 |
---|---|---|
committer | Brian Evans <grknight@gentoo.org> | 2020-10-02 15:07:11 -0400 |
commit | e7e713baba52955dea8106c4b050781203280127 (patch) | |
tree | 6c49ddf8c0741ce2a4b57804c44ddf7675860a54 | |
parent | Update OpenIDConnect to 1.35 (diff) | |
download | extensions-e7e713baba52955dea8106c4b050781203280127.tar.gz extensions-e7e713baba52955dea8106c4b050781203280127.tar.bz2 extensions-e7e713baba52955dea8106c4b050781203280127.zip |
Update PluggableAuth to 1.35
Signed-off-by: Brian Evans <grknight@gentoo.org>
41 files changed, 1135 insertions, 170 deletions
diff --git a/PluggableAuth/.dir-locals.el b/PluggableAuth/.dir-locals.el deleted file mode 100644 index 22804955..00000000 --- a/PluggableAuth/.dir-locals.el +++ /dev/null @@ -1,88 +0,0 @@ -((nil . ((mode . flycheck) - (mode . company) - (mode . edep) - (mode . subword) - (tab-width . 4) - (c-basic-offset . 4) - (indent-tabs-mode . t) - (eval . (progn (when (fboundp 'delete-trailing-whitespace) - (delete-trailing-whitespace)) - (tabify (point-min) (point-max)))) - (c-hanging-braces-alist - (defun-open after) - (block-open after) - (defun-close)) - (c-offsets-alist . ( - (access-label . -) - (annotation-top-cont . 0) - (annotation-var-cont . +) - (arglist-close . php-lineup-arglist-close) - (arglist-cont-nonempty first - php-lineup-cascaded-calls - c-lineup-arglist) - (arglist-intro . php-lineup-arglist-intro) - (block-close . 0) - (block-open . 0) - (brace-entry-open . 0) - (brace-list-close . 0) - (brace-list-entry . 0) - (brace-list-intro . +) - (brace-list-open . 0) - (c . c-lineup-C-comments) - (case-label . 0) - (catch-clause . 0) - (class-close . 0) - (comment-intro . 0) - (composition-close . 0) - (composition-open . 0) - (cpp-define-intro c-lineup-cpp-define +) - (cpp-macro . [0]) - (cpp-macro-cont . +) - (defun-block-intro . +) - (defun-close . 0) - (defun-open . 0) - (do-while-closure . 0) - (else-clause . 0) - (extern-lang-close . 0) - (extern-lang-open . 0) - (friend . 0) - (func-decl-cont . +) - (inclass . +) - (incomposition . +) - (inexpr-class . +) - (inexpr-statement . +) - (inextern-lang . +) - (inher-cont . c-lineup-multi-inher) - (inher-intro . +) - (inlambda . 0) - (inline-close . 0) - (inline-open . 0) - (inmodule . +) - (innamespace . +) - (knr-argdecl . 0) - (knr-argdecl-intro . +) - (label . +) - (lambda-intro-cont . +) - (member-init-cont . c-lineup-multi-inher) - (member-init-intro . +) - (module-close . 0) - (module-open . 0) - (namespace-close . 0) - (namespace-open . 0) - (statement . 0) - (statement-block-intro . +) - (statement-case-intro . +) - (statement-case-open . 0) - (statement-cont first - php-lineup-cascaded-calls - php-lineup-string-cont +) - (stream-op . c-lineup-streamop) - (string . c-lineup-dont-change) - (substatement . +) - (substatement-label . 2) - (substatement-open . 0) - (template-args-cont c-lineup-template-args +) - (topmost-intro . 0) - (topmost-intro-cont first php-lineup-cascaded-calls +) - )) - ))) diff --git a/PluggableAuth/.editorconfig b/PluggableAuth/.editorconfig new file mode 100644 index 00000000..d289792a --- /dev/null +++ b/PluggableAuth/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +indent_style = tab +indent_size = tab +tab_width = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/PluggableAuth/.phpcs.xml b/PluggableAuth/.phpcs.xml index b915cf83..5758e1ea 100644 --- a/PluggableAuth/.phpcs.xml +++ b/PluggableAuth/.phpcs.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <ruleset> - <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki" /> + <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki"> + <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" /> + <exclude name="PSR12.Properties.ConstantVisibility.NotFound" /> + </rule> <file>.</file> <arg name="extensions" value="php"/> <arg name="encoding" value="UTF-8"/> diff --git a/PluggableAuth/CODE_OF_CONDUCT.md b/PluggableAuth/CODE_OF_CONDUCT.md index d8e5d087..498acf76 100644 --- a/PluggableAuth/CODE_OF_CONDUCT.md +++ b/PluggableAuth/CODE_OF_CONDUCT.md @@ -1 +1 @@ -The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct). +The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct). diff --git a/PluggableAuth/composer.json b/PluggableAuth/composer.json index 0e7c221d..49036989 100644 --- a/PluggableAuth/composer.json +++ b/PluggableAuth/composer.json @@ -1,5 +1,8 @@ { "name": "mediawiki/pluggable-auth", + "extra": { + "installer-name": "PluggableAuth" + }, "license": "MIT", "type": "mediawiki-extension", "homepage": "https://www.mediawiki.org/wiki/Extension:PluggableAuth", @@ -18,10 +21,10 @@ } ], "require-dev": { - "jakub-onderka/php-parallel-lint": "1.0.0", - "jakub-onderka/php-console-highlighter": "0.3.2", - "mediawiki/minus-x": "0.3.1", - "mediawiki/mediawiki-codesniffer": "18.0.0", + "mediawiki/mediawiki-codesniffer": "31.0.0", + "mediawiki/minus-x": "1.1.0", + "php-parallel-lint/php-console-highlighter": "0.5.0", + "php-parallel-lint/php-parallel-lint": "1.2.0", "phpmd/phpmd": "~2.1" }, "scripts": { diff --git a/PluggableAuth/extension.json b/PluggableAuth/extension.json index 39667cdd..7d3131ee 100644 --- a/PluggableAuth/extension.json +++ b/PluggableAuth/extension.json @@ -1,12 +1,13 @@ { "name": "PluggableAuth", - "version": "5.4", + "version": "5.7", "author": [ "[https://www.mediawiki.org/wiki/User:Cindy.cicalese Cindy Cicalese]" ], "url": "https://www.mediawiki.org/wiki/Extension:PluggableAuth", "descriptionmsg": "pluggableauth-desc", "type": "other", + "license-name": "MIT", "SpecialPages": { "PluggableAuthLogin": "PluggableAuthLogin" }, @@ -32,7 +33,8 @@ "UserLogoutComplete": "PluggableAuthHooks::deauthenticate", "AuthChangeFormFields": "PluggableAuthHooks::onAuthChangeFormFields", "PersonalUrls": "PluggableAuthHooks::modifyLoginURLs", - "BeforeInitialize": "PluggableAuthHooks::doBeforeInitialize" + "BeforeInitialize": "PluggableAuthHooks::doBeforeInitialize", + "LocalUserCreated": "PluggableAuthHooks::onLocalUserCreated" }, "AuthManagerAutoConfig": { "primaryauth": { diff --git a/PluggableAuth/gitinfo.json b/PluggableAuth/gitinfo.json deleted file mode 100644 index c7656a1e..00000000 --- a/PluggableAuth/gitinfo.json +++ /dev/null @@ -1 +0,0 @@ -{"branch": "300ac44dde702b9f36fab06c7d75f943d89c510c\n", "headSHA1": "300ac44dde702b9f36fab06c7d75f943d89c510c\n", "remoteURL": "https://gerrit-replica.wikimedia.org/r/mediawiki/extensions/PluggableAuth", "headCommitDate": "1523683714", "head": "300ac44dde702b9f36fab06c7d75f943d89c510c\n"}
\ No newline at end of file diff --git a/PluggableAuth/i18n/ar.json b/PluggableAuth/i18n/ar.json new file mode 100644 index 00000000..3bf569a1 --- /dev/null +++ b/PluggableAuth/i18n/ar.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "Meno25", + "ديفيد" + ] + }, + "pluggableauth-desc": "يوفر إطارا للتوثيق والتخويل القابل للتوصيل", + "pluggableauth-not-authorized": "{{GENDER:$1|المستخدم غير مخول|المستخدمة غير مخولة}} $1.", + "pluggableauth-authentication-failure": "لا يمكن مصادقة المستخدم.", + "pluggableauth-authentication-workflow-failure": "فشل سير عمل المصادقة.", + "pluggableauth-loginbutton-label": "تسجيل الدخول باستخدام PluggableAuth", + "pluggableauth-loginbutton-help": "يصادق عليك باستخدام PluggableAuth", + "pluggableauth-fatal-error": "خطأ قاتل عند التحقق من هوية المستخدم." +} diff --git a/PluggableAuth/i18n/ast.json b/PluggableAuth/i18n/ast.json index 0c7e1a82..cd5fa8fa 100644 --- a/PluggableAuth/i18n/ast.json +++ b/PluggableAuth/i18n/ast.json @@ -6,8 +6,9 @@ }, "pluggableauth-desc": "Ufre un marcu p'autenticación y autorización coneutable", "pluggableauth-not-authorized": "{{GENDER:$1|L'usuariu|La usuaria}} $1 nun ta {{GENDER:$1|autorizáu|autorizada}}.", - "pluggableauth-authentication-failure": "Fallu n'autenticación o autorización.", + "pluggableauth-authentication-failure": "L'usuariu nun pue autenticase.", "pluggableauth-authentication-workflow-failure": "Fallu nel procesu d'autenticación.", "pluggableauth-loginbutton-label": "Aniciar sesión con PluggableAuth", - "pluggableauth-loginbutton-help": "Autentícate con PluggableAuth" + "pluggableauth-loginbutton-help": "Autentícate con PluggableAuth", + "pluggableauth-fatal-error": "Error fatal al identificar al usuariu." } diff --git a/PluggableAuth/i18n/be-tarask.json b/PluggableAuth/i18n/be-tarask.json index c8507ea1..e32a74df 100644 --- a/PluggableAuth/i18n/be-tarask.json +++ b/PluggableAuth/i18n/be-tarask.json @@ -9,5 +9,6 @@ "pluggableauth-authentication-failure": "Удзельнік ня можа быць аўтэнтыфікаваны.", "pluggableauth-authentication-workflow-failure": "Памылка працэсу аўтэнтыфікацыі.", "pluggableauth-loginbutton-label": "Увайсьці ў сыстэму з дапамогай PluggableAuth", - "pluggableauth-loginbutton-help": "Аўтэнтыфікуе вас з дапамогай PluggableAuth" + "pluggableauth-loginbutton-help": "Аўтэнтыфікуе вас з дапамогай PluggableAuth", + "pluggableauth-fatal-error": "Фатальная памылка пры аўтэнтыфікацыі ўдезльніка." } diff --git a/PluggableAuth/i18n/bn.json b/PluggableAuth/i18n/bn.json new file mode 100644 index 00000000..3cb1059a --- /dev/null +++ b/PluggableAuth/i18n/bn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "আফতাবুজ্জামান" + ] + }, + "pluggableauth-fatal-error": "ব্যবহারকারী অনুমোদনের সময় মারাত্মক ত্রুটি।" +} diff --git a/PluggableAuth/i18n/de.json b/PluggableAuth/i18n/de.json index f3723e5c..bc403c78 100644 --- a/PluggableAuth/i18n/de.json +++ b/PluggableAuth/i18n/de.json @@ -9,5 +9,6 @@ "pluggableauth-authentication-failure": "Der Benutzer konnte nicht authentifiziert werden.", "pluggableauth-authentication-workflow-failure": "Authentifikations-Workflow-Fehler.", "pluggableauth-loginbutton-label": "Mit PluggableAuth anmelden", - "pluggableauth-loginbutton-help": "Authentifiziert dich mit PluggableAuth" + "pluggableauth-loginbutton-help": "Authentifiziert dich mit PluggableAuth", + "pluggableauth-fatal-error": "Fataler Fehler bei der Authentifizierung des Benutzers." } diff --git a/PluggableAuth/i18n/el.json b/PluggableAuth/i18n/el.json index 5ebbcbb3..d216e4ef 100644 --- a/PluggableAuth/i18n/el.json +++ b/PluggableAuth/i18n/el.json @@ -4,5 +4,6 @@ "Nikosgranturismogt" ] }, + "pluggableauth-not-authorized": "Ο {{GENDER:$1|Χρήστης}} $1 δεν είναι εξουσιοδοτημένος.", "pluggableauth-loginbutton-label": "Συνδεθείτε με το PluggableAuth" } diff --git a/PluggableAuth/i18n/en.json b/PluggableAuth/i18n/en.json index 575186c3..6ca6c93a 100644 --- a/PluggableAuth/i18n/en.json +++ b/PluggableAuth/i18n/en.json @@ -9,5 +9,6 @@ "pluggableauth-authentication-failure": "User cannot be authenticated.", "pluggableauth-authentication-workflow-failure": "Authentication workflow failure.", "pluggableauth-loginbutton-label": "Log in with PluggableAuth", - "pluggableauth-loginbutton-help": "Authenticates you with PluggableAuth" + "pluggableauth-loginbutton-help": "Authenticates you with PluggableAuth", + "pluggableauth-fatal-error": "Fatal error authenticating user." } diff --git a/PluggableAuth/i18n/fr.json b/PluggableAuth/i18n/fr.json index faeac847..8438e164 100644 --- a/PluggableAuth/i18n/fr.json +++ b/PluggableAuth/i18n/fr.json @@ -1,9 +1,9 @@ { "@metadata": { "authors": [ - "Wladek92", "Gomoko", - "Urhixidur" + "Urhixidur", + "Wladek92" ] }, "pluggableauth-desc": "Fournit le cadre d’application pour les greffons d’authentication et d’autorisation", @@ -11,5 +11,6 @@ "pluggableauth-authentication-failure": "L’utilisateur n’a pas pu être authentifié.", "pluggableauth-authentication-workflow-failure": "Échec du processus d’authentification.", "pluggableauth-loginbutton-label": "Se connecter avec PluggableAuth", - "pluggableauth-loginbutton-help": "Vous authentifie avec PluggableAuth" + "pluggableauth-loginbutton-help": "Vous authentifie avec PluggableAuth", + "pluggableauth-fatal-error": "Erreur fatale durant l'authentification de l'utilisateur." } diff --git a/PluggableAuth/i18n/it.json b/PluggableAuth/i18n/it.json index bdde8193..b52838c4 100644 --- a/PluggableAuth/i18n/it.json +++ b/PluggableAuth/i18n/it.json @@ -6,5 +6,6 @@ }, "pluggableauth-not-authorized": "Utente $1 non {{GENDER:$1|autorizzato|autorizzata|autorizzato/a}}.", "pluggableauth-loginbutton-label": "Accedi con PluggableAuth", - "pluggableauth-loginbutton-help": "Autenticati con PluggableAuth" + "pluggableauth-loginbutton-help": "Autenticati con PluggableAuth", + "pluggableauth-fatal-error": "Errore irreversibile durante l'autenticazione dell'utente." } diff --git a/PluggableAuth/i18n/ko.json b/PluggableAuth/i18n/ko.json index 96e670f1..778be8d2 100644 --- a/PluggableAuth/i18n/ko.json +++ b/PluggableAuth/i18n/ko.json @@ -8,5 +8,6 @@ "pluggableauth-desc": "플러그 가능한 식별과 인증을 위한 프레임워크 제공", "pluggableauth-not-authorized": "$1 {{GENDER:$1|사용자}}가 인증되지 않았습니다.", "pluggableauth-authentication-failure": "사용자를 인증할 수 없습니다.", - "pluggableauth-loginbutton-label": "PluggableAuth로 로그인" + "pluggableauth-loginbutton-label": "PluggableAuth로 로그인", + "pluggableauth-fatal-error": "사용자 인증 도중 치명적인 오류가 발생했습니다." } diff --git a/PluggableAuth/i18n/mk.json b/PluggableAuth/i18n/mk.json index efed3479..64dc419a 100644 --- a/PluggableAuth/i18n/mk.json +++ b/PluggableAuth/i18n/mk.json @@ -6,8 +6,9 @@ }, "pluggableauth-desc": "Дава рамка за приклучна заверка и овластување", "pluggableauth-not-authorized": "{{GENDER:$1|Корисникот}} $1 не е овластен.", - "pluggableauth-authentication-failure": "Неуспешна заверка или овластување.", + "pluggableauth-authentication-failure": "Не можев да го заверам корисникот.", "pluggableauth-authentication-workflow-failure": "Неупех во работниот тек на заверката.", "pluggableauth-loginbutton-label": "Најава со PluggableAuth", - "pluggableauth-loginbutton-help": "Ве заверува со PluggableAuth" + "pluggableauth-loginbutton-help": "Ве заверува со PluggableAuth", + "pluggableauth-fatal-error": "Се појави кобна грешка при заверката на корисникот." } diff --git a/PluggableAuth/i18n/nb.json b/PluggableAuth/i18n/nb.json new file mode 100644 index 00000000..ece259d6 --- /dev/null +++ b/PluggableAuth/i18n/nb.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Jon Harald Søby" + ] + }, + "pluggableauth-desc": "Gir et rammeverk for pluggbar autentisering og autorisering", + "pluggableauth-not-authorized": "{{GENDER:$1|Brukeren}} $1 er ikke autorisert.", + "pluggableauth-authentication-failure": "Brukeren kan ikke autentiseres.", + "pluggableauth-authentication-workflow-failure": "Feil under autentiseringsarbeidsflyt.", + "pluggableauth-loginbutton-label": "Logg inn med PluggableAuth", + "pluggableauth-loginbutton-help": "Autentiserer deg med PluggableAuth", + "pluggableauth-fatal-error": "Kritisk feil under autentisering av bruker." +} diff --git a/PluggableAuth/i18n/pt-br.json b/PluggableAuth/i18n/pt-br.json index 7f113da3..c0175494 100644 --- a/PluggableAuth/i18n/pt-br.json +++ b/PluggableAuth/i18n/pt-br.json @@ -9,5 +9,6 @@ "pluggableauth-authentication-failure": "O usuário não pode ser autenticado.", "pluggableauth-authentication-workflow-failure": "Falha no processo de autenticação.", "pluggableauth-loginbutton-label": "Iniciar sessão com PluggableAuth", - "pluggableauth-loginbutton-help": "Faz a sua autenticação com PluggableAuth" + "pluggableauth-loginbutton-help": "Faz a sua autenticação com PluggableAuth", + "pluggableauth-fatal-error": "Erro fatal na autenticação do usuário." } diff --git a/PluggableAuth/i18n/pt.json b/PluggableAuth/i18n/pt.json index 80bfa88a..a54588e2 100644 --- a/PluggableAuth/i18n/pt.json +++ b/PluggableAuth/i18n/pt.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Vitorvicentevalente", - "Hamilton Abreu" + "Hamilton Abreu", + "Vitorvicentevalente" ] }, "pluggableauth-desc": "Fornece uma estrutura para autenticação e autorização modulares", @@ -10,5 +10,6 @@ "pluggableauth-authentication-failure": "Não foi possível autenticar o utilizador.", "pluggableauth-authentication-workflow-failure": "Falha no processo de autenticação.", "pluggableauth-loginbutton-label": "Iniciar sessão com PluggableAuth", - "pluggableauth-loginbutton-help": "Faz a sua autenticação com PluggableAuth" + "pluggableauth-loginbutton-help": "Faz a sua autenticação com PluggableAuth", + "pluggableauth-fatal-error": "Erro fatal na autenticação do utilizador." } diff --git a/PluggableAuth/i18n/qqq.json b/PluggableAuth/i18n/qqq.json index c6f0b658..f64166aa 100644 --- a/PluggableAuth/i18n/qqq.json +++ b/PluggableAuth/i18n/qqq.json @@ -1,9 +1,9 @@ { "@metadata": { "authors": [ - "cicalese", "Liuxinyu970226", - "Umherirrender" + "Umherirrender", + "cicalese" ] }, "pluggableauth-desc": "{{desc|name=Pluggable Auth|url=https://www.mediawiki.org/wiki/Extension:PluggableAuth}}", @@ -11,5 +11,6 @@ "pluggableauth-authentication-failure": "Failure message when there is an authentication or authorization failure (e.g. User not authorized).", "pluggableauth-authentication-workflow-failure": "Failure message when there is an error in authentication workflow, such as an AuthenticationRequest being received in the wrong action.", "pluggableauth-loginbutton-label": "Used as label for the button shown in [[Special:UserLogin]].", - "pluggableauth-loginbutton-help": "Help message used for the Login with PluggableAuth button on [[Special:UserLogin]]." + "pluggableauth-loginbutton-help": "Help message used for the Login with PluggableAuth button on [[Special:UserLogin]].", + "pluggableauth-fatal-error": "Fatal error message." } diff --git a/PluggableAuth/i18n/roa-tara.json b/PluggableAuth/i18n/roa-tara.json index 0ec95f29..309ca2bd 100644 --- a/PluggableAuth/i18n/roa-tara.json +++ b/PluggableAuth/i18n/roa-tara.json @@ -5,5 +5,10 @@ ] }, "pluggableauth-desc": "Dèje 'nu framework pe attaccà autendicaziune e autorizzazziune", - "pluggableauth-not-authorized": "{{GENDER:$1|Utende}} $1 none autorizzate." + "pluggableauth-not-authorized": "{{GENDER:$1|Utende}} $1 none autorizzate.", + "pluggableauth-authentication-failure": "L'utende non ge pò essere autendicate.", + "pluggableauth-authentication-workflow-failure": "'U flusse de autendicazione ave fallite.", + "pluggableauth-loginbutton-label": "Tràse cu PluggableAuth", + "pluggableauth-loginbutton-help": "Autendicate cu PluggableAuth", + "pluggableauth-fatal-error": "Errore fatale sus a l'autendicazione de l'utende." } diff --git a/PluggableAuth/i18n/ru.json b/PluggableAuth/i18n/ru.json index 9a4bda29..5bd4b25d 100644 --- a/PluggableAuth/i18n/ru.json +++ b/PluggableAuth/i18n/ru.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Kareyac" + "Kareyac", + "Vlad5250" ] }, - "pluggableauth-authentication-failure": "Пользователь не может быть аутентифицирован." + "pluggableauth-authentication-failure": "Пользователь не может быть аутентифицирован.", + "pluggableauth-fatal-error": "Произошла фатальная ошибка при аутентификации участника." } diff --git a/PluggableAuth/i18n/sh.json b/PluggableAuth/i18n/sh.json new file mode 100644 index 00000000..7c3c3b6e --- /dev/null +++ b/PluggableAuth/i18n/sh.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Vlad5250" + ] + }, + "pluggableauth-not-authorized": "{{GENDER:$1|Korisnik}} $1 nije ovlašten.", + "pluggableauth-loginbutton-label": "Prijava preko PluggableAuth" +} diff --git a/PluggableAuth/i18n/sr-ec.json b/PluggableAuth/i18n/sr-ec.json new file mode 100644 index 00000000..b1ff0a4f --- /dev/null +++ b/PluggableAuth/i18n/sr-ec.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "BadDog" + ] + }, + "pluggableauth-fatal-error": "Неотклоњива грешка при потврди идентитета корисника/це." +} diff --git a/PluggableAuth/i18n/tr.json b/PluggableAuth/i18n/tr.json new file mode 100644 index 00000000..92777620 --- /dev/null +++ b/PluggableAuth/i18n/tr.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "BaRaN6161 TURK" + ] + }, + "pluggableauth-desc": "Takılabilir kimlik doğrulama ve yetkilendirme için çerçeve sağlar", + "pluggableauth-not-authorized": "{{GENDER:$1|Kullanıcı}} $1 yetkili değil.", + "pluggableauth-authentication-failure": "Kullanıcı kimliği doğrulanamıyor.", + "pluggableauth-authentication-workflow-failure": "Kimlik doğrulama iş akışı hatası.", + "pluggableauth-loginbutton-label": "PluggableAuth ile giriş yapın", + "pluggableauth-loginbutton-help": "PluggableAuth ile sizi doğrular", + "pluggableauth-fatal-error": "Kullanıcı kimliği doğrulanırken önemli hata." +} diff --git a/PluggableAuth/i18n/uk.json b/PluggableAuth/i18n/uk.json index 3ab0b638..62ecc200 100644 --- a/PluggableAuth/i18n/uk.json +++ b/PluggableAuth/i18n/uk.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Ата", - "Piramidion" + "Piramidion", + "Ата" ] }, "pluggableauth-desc": "Забезпечує основу для змінної автентифікації та авторизації", @@ -10,5 +10,6 @@ "pluggableauth-authentication-failure": "Автентифікація користувача неможлива.", "pluggableauth-authentication-workflow-failure": "Помилка процесу автентифікації.", "pluggableauth-loginbutton-label": "Увійти в систему за допомогою PluggableAuth", - "pluggableauth-loginbutton-help": "Автентифікує Вас через PluggableAuth" + "pluggableauth-loginbutton-help": "Автентифікує Вас через PluggableAuth", + "pluggableauth-fatal-error": "Фатальна помилка при автентифікації користувача." } diff --git a/PluggableAuth/i18n/zh-hans.json b/PluggableAuth/i18n/zh-hans.json index 2fa466db..463d1dcc 100644 --- a/PluggableAuth/i18n/zh-hans.json +++ b/PluggableAuth/i18n/zh-hans.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "A Chinese Wikipedian", "Liuxinyu970226" ] }, @@ -9,5 +10,6 @@ "pluggableauth-authentication-failure": "用户身份不能被验证。", "pluggableauth-authentication-workflow-failure": "身份验证工作流失败。", "pluggableauth-loginbutton-label": "通过PluggableAuth登录", - "pluggableauth-loginbutton-help": "使用PluggableAuth验证您的身份" + "pluggableauth-loginbutton-help": "使用PluggableAuth验证您的身份", + "pluggableauth-fatal-error": "验证用户的致命错误。" } diff --git a/PluggableAuth/i18n/zh-hant.json b/PluggableAuth/i18n/zh-hant.json index 09481355..ac6d470d 100644 --- a/PluggableAuth/i18n/zh-hant.json +++ b/PluggableAuth/i18n/zh-hant.json @@ -1,8 +1,8 @@ { "@metadata": { "authors": [ - "Liuxinyu970226", - "Kly" + "Kly", + "Liuxinyu970226" ] }, "pluggableauth-desc": "提供可插入式的驗證與授權框架", @@ -10,5 +10,6 @@ "pluggableauth-authentication-failure": "使用者無法被驗證。", "pluggableauth-authentication-workflow-failure": "驗證流程失敗。", "pluggableauth-loginbutton-label": "以 PluggableAuth 登入", - "pluggableauth-loginbutton-help": "以 PluggableAuth 來驗證您的身份" + "pluggableauth-loginbutton-help": "以 PluggableAuth 來驗證您的身份", + "pluggableauth-fatal-error": "驗證使用者嚴重錯誤。" } diff --git a/PluggableAuth/i18n/zh-hk.json b/PluggableAuth/i18n/zh-hk.json new file mode 100644 index 00000000..edb94b5c --- /dev/null +++ b/PluggableAuth/i18n/zh-hk.json @@ -0,0 +1,6 @@ +{ + "@metadata": { + "authors": [] + }, + "pluggableauth-not-authorized": "{{GENDER:$1|用戶}} $1 未取得授權。" +} diff --git a/PluggableAuth/includes/PluggableAuth.alias.php b/PluggableAuth/includes/PluggableAuth.alias.php index df3accfa..4ba2e3b3 100644 --- a/PluggableAuth/includes/PluggableAuth.alias.php +++ b/PluggableAuth/includes/PluggableAuth.alias.php @@ -6,11 +6,10 @@ * @file * @ingroup Extensions */ -// @codingStandardsIgnoreFile $specialPageAliases = []; /** English (English) */ $specialPageAliases['en'] = [ - 'PluggableAuthLogin' => ['PluggableAuthLogin'], + 'PluggableAuthLogin' => [ 'PluggableAuthLogin' ], ]; diff --git a/PluggableAuth/includes/PluggableAuth.php b/PluggableAuth/includes/PluggableAuth.php index 8ecf4e40..afde9d17 100644 --- a/PluggableAuth/includes/PluggableAuth.php +++ b/PluggableAuth/includes/PluggableAuth.php @@ -37,8 +37,11 @@ abstract class PluggableAuth { */ public static function singleton() { wfDebugLog( 'PluggableAuth', 'Getting PluggableAuth singleton' ); - wfDebugLog( 'PluggableAuth', 'Class name: ' . $GLOBALS['wgPluggableAuth_Class'] ); - if ( !is_null( self::$instance ) ) { + wfDebugLog( + 'PluggableAuth', + 'Class name: ' . ( $GLOBALS['wgPluggableAuth_Class'] ?? 'unset' ) + ); + if ( self::$instance !== null ) { wfDebugLog( 'PluggableAuth', 'Singleton already exists' ); return self::$instance; } elseif ( isset( $GLOBALS['wgPluggableAuth_Class'] ) && diff --git a/PluggableAuth/includes/PluggableAuthBeginAuthenticationRequest.php b/PluggableAuth/includes/PluggableAuthBeginAuthenticationRequest.php index 04831fb8..caf7a9d6 100644 --- a/PluggableAuth/includes/PluggableAuthBeginAuthenticationRequest.php +++ b/PluggableAuth/includes/PluggableAuthBeginAuthenticationRequest.php @@ -1,10 +1,9 @@ <?php -use \MediaWiki\Auth\ButtonAuthenticationRequest; -use \MediaWiki\Auth\AuthManager; +use MediaWiki\Auth\AuthManager; +use MediaWiki\Auth\ButtonAuthenticationRequest; -class PluggableAuthBeginAuthenticationRequest extends - ButtonAuthenticationRequest { +class PluggableAuthBeginAuthenticationRequest extends ButtonAuthenticationRequest { public function __construct() { if ( isset( $GLOBALS['wgPluggableAuth_ButtonLabelMessage'] ) ) { diff --git a/PluggableAuth/includes/PluggableAuthContinueAuthenticationRequest.php b/PluggableAuth/includes/PluggableAuthContinueAuthenticationRequest.php index a08bba6e..659129cf 100644 --- a/PluggableAuth/includes/PluggableAuthContinueAuthenticationRequest.php +++ b/PluggableAuth/includes/PluggableAuthContinueAuthenticationRequest.php @@ -1,7 +1,8 @@ <?php -use \MediaWiki\Auth\AuthenticationRequest; -use \MediaWiki\Auth\AuthManager; +use MediaWiki\Auth\AuthenticationRequest; +use MediaWiki\Auth\AuthManager; +use MediaWiki\MediaWikiServices; class PluggableAuthContinueAuthenticationRequest extends AuthenticationRequest { @@ -19,10 +20,15 @@ class PluggableAuthContinueAuthenticationRequest extends AuthenticationRequest { * @return bool success */ public function loadFromSubmission( array $data ) { - $authManager = AuthManager::singleton(); + if ( method_exists( MediaWikiServices::class, 'getAuthManager' ) ) { + // MediaWiki 1.35+ + $authManager = MediaWikiServices::getInstance()->getAuthManager(); + } else { + $authManager = AuthManager::singleton(); + } $error = $authManager->getAuthenticationSessionData( PluggableAuthLogin::ERROR_SESSION_KEY ); - if ( is_null( $error ) ) { + if ( $error === null ) { $this->username = $authManager->getAuthenticationSessionData( PluggableAuthLogin::USERNAME_SESSION_KEY ); $authManager->removeAuthenticationSessionData( diff --git a/PluggableAuth/includes/PluggableAuthHooks.php b/PluggableAuth/includes/PluggableAuthHooks.php index ee1e9777..3eee770a 100644 --- a/PluggableAuth/includes/PluggableAuthHooks.php +++ b/PluggableAuth/includes/PluggableAuthHooks.php @@ -120,9 +120,21 @@ class PluggableAuthHooks { if ( !$out->getUser()->isAnon() ) { return; } - if ( !User::isEveryoneAllowed( 'read' ) && $title->userCan( 'read' ) ) { - return; + + if ( class_exists( 'MediaWiki\Permissions\PermissionManager' ) ) { + // MW 1.33+ + $pm = \MediaWiki\MediaWikiServices::getInstance()->getPermissionManager(); + if ( !$pm->isEveryoneAllowed( 'read' ) && + $pm->userCan( 'read', $user, $title ) + ) { + return; + } + } else { + if ( !User::isEveryoneAllowed( 'read' ) && $title->userCan( 'read' ) ) { + return; + } } + $loginSpecialPages = ExtensionRegistry::getInstance()->getAttribute( 'PluggableAuthLoginSpecialPages' ); @@ -133,11 +145,17 @@ class PluggableAuthHooks { } $oldTitle = $title; - $title = Title::newFromText( "UserLogin", NS_SPECIAL ); - $out->redirect( $title->getFullURL( [ - 'returnto' => urlencode( $oldTitle ), + $title = SpecialPage::getTitleFor( 'Userlogin' ); + $url = $title->getFullURL( [ + 'returnto' => $oldTitle, 'returntoquery' => $request->getRawQueryString() - ] ) ); + ] ); + if ( $url ) { + header( 'Location: ' . $url ); + } else { + throw new MWException( "Could not determine URL for Special:Userlogin" ); + } + exit; } /** @@ -148,8 +166,8 @@ class PluggableAuthHooks { * @since 1.0 * * @param array &$personal_urls urls sto modify - * @param Title $title current title - * @param SkinTemplate $skin template for vars + * @param Title|null $title current title + * @param SkinTemplate|null $skin template for vars */ public static function modifyLoginURLs( array &$personal_urls, Title $title = null, SkinTemplate $skin = null @@ -158,4 +176,21 @@ class PluggableAuthHooks { unset( $personal_urls['logout'] ); } } + + /** + * Implements LocalUserCreated hook. + * See https://www.mediawiki.org/wiki/Manual:Hooks/LocalUserCreated + * Populate groups after the local user is created + * Called immediately after a local user has been created and saved to the database. + * + * @since 5.5 + * + * @param User $user current user + * @param bool $autocreated whether the user was autocreated + */ + public static function onLocalUserCreated( User $user, $autocreated ) { + if ( $autocreated ) { + Hooks::run( 'PluggableAuthPopulateGroups', [ $user ] ); + } + } } diff --git a/PluggableAuth/includes/PluggableAuthLogin.php b/PluggableAuth/includes/PluggableAuthLogin.php index c27e6a6b..21ec13c8 100644 --- a/PluggableAuth/includes/PluggableAuthLogin.php +++ b/PluggableAuth/includes/PluggableAuthLogin.php @@ -1,6 +1,7 @@ <?php -use \MediaWiki\Auth\AuthManager; +use MediaWiki\Auth\AuthManager; +use MediaWiki\MediaWikiServices; class PluggableAuthLogin extends UnlistedSpecialPage { @@ -22,14 +23,19 @@ class PluggableAuthLogin extends UnlistedSpecialPage { */ public function execute( $param ) { wfDebugLog( 'PluggableAuth', 'In execute()' ); - $authManager = AuthManager::singleton(); + if ( method_exists( MediaWikiServices::class, 'getAuthManager' ) ) { + // MediaWiki 1.35+ + $authManager = MediaWikiServices::getInstance()->getAuthManager(); + } else { + $authManager = AuthManager::singleton(); + } $user = $this->getUser(); $pluggableauth = PluggableAuth::singleton(); $error = null; if ( $pluggableauth ) { if ( $pluggableauth->authenticate( $id, $username, $realname, $email, - $error ) ) { - if ( is_null( $id ) ) { + $error ) ) { + if ( $id === null ) { $user->loadDefaults( $username ); $user->mName = $username; $user->mRealName = $realname; @@ -41,6 +47,7 @@ class PluggableAuthLogin extends UnlistedSpecialPage { $user->mId = $id; $user->loadFromId(); wfDebugLog( 'PluggableAuth', 'Authenticated existing user: ' . $user->mName ); + Hooks::run( 'PluggableAuthPopulateGroups', [ $user ] ); } $authorized = true; Hooks::run( 'PluggableAuthUserAuthorization', [ $user, &$authorized ] ); @@ -58,7 +65,7 @@ class PluggableAuthLogin extends UnlistedSpecialPage { } } else { wfDebugLog( 'PluggableAuth', 'Authentication failure.' ); - if ( is_null( $error ) ) { + if ( $error === null ) { $error = wfMessage( 'pluggableauth-authentication-failure' )->text(); } else { if ( !is_string( $error ) ) { @@ -68,14 +75,16 @@ class PluggableAuthLogin extends UnlistedSpecialPage { } } } - if ( !is_null( $error ) ) { + if ( $error !== null ) { $authManager->setAuthenticationSessionData( self::ERROR_SESSION_KEY, $error ); } $returnToUrl = $authManager->getAuthenticationSessionData( self::RETURNTOURL_SESSION_KEY ); - if ( is_null( $returnToUrl ) || count( $returnToUrl ) === 0 ) { + if ( $returnToUrl === null || strlen( $returnToUrl ) === 0 ) { wfDebugLog( 'PluggableAuth', 'ERROR: return to URL is null or empty' ); + $this->getOutput()->wrapWikiMsg( "<div class='error'>\n$1\n</div>", + 'pluggableauth-fatal-error' ); } else { $this->getOutput()->redirect( $returnToUrl ); } diff --git a/PluggableAuth/includes/PluggableAuthPrimaryAuthenticationProvider.php b/PluggableAuth/includes/PluggableAuthPrimaryAuthenticationProvider.php index 2fda5db0..4fcccd79 100644 --- a/PluggableAuth/includes/PluggableAuthPrimaryAuthenticationProvider.php +++ b/PluggableAuth/includes/PluggableAuthPrimaryAuthenticationProvider.php @@ -1,13 +1,12 @@ <?php -use \MediaWiki\Auth\AuthenticationRequest; -use \MediaWiki\Auth\ButtonAuthenticationRequest; -use \MediaWiki\Auth\AbstractPrimaryAuthenticationProvider; -use \MediaWiki\Auth\AuthManager; -use \MediaWiki\Auth\AuthenticationResponse; +use MediaWiki\Auth\AbstractPrimaryAuthenticationProvider; +use MediaWiki\Auth\AuthenticationRequest; +use MediaWiki\Auth\AuthenticationResponse; +use MediaWiki\Auth\AuthManager; +use MediaWiki\Auth\ButtonAuthenticationRequest; -class PluggableAuthPrimaryAuthenticationProvider extends - AbstractPrimaryAuthenticationProvider { +class PluggableAuthPrimaryAuthenticationProvider extends AbstractPrimaryAuthenticationProvider { /** * Start an authentication flow @@ -21,11 +20,11 @@ class PluggableAuthPrimaryAuthenticationProvider extends } $extraLoginFields = []; foreach ( $GLOBALS['wgPluggableAuth_ExtraLoginFields'] as $key => $value ) { - if ( isset( $request, $key ) ) { + if ( isset( $request->$key ) ) { $extraLoginFields[$key] = $request->$key; } } - $url = Title::newFromText( 'Special:PluggableAuthLogin' )->getFullURL(); + $url = SpecialPage::getTitleFor( 'PluggableAuthLogin' )->getFullURL(); $this->manager->setAuthenticationSessionData( PluggableAuthLogin::RETURNTOURL_SESSION_KEY, $request->returnToUrl ); $this->manager->setAuthenticationSessionData( @@ -65,7 +64,7 @@ class PluggableAuthPrimaryAuthenticationProvider extends } $error = $this->manager->getAuthenticationSessionData( PluggableAuthLogin::ERROR_SESSION_KEY ); - if ( !is_null( $error ) ) { + if ( $error !== null ) { $this->manager->removeAuthenticationSessionData( PluggableAuthLogin::ERROR_SESSION_KEY ); return AuthenticationResponse::newFail( new RawMessage( $error ) ); @@ -74,7 +73,6 @@ class PluggableAuthPrimaryAuthenticationProvider extends $user = User::newFromName( $username ); if ( $user && $user->getId() !== 0 ) { $this->updateUserRealnameAndEmail( $user ); - Hooks::run( 'PluggableAuthPopulateGroups', [ $user ] ); } return AuthenticationResponse::newPass( $username ); } diff --git a/PluggableAuth/package-lock.json b/PluggableAuth/package-lock.json new file mode 100644 index 00000000..3e056550 --- /dev/null +++ b/PluggableAuth/package-lock.json @@ -0,0 +1,891 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "coffeescript": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", + "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "grunt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz", + "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==", + "dev": true, + "requires": { + "coffeescript": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.13.1", + "minimatch": "~3.0.2", + "mkdirp": "~1.0.3", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.6.2" + }, + "dependencies": { + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "grunt-banana-checker": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.9.0.tgz", + "integrity": "sha512-SqPiB6OazWqR8USL0NymtuT5Br3mD9WBBsM1rHC/3wIi2SrZNM6/+j9CIeuEM5oCn+AtO2Y0+rzzFyOdC9afAg==", + "dev": true + }, + "grunt-jsonlint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-1.1.0.tgz", + "integrity": "sha1-ox7pckCu4/NDyiY8Rb1TIGMSfbI=", + "dev": true, + "requires": { + "jsonlint": "1.6.2", + "strip-json-comments": "^2.0.0" + } + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "dev": true + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "dev": true, + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "dev": true, + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonlint": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", + "dev": true, + "requires": { + "JSV": ">= 4.0.x", + "nomnom": ">= 1.5.x" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz", + "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==", + "dev": true + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/PluggableAuth/package.json b/PluggableAuth/package.json index bcf5b133..8a7de23c 100644 --- a/PluggableAuth/package.json +++ b/PluggableAuth/package.json @@ -4,8 +4,8 @@ "test": "grunt test" }, "devDependencies": { - "grunt": "1.0.1", - "grunt-banana-checker": "0.5.0", + "grunt": "1.1.0", + "grunt-banana-checker": "0.9.0", "grunt-jsonlint": "1.1.0" } } diff --git a/PluggableAuth/version b/PluggableAuth/version deleted file mode 100644 index 9f74e3a2..00000000 --- a/PluggableAuth/version +++ /dev/null @@ -1,4 +0,0 @@ -PluggableAuth: REL1_31 -2020-05-25T18:28:00 - -300ac44 |