summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Evans <grknight@gentoo.org>2020-10-02 15:07:11 -0400
committerBrian Evans <grknight@gentoo.org>2020-10-02 15:07:11 -0400
commite7e713baba52955dea8106c4b050781203280127 (patch)
tree6c49ddf8c0741ce2a4b57804c44ddf7675860a54
parentUpdate OpenIDConnect to 1.35 (diff)
downloadextensions-e7e713baba52955dea8106c4b050781203280127.tar.gz
extensions-e7e713baba52955dea8106c4b050781203280127.tar.bz2
extensions-e7e713baba52955dea8106c4b050781203280127.zip
Update PluggableAuth to 1.35
Signed-off-by: Brian Evans <grknight@gentoo.org>
-rw-r--r--PluggableAuth/.dir-locals.el88
-rw-r--r--PluggableAuth/.editorconfig13
-rw-r--r--PluggableAuth/.phpcs.xml5
-rw-r--r--PluggableAuth/CODE_OF_CONDUCT.md2
-rw-r--r--PluggableAuth/composer.json11
-rw-r--r--PluggableAuth/extension.json6
-rw-r--r--PluggableAuth/gitinfo.json1
-rw-r--r--PluggableAuth/i18n/ar.json15
-rw-r--r--PluggableAuth/i18n/ast.json5
-rw-r--r--PluggableAuth/i18n/be-tarask.json3
-rw-r--r--PluggableAuth/i18n/bn.json8
-rw-r--r--PluggableAuth/i18n/de.json3
-rw-r--r--PluggableAuth/i18n/el.json1
-rw-r--r--PluggableAuth/i18n/en.json3
-rw-r--r--PluggableAuth/i18n/fr.json7
-rw-r--r--PluggableAuth/i18n/it.json3
-rw-r--r--PluggableAuth/i18n/ko.json3
-rw-r--r--PluggableAuth/i18n/mk.json5
-rw-r--r--PluggableAuth/i18n/nb.json14
-rw-r--r--PluggableAuth/i18n/pt-br.json3
-rw-r--r--PluggableAuth/i18n/pt.json7
-rw-r--r--PluggableAuth/i18n/qqq.json7
-rw-r--r--PluggableAuth/i18n/roa-tara.json7
-rw-r--r--PluggableAuth/i18n/ru.json6
-rw-r--r--PluggableAuth/i18n/sh.json9
-rw-r--r--PluggableAuth/i18n/sr-ec.json8
-rw-r--r--PluggableAuth/i18n/tr.json14
-rw-r--r--PluggableAuth/i18n/uk.json7
-rw-r--r--PluggableAuth/i18n/zh-hans.json4
-rw-r--r--PluggableAuth/i18n/zh-hant.json7
-rw-r--r--PluggableAuth/i18n/zh-hk.json6
-rw-r--r--PluggableAuth/includes/PluggableAuth.alias.php3
-rw-r--r--PluggableAuth/includes/PluggableAuth.php7
-rw-r--r--PluggableAuth/includes/PluggableAuthBeginAuthenticationRequest.php7
-rw-r--r--PluggableAuth/includes/PluggableAuthContinueAuthenticationRequest.php14
-rw-r--r--PluggableAuth/includes/PluggableAuthHooks.php51
-rw-r--r--PluggableAuth/includes/PluggableAuthLogin.php23
-rw-r--r--PluggableAuth/includes/PluggableAuthPrimaryAuthenticationProvider.php20
-rw-r--r--PluggableAuth/package-lock.json891
-rw-r--r--PluggableAuth/package.json4
-rw-r--r--PluggableAuth/version4
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