From dbb76409eb13598fd4b8691bd12df7c9f1e86052 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 18 Sep 2018 01:21:59 +0200 Subject: [PATCH] * [FIX] Improved long password handling on server side (work in progress). Related #1038. Thanks to @D3luxee for the feedback * [MOD] Improved JavaScript handling. Work in progress * [MOD] Login view does now set focus on user input field * [MOD] Improved account's permissions displaying on view-only mode * [MOD] Code refactoring Signed-off-by: nuxsmin --- .../web/Controllers/BootstrapController.php | 22 +- .../web/Controllers/ResourceController.php | 4 +- .../web/themes/material-blue/css/styles.css | 4 +- .../themes/material-blue/css/styles.css.map | 2 +- .../themes/material-blue/css/styles.min.css | 2 +- .../web/themes/material-blue/css/styles.scss | 5 +- .../web/themes/material-blue/js/app-theme.js | 88 ++- .../themes/material-blue/js/app-theme.min.js | 41 +- .../views/account/account-permissions.inc | 148 ++-- .../material-blue/views/account/account.inc | 2 +- .../material-blue/views/account/details.inc | 46 -- .../material-blue/views/common/datatabs.inc | 2 +- .../material-blue/views/common/tabs-end.inc | 2 +- .../views/grid/datatabs-grid.inc | 2 +- lib/SP/Core/Crypt/CryptPKI.php | 112 +-- lib/SP/Services/Install/Installer.php | 2 +- lib/SP/Util/Util.php | 2 +- public/js/app-actions.js | 463 +++++------ public/js/app-actions.min.js | 101 +-- public/js/app-config.js | 128 +++ public/js/app-config.min.js | 3 + public/js/app-main.js | 728 ++++-------------- public/js/app-main.min.js | 39 +- public/js/app-requests.js | 36 +- public/js/app-requests.min.js | 10 +- public/js/app-triggers.js | 116 +-- public/js/app-triggers.min.js | 37 +- public/js/app-util.js | 462 ++++++++++- public/js/app.js | 1 + public/js/app.min.js | 2 +- tests/SP/Core/Crypt/CryptPKITest.php | 61 +- 31 files changed, 1427 insertions(+), 1246 deletions(-) create mode 100644 public/js/app-config.js create mode 100644 public/js/app-config.min.js diff --git a/app/modules/web/Controllers/BootstrapController.php b/app/modules/web/Controllers/BootstrapController.php index ae91a5c8..777b0f71 100644 --- a/app/modules/web/Controllers/BootstrapController.php +++ b/app/modules/web/Controllers/BootstrapController.php @@ -30,6 +30,7 @@ use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Plugin\PluginManager; use SP\Providers\Auth\Browser\Browser; use SP\Services\Import\ImportService; +use SP\Storage\File\FileException; /** * Class BootstrapController @@ -42,12 +43,11 @@ final class BootstrapController extends SimpleControllerBase /** * Returns environment data - * - * @throws \SP\Core\Exceptions\SPException */ public function getEnvironmentAction() { - $checkStatus = $this->session->getAuthCompleted() && ($this->session->getUserData()->getIsAdminApp() || $this->configData->isDemoEnabled()); + $checkStatus = $this->session->getAuthCompleted() + && ($this->session->getUserData()->getIsAdminApp() || $this->configData->isDemoEnabled()); $data = [ 'lang' => $this->getJsLang(), @@ -62,7 +62,8 @@ final class BootstrapController extends SimpleControllerBase 'plugins' => $this->getPlugins(), 'loggedin' => $this->session->isLoggedIn(), 'authbasic_autologin' => $this->getAuthBasicAutologinEnabled(), - 'pk' => $this->getPublicKey(), + 'pki_key' => $this->getPublicKey(), + 'pki_max_size' => CryptPKI::getMaxDataSize(), 'import_allowed_exts' => ImportService::ALLOWED_EXTS, 'files_allowed_exts' => $this->configData->getFilesAllowedExts() ]; @@ -105,16 +106,21 @@ final class BootstrapController extends SimpleControllerBase */ private function getAuthBasicAutologinEnabled() { - return $this->dic->get(Browser::class)->getServerAuthUser() !== null && $this->configData->isAuthBasicAutoLoginEnabled(); + return $this->dic->get(Browser::class)->getServerAuthUser() !== null + && $this->configData->isAuthBasicAutoLoginEnabled(); } /** * @return string - * @throws \SP\Core\Exceptions\FileNotFoundException - * @throws \SP\Core\Exceptions\SPException */ private function getPublicKey() { - return $this->session->getPublicKey() ?: $this->dic->get(CryptPKI::class)->getPublicKey(); + try { + return $this->session->getPublicKey() ?: $this->dic->get(CryptPKI::class)->getPublicKey(); + } catch (FileException $e) { + processException($e); + + return ''; + } } } \ No newline at end of file diff --git a/app/modules/web/Controllers/ResourceController.php b/app/modules/web/Controllers/ResourceController.php index b684f36a..f1c9a2e5 100644 --- a/app/modules/web/Controllers/ResourceController.php +++ b/app/modules/web/Controllers/ResourceController.php @@ -92,7 +92,7 @@ final class ResourceController extends SimpleControllerBase $this->minify->addFiles([ 'jquery-3.3.1.min.js', - 'jquery-migrate-3.0.0.min.js', +// 'jquery-migrate-3.0.0.min.js', 'jquery.fileDownload.min.js', 'clipboard.min.js', 'selectize.min.js', @@ -112,9 +112,11 @@ final class ResourceController extends SimpleControllerBase // FIXME: use MIN version $this->minify->addFiles([ 'app.js', + 'app-config.js', 'app-triggers.js', 'app-actions.js', 'app-requests.js', + 'app-util.js', 'app-main.js'], false); } diff --git a/app/modules/web/themes/material-blue/css/styles.css b/app/modules/web/themes/material-blue/css/styles.css index 6b848788..3e4d2a33 100644 --- a/app/modules/web/themes/material-blue/css/styles.css +++ b/app/modules/web/themes/material-blue/css/styles.css @@ -388,9 +388,11 @@ body.userpassreset { color: #607d8b; font-size: 12px; font-weight: bold; } + #content .data .account-permissions .tag-list-box .tag-list-body { + padding: .5em 0; } #content span.tag { margin: 0 3px 3px 0; - padding: .2em; + padding: 3px; background: #5c6bc0; color: #fff; border: 0 solid transparent; diff --git a/app/modules/web/themes/material-blue/css/styles.css.map b/app/modules/web/themes/material-blue/css/styles.css.map index 80202915..a0e61a62 100644 --- a/app/modules/web/themes/material-blue/css/styles.css.map +++ b/app/modules/web/themes/material-blue/css/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "AAAA,UAAW;EACT,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,UAAU;EACtB,SAAS,EAAE,IAAI;;AAGjB,CAAE;EACA,WAAW,ECbA,6CAA6C;EDcxD,UAAU,EAAE,OAAO;EACnB,iBAAkB;IAChB,UAAU,EAAE,OAAO;;AAIvB,KAAM;EACJ,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,CAAC;EACjB,QAAG;IACD,aAAa,EAAE,qBAAqB;IACpC,cAAc,EAAE,MAAM;IACtB,cAAM;MACJ,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;EAGhB,QAAG;IAUD,MAAM,EAAE,IAAI;IATZ,YAAM;MACJ,gBAAgB,EAAE,OAAO;IAE3B,qCAAwB;MACtB,aAAa,EAAE,4BAA4B;IAE7C,uCAA0B;MACxB,gBAAgB,EAAE,OAAO;EAI7B,QAAG;IACD,OAAO,EAAE,GAAG;IACZ,mBAAa;MACX,WAAW,EAAE,IAAI;MACjB,UAAU,EAAE,MAAM;;AAKxB,IAAK;EACH,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,CAAC;;AAGX,4BAA6B;EAC3B,gBAAgB,EAAE,sBAAsB;EACxC,KAAK,EAAE,eAAe;EACtB,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,CAAC;EACT,cAAc,EAAE,MAAM;EACtB,MAAM,EAAE,OAAO;;AAIf,aAAU;EACR,KAAK,EAAE,KAAK;AAEd,aAAU;EACR,KAAK,EAAE,KAAK;;AAIhB,QAAS;EACP,KAAK,EAAE,KAAK;;AAGd,YAAa;EACX,KAAK,EAAE,KAAK;;AAGd,aAAc;EACZ,KAAK,EAAE,GAAG;;AAGZ,GAAI;EACF,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,OAAO;EACf,gBAAe;IACb,gBAAgB,EAAE,sBAAsB;IACxC,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,CAAC;IACT,cAAc,EAAE,MAAM;;AAI1B,CAAE;EACA,MAAM,EAAE,OAAO;;AAGjB,gBAAiB;EACf,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa;EAE5B,wBAAM;IACJ,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,MAAM;EAEpB,sBAAI;IACF,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,MAAM;;AAKxB,CAAE;EACA,eAAe,EAAE,IAAI;EACrB,KAAK,ECnHkB,OAAO;EDoH9B,SAAU;IACR,eAAe,EAAE,IAAI;IACrB,KAAK,ECtHgB,OAAO;EDwH9B,0BAA2B;IACzB,eAAe,EAAE,IAAI;IACrB,kCAAkC;IAClC,MAAM,EAAE,OAAO;;AAInB,oBAAqB;EACnB,WAAW,ECzIK,wHAAwH;ED0IxI,SAAS,EAAE,GAAG;EACd,SAAS,EAAE,GAAG;EACd,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,mBAAmB;EAC/B,aAAa,EAAE,GAAG;;AE5IpB;;kBAEmB;EACjB,UAAU,EDIQ,OAAO;ECHzB;;0BAAM;IACJ,UAAU,EAAE,WAAW;EAEzB;;+BAAW;IACT,WAAW,EAAE,EAAE;EAEjB;;2BAAO;IACL,UAAU,EAAE,OAAO;IACnB;;+BAAE;MACA,KAAK,EAAE,OAAO;;AAKpB,iBAAkB;EAtBhB,UAAU,EAAE,gFAAyF;EACrG,eAAe,EAAE,QAAQ;EAuBzB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,MAAM;EACd,uBAAM;IACJ,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,MAAM;EAEhB,6BAAY;IACV,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,WAAW;EAE/B,6BAAY;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,KAAK;IACb,cAAc,EAAE,IAAI;IACpB,OAAO,EAAE,OAAO;EAElB,2BAAU;IDVV,eAAe,EAAE,mGAAmG;IACpH,UAAU,EAAE,mGAAmG;ICW7G,gBAAgB,EAAE,OAAO;IAEvB,kDAAkB;MAChB,MAAM,EAAE,IAAI;MACZ,UAAU,EAAE,IAAI;MAChB,UAAU,EAAE,IAAI;MAChB,gBAAgB,EAAE,WAAW;MAkB7B,aAAa,EAAE,GAAG;MAjBlB,yDAAO;QACL,KAAK,EAAE,IAAI;QACX,KAAK,ED9CK,OAAO;QC+CjB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,OAAO;MAElB,oEAAkB;QAChB,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,EAAE;MAEb,gEAAc;QACZ,OAAO,EAAE,IAAI;IAKnB,2CAAgB;MACd,UAAU,EAAE,GAAG;MACf,UAAU,EAAE,MAAM;;AAKxB,oCAAqC;EACnC,iBAAkB;IAChB,KAAK,EAAE,IAAI;IACX,6BAAY;MACV,MAAM,EAAE,IAAI;IAIV,uDAAe;MACb,KAAK,EAAE,IAAI;ACxFrB,KAAM;EACJ,KAAK,EAAE,GAAG;EACV,UAAU,EAAE,MAAM;EAClB,cAAc,EAAE,MAAM;EACtB,MAAM,EAAE,SAAS;EACjB,OAAO,EAAE,GAAG;EACZ,gBAAgB,EFLH,OAAO;EEMpB,KAAK,EAAE,KAAK;EACZ,WAAW,EAAE,IAAI;EACjB,SAAS,EAAE,IAAI;;AAGjB,KAAM;EACJ,MAAM,EAAE,eAAe;EACvB,UAAU,EAAE,IAAI;EAChB,sBAAsB;EACtB,iBAAiB;EACjB,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;EACzB,cAAc,EAAE,GAAG;;AAGrB,aAAc;EACZ,QAAQ,EAAE,KAAK;EACf,OAAO,EAAE,IAAI;EACb,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,OAAO,EAAE,GAAG;EACZ,gBAAgB,EAAE,wBAAwB;EAC1C,OAAO,EAAE,IAAI;EFSb,aAAa,EAAE,cAAkB;EACjC,kBAAkB,EAAE,cAAkB;EACtC,qBAAqB,EAAE,cAAkB;EETzC,0BAAe;IACb,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,wBAAwB;IAC1C,mCAAS;MACP,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAG;MACR,IAAI,EAAE,GAAG;IAEX,sCAAY;MACV,OAAO,EAAE,KAAK;EAGlB,yBAAY;IACV,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,KAAK;IACZ,gBAAgB,EAAE,kBAAkB;IACpC,OAAO,EAAE,KAAK;;AAIlB,UAAW;EACT,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,oCAAmB;IACjB,KAAK,EAAE,IAAI;EAEb,gBAAM;IACJ,MAAM,EAAE,IAAI;EAEd,uBAAa;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,aAAa;IAC9B,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,KAAK;IACd,gBAAgB,EAAE,WAAW;EAE/B,6BAAmB;IACjB,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,MAAM;EAEpB,4BAAkB;IAChB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,MAAM;IACf,gCAAI;MACF,OAAO,EAAE,YAAY;MACrB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,IAAI;EAGjB,mBAAS;IACP,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,iBAAiB;IACzB,+BAAc;MACZ,KAAK,EAAE,GAAG;MACV,UAAU,EAAE,CAAC;MACb,MAAM,EAAE,QAAQ;;AAMpB,8CAAa;EACX,UAAU,EAAE,KAAK;EACjB,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,GAAG;EACV,YAAY,EAAE,iBAAiB;EAC/B,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;AAEnB,4CAAY;EACV,YAAY,EAAE,GAAG;EACjB,KAAK,EAAE,IAAI;EACX,wEAAc;IACZ,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,KAAK,EFhHS,OAAO;IEiHrB,SAAS,EAAE,IAAI;;AAMnB,eAAO;EACL,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;EACzB,mBAAI;IACF,WAAW,EAAE,GAAG;IAChB,cAAc,EAAE,MAAM;EAExB,iBAAE;IACA,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;EAEb,qBAAM;IACJ,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,GAAG;EAEZ,2BAAY;IACV,UAAU,EAAE,IAAI;EAElB,4BAAa;IACX,UAAU,EAAE,KAAK;AAGrB,eAAO;EACL,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG;EACZ,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,IAAI;EACpB,2BAAc;IACZ,gBAAgB,EF3JF,OAAO;IE4JrB,KAAK,EAAE,IAAI;AAGf,wBAAgB;EACd,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,MAAM;AAEhB,sBAAc;EACZ,MAAM,EAAE,QAAQ;EAEd,+BAAO;IACL,KAAK,EFvKO,OAAO;IEwKnB,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,KAAK;EAElB,4BAAI;IACF,OAAO,EAAE,IAAI;IACb,kCAAM;MACJ,KAAK,EAAE,IAAI;AAKnB,cAAM;EACJ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EAEb,MAAM,EAAE,MAAM;EACd,gBAAgB,EAAE,IAAI;EFjLxB,kBAAkB,EAAE,oCAAoC;EACxD,eAAe,EAAE,oCAAoC;EACrD,UAAU,EAAE,+BAA+B;EEiLzC,4BAAc;IACZ,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;EAEZ,iBAAG;IACD,UAAU,EAAE,IAAI;IAChB,2BAAY;MACV,UAAU,EAAE,KAAK;EAGrB,qBAAO;IACL,SAAS,EAAE,KAAK;EAElB,yBAAW;IACT,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,KAAK;EAEf,wBAAU;IAIR,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,kBAAyB;IACjC,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,EAAE;IAPX,8BAAQ;MACN,OAAO,EAAE,CAAC;IAOZ,4BAAI;MACF,cAAc,EAAE,MAAM;EAG1B,2BAAa;IACX,OAAO,EAAE,IAAI;EAEf,mCAAqB;IACnB,KAAK,EAAE,IAAI;IACX,iDAAc;MACZ,aAAa,EAAE,GAAG;MAClB,kEAAiB;QACf,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,iBAAiB;QAChC,KAAK,EFrOK,OAAO;QEsOjB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;MAEnB,gEAAe;QACb,OAAO,EAAE,MAAM;AAKvB,iBAAS;EACP,MAAM,EAAE,WAAW;EACnB,OAAO,EAAE,GAAG;EACZ,UAAU,EFrPI,OAAO;EEsPrB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,mBAAwB;EFtNlC,aAAa,EAAE,cAAkB;EACjC,kBAAkB,EAAE,cAAkB;EACtC,qBAAqB,EAAE,cAAkB;AEuNzC,oBAAY;EACV,UAAU,EAAE,IAAI;AAGhB,uBAAS;EACP,MAAM,EAAE,iBAAiB;AAE3B,+BAAiB;EACf,KAAK,EAAE,IAAI;AAGf,mBAAW;EACT,aAAa,EAAE,GAAG;EAEhB,gCAAY;IACV,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;EAEnB,gCAAY;IACV,OAAO,EAAE,WAAW;IACpB,gBAAgB,EAAE,OAAO;IACzB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,iBAAiB;IAChC,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,OAAO;EAGlB,kCAAe;IACb,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC;EAEZ,oCAAiB;IACf,UAAU,EAAE,MAAM;IAClB,gBAAgB,EFlSL,OAAO;IEmSlB,KAAK,EFlSM,OAAO;IEmSlB,WAAW,EAAE,IAAI;AAGrB,WAAG;EACD,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,KAAK;EACb,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,KAAK;EACZ,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,KAAK;AAEpB,iBAAS;EACP,UAAU,EAAE,KAAK;EACjB,aAAa,EAAE,iBAAiB;EAChC,UAAU,EAAE,IAAI;EAChB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,KAAK,EFnTS,OAAO;AEqTvB,uBAAe;EACb,gBAAgB,EAAE,OAAO;AAE3B,sBAAc;EACZ,gBAAgB,EAAE,KAAK;AAGvB,wBAAG;EACD,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,CAAC;AAEZ,wBAAG;EACD,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,IAAI;EACpB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;EAClB,0BAAE;IACA,KAAK,EAAE,IAAI;EAEb,4BAAI;IACF,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,MAAM;AAI5B,6BAAqB;EACnB,aAAa,EAAE,iBAAiB;EAChC,gCAAG;IACD,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,UAAU;IACzB,eAAe,EAAE,YAAY;IAC7B,MAAM,EAAE,CAAC;EAEX,gCAAG;IACD,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,MAAM;IACnB,cAAc,EAAE,MAAM;IACtB,kCAAE;MACA,KAAK,EAAE,OAAO;MACd,OAAO,EAAE,WAAW;EAGxB,qDAAwB;IACtB,IAAI,EAAE,QAAQ;AAGlB,oBAAY;EACV,KAAK,EAAE,IAAI;EACX;uCACiB;IACf,KAAK,EAAE,GAAG;EAEZ,6BAAS;IACP,gBAAgB,EF/WF,OAAO;IEgXrB,KAAK,EAAE,IAAI;EAGX,uCAAY;IACV,UAAU,EAAE,IAAI;EAElB,yCAAc;IACZ,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,IAAI;EAElB,0CAAe;IACb,UAAU,EAAE,KAAK;IACjB,4CAAE;MACA,OAAO,EAAE,EAAE;MACX,kDAAQ;QACN,OAAO,EAAE,CAAC;AAOlB,sBAAG;EACD,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,CAAC;EACV,gBAAgB,EAAE,OAAO;AAE3B,sBAAG;EACD,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,GAAG;EACZ,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,GAAG;EACf,kCAAc;IACZ,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,IAAI;EAElB,mCAAe;IACb,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,IAAI;EAEb,+EAAsC;IACpC,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,OAAO;AAKnB,2BAAM;EACJ,KAAK,EAAE,IAAI;AAEb,2BAAM;EACJ,UAAU,EAAE,MAAM;AAEpB,2BAAM;EACJ,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,KAAK;EACb,QAAQ,EAAE,IAAI;AAEhB,wBAAG;EACD,aAAa,EAAE,iBAAiB;AAElC,2BAAM;EACJ,UAAU,EAAE,MAAM;AAEpB,uCAAkB;EAChB,KAAK,EAAE,GAAG;AAGd,mBAAW;EACT,gBAAgB,EAAE,OAAO;EACzB,cAAc,EAAE,MAAM;EACtB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,QAAQ;EACjB,aAAa,EAAE,GAAG;EAClB,wBAAK;IACH,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,UAAU;IAC3B,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,IAAI;EAGhB,uCAAM;IACJ,MAAM,EAAE,MAAM;EAEhB,mDAAgB;IACd,OAAO,EAAE,YAAY;EAEvB,kDAAe;IACb,KAAK,EAAE,IAAI;EAGf,wCAAqB;IACnB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,CAAC;AAGhB,mBAAW;EACT,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,iBAAiB;EACzB,yBAAQ;IACN,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,kBAAkB;AAG9B,0BAAkB;EAChB,OAAO,EAAE,IAAI;AAEf,eAAO;EACL,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,MAAM;EACd,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,KAAK;EF9bpB,KAAK,EArDU,OAAO;EAsDtB,gBAAgB,EAvDD,OAAO;EAwDtB,MAAM,EAAE,iBAAyB;;AEmcjC;;;+BACqB;EACnB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,MAAM;AAEhB;qBAAW;EACT,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE,IAAI;EACd,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,KAAK;EACb;0BAAG;IACD,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;EAEZ;0BAAG;IACD,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,GAAG;IACd,aAAa,EAAE,IAAI;EAErB;gCAAS;IACP,UAAU,EAAE,OAAO;IACnB,KAAK,EAAE,IAAI;EAEb;2CAAoB;IAClB,SAAS,EAAE,CAAC;EAEd;+CAAwB;IACtB,MAAM,EAAE,MAAM;EAEhB;8CAAuB;IACrB,OAAO,EAAE,MAAM;AAIjB;0BAAE;EACA,OAAO,EAAE,EAAE;EACX;kCAAQ;IACN,OAAO,EAAE,CAAC;;AAMlB,UAAW;EFveT,KAAK,EAAE,mBAAmB;EAC1B,KAAK,EAAE,gBAAgB;EACvB,KAAK,EAAE,WAAW;EEuelB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,QAAQ;EAChB,OAAO,EAAE,CAAC;EACV,gBAAgB,EAAE,IAAI;EACtB,4BAAoB;IF7epB,KAAK,EAAE,mBAAmB;IAC1B,KAAK,EAAE,gBAAgB;IACvB,KAAK,EAAE,WAAW;IE6ehB,SAAS,EAAE,IAAI;EAIf,eAAG;IACD,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,gBAAgB,EFpjBF,OAAO;IEqjBrB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,GAAG;IAChB,gCAAiB;MACf,OAAO,EAAE,IAAI;MACb,QAAQ,EAAE,QAAQ;MAClB,KAAK,EAAE,IAAI;MACX,GAAG,EAAE,IAAI;EAGb,kBAAM;IACJ,KAAK,EAAE,IAAI;IACX,cAAc,EAAE,GAAG;EAGvB,iBAAO;IACL,KAAK,EAAE,KAAK;EAEd,0BAAgB;IACd,OAAO,EAAE,IAAI;EAEf,oBAAU;IACR,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,KAAK;EAEhB,gBAAQ;IACN,gBAAgB,EAAE,WAAW;IAC7B,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;IFrjBhB,aAAa,EAAE,YAAkB;IACjC,kBAAkB,EAAE,YAAkB;IACtC,qBAAqB,EAAE,YAAkB;IEqjBvC,oBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,MAAM;IAEhB,4BAAY;MACV,gBAAgB,EF1lBF,OAAO;ME2lBrB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,IAAI;EAGjB,eAAO;IACL,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,OAAO;IACzB,iBAAE;MACA,SAAS,EAAE,IAAI;MACf,UAAU,EAAE,OAAO;MACnB,WAAW,EAAE,GAAG;;AAMpB,qBAAQ;EACN,UAAU,EAAE,OAAO;EACnB,WAAW,EAAE,KAAK;EAClB,UAAU,EAAE,GAAG;;AAInB,qBAAsB;EACpB,MAAM,EAAE,MAAM;;AAGhB,MAAO;EACL,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;;AAGlB,UAAW;EACT,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,GAAG;EACZ,gBAAgB,EFroBD,OAAO;EEsoBtB,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,KAAK;EAClB,aAAG;IACD,UAAU,EAAE,MAAM;;AAItB,WAAY;EACV,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,KAAK;EAChB,MAAM,EAAE,CAAC;EACT,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,QAAQ;EACjB,sBAAW;IACT,SAAS,EAAE,KAAK;;AAIpB,MAAO;EACL,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa;EAC9B,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,GAAG;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,MAAM;EACf,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,GAAG;EFhpBd,kBAAkB,EAAE,mCAAmC;EACvD,eAAe,EAAE,mCAAmC;EACpD,UAAU,EAAE,mCAAmC;EEgpB/C,oBAAc;IACZ,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,aAAa;EAEhC,mBAAa;IACX,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,KAAK;EAEf,oBAAc;IACZ,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,KAAK;IACb,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,KAAK;EAEnB,gCAAmB;IACjB,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,OAAO;EAEjB,8BAAwB;IACtB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,iBAAiB;IAChC,aAAa,EAAE,GAAG;EAEpB,cAAQ;IACN,MAAM,EAAE,KAAK;IACb,oBAAM;MACJ,OAAO,EAAE,YAAY;IAEvB,2BAAa;MACX,OAAO,EAAE,KAAK;EAGlB,eAAS;IACP,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;EAEjB,QAAE;IACA,KAAK,EAAE,OAAO;IACd,gBAAU;MACR,KAAK,EAAE,OAAO;EAGlB,uBAAiB;IACf,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,iBAAiB;EAElC,uBAAiB;IACf,KAAK,EAAE,OAAO;EAEhB,UAAI;IACF,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,MAAM;;AAI1B,eAAgB;EF5rBd,aAAa,EAAE,cAAkB;EACjC,kBAAkB,EAAE,cAAkB;EACtC,qBAAqB,EAAE,cAAkB;;AE8rB3C,SAAU;EACR,aAAa,EAAE,wBAAwB;EACvC,kBAAkB,EAAE,wBAAwB;EAC5C,qBAAqB,EAAE,wBAAwB;;AAGjD,WAAY;EACV,aAAa,EAAE,wBAAwB;EACvC,kBAAkB,EAAE,wBAAwB;EAC5C,qBAAqB,EAAE,wBAAwB;;AAGjD,UAAW;EF5sBT,aAAa,EAAE,cAAkB;EACjC,kBAAkB,EAAE,cAAkB;EACtC,qBAAqB,EAAE,cAAkB;;AE8sB3C,SAAU;EACR,KAAK,EAAE,eAAe;EACtB,MAAM,EAAE,eAAe;EACvB,cAAc,EAAE,MAAM;;AAGxB,KAAM;EACJ,OAAO,EAAE,eAAe;;AAG1B,WAAY;EACV,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,iBAAiB;;AAGlC,OAAQ;EFxvBN,kBAAkB,EAAE,oCAAoC;EACxD,eAAe,EAAE,oCAAoC;EACrD,UAAU,EAAE,+BAA+B;;AE0vB7C,MAAO;EACL,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,IAAI;EACb,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,SAAS;EACjB,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;;AAGjB,YAAa;EACX,gBAAgB,EF/wBE,OAAO;EEgxBzB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,GAAG;;AAGjB,cAAe;EACb,UAAU,EAAE,eAAe;;AAG7B,cAAe;EACb,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,KAAK;EACjB,iBAAG;IACD,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;;AAId,SAAU;EACR,MAAM,EAAE,UAAU;EAClB,KAAK,EAAE,GAAG;;AAGZ,aAAc;EACZ,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,QAAQ;EACzB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,QAAQ;EAChB,mBAAM;IACJ,OAAO,EAAE,YAAY;;AAIzB,YAAa;EACX,MAAM,EAAE,KAAK;;AAGf;iBACkB;EAChB,OAAO,EAAE,IAAI;EACb,SAAS,EAAE,IAAI;EACf,eAAe,EAAE,QAAQ;EACzB,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV;wBAAO;IACL,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,IAAI;IACjB;iDAAyB;MACvB,SAAS,EAAE,GAAG;MACd;wDAAK;QACH,KAAK,EAAE,IAAI;;AAMnB,wBAAyB;EACvB,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,iBAAiB;;AAGlC,UAAW;EACT,SAAS,EAAE,eAAe;;AAG5B,UAAW;EF1yBT,KAAK,EAnDS,OAAO;EAoDrB,gBAAgB,EArDF,OAAO;EAsDrB,MAAM,EAAE,iBAAwB;EE0yBhC,OAAO,EAAE,QAAQ;;AAGnB,UAAW;EFzyBT,KAAK,EArDU,OAAO;EAsDtB,gBAAgB,EAvDD,OAAO;EAwDtB,MAAM,EAAE,iBAAyB;EEyyBjC,OAAO,EAAE,QAAQ;;AAGnB,UAAW;EACT,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,GAAG;;AAGd,gBAAiB;EACf,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,sBAAM;IACJ,KAAK,EAAE,GAAG;;AAId,uBAAwB;EACtB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,CAAC;EACV,OAAO,EAAE,KAAK;EACd,IAAI,EAAE,KAAK;;AAGb,sBAAuB;EACrB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,KAAK;;AAId,yBAAY;EACV,KAAK,EFr4BO,OAAO;AEu4BrB,sBAAS;EACP,KAAK,EF73BO,OAAO;AE+3BrB,oBAAO;EACL,KAAK,EFv4BQ,OAAO;AEy4BtB,oBAAO;EACL,KAAK,EF54BM,OAAO;;AEi5BpB,kBAAY;EACV,MAAM,EAAE,SAAS;EACjB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;AAEnB,kBAAY;EACV,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,SAAS;EACjB,MAAM,EAAE,iBAAiB;EACzB,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,IAAI;;AAIrB,kDAAa;EACX,WAAW,EFr6BK,wHAAwH;EEs6BxI,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,KAAK;;AAGlB,iBAAkB;EAEhB,aAAa,EAAE,iBAAiB;EAChC,KAAK,EAAE,OAAO;;AAGhB,iBAAkB;EAEhB,MAAM,EAAE,qBAAqB;EAC7B,cAAc,EAAE,IAAI;;AAGtB,cAAe;EACb,KAAK,EAAE,KAAK;;AAGd,eAAgB;EACd,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,iBAAiB;EAC7B,WAAW,EAAE,KAAK;;AAGpB,iBAAkB;EAChB,KAAK,EFj8BS,OAAO;EEk8BrB,gBAAgB,EFn8BF,OAAO;;AEs8BvB,SAAU;EACR,MAAM,EAAE,OAAO;;AAGjB,SAAU;EACR,OAAO,EAAE,IAAI;EACb,gBAAgB,EAAE,eAAe;EACjC,KAAK,EFn8Ba,OAAO;EEo8BzB,aAAI;IACF,WAAW,EAAE,IAAI;;AAKnB,kBAAG;EACD,OAAO,EAAE,MAAM;EACf,UAAU,EAAE,IAAI;EAChB,qBAAG;IACD,OAAO,EAAE,MAAM;AAGnB,0BAAW;EACT,UAAU,EAAE,OAAO;EACnB,WAAW,EAAE,KAAK;EAClB,UAAU,EAAE,GAAG;;AAInB,QAAS;EACP,KAAK,EAAE,KAAK;EACZ,SAAS,EAAE,KAAK;EAChB,gBAAgB,EAAE,IAAI;EACtB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG;;AAGd,aAAc;EACZ,OAAO,EAAE,IAAI;EACb,6BAAgB;IACd,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,iBAAiB;;AAIpC,eAAgB;EACd,MAAM,EAAE,OAAO;;AAGjB,iBAAkB;EAChB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;EACX,6CAAU;IACR,YAAY,EAAE,KAAK;;AAIvB,aAAc;EACZ,QAAQ,EAAE,QAAQ;EAClB,+BAAkB;IAChB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,IAAI;;AAIjB,mBAAoB;EAClB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,OAAO,EAAE,YAAY;;AAGvB,mBAAoB;EAClB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAGb,WAAY;EACV,SAAS,EAAE,IAAI;;AAGjB,gBAAiB;EACf,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,GAAG;EF3+BlB,KAAK,EA3CQ,OAAO;EA4CpB,gBAAgB,EA7CH,OAAO;EA8CpB,MAAM,EAAE,iBAAuB;EE2+B/B,uBAAO;IACL,KAAK,EAAE,kBAAwB;EAEjC,kBAAE;IACA,KAAK,EAAE,kBAAwB;IAC/B,WAAW,EAAE,IAAI;;AAIrB,QAAS;EACP,KAAK,EAAE,IAAI;EACX,2BAA2B;EAC3B,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,GAAG;EAClB,cAAM;IACJ,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,IAAI;IACnB,KAAK,EFniCW,OAAO;IEoiCvB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,oDAA6D;IACzE,eAAe,EAAE,UAAU;IAC3B,MAAM,EAAE,KAAK;EAEf,oBAAY;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EF3iCW,OAAO;IE4iCvB,UAAU,EAAE,MAAM;IAClB,uBAAG;MACD,WAAW,EAAE,IAAI;MACjB,SAAS,EAAE,IAAI;MACf,cAAc,EAAE,GAAG;EAGvB,kBAAU;IACR,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,uBAAK;MACH,MAAM,EAAE,UAAU;MAClB,aAAa,EAAE,GAAG;MAClB,OAAO,EAAE,SAAS;MAClB,oCAAe;QFzhCnB,KAAK,EA3CQ,OAAO;QA4CpB,gBAAgB,EA7CH,OAAO;QA8CpB,MAAM,EAAE,iBAAuB;ME0hC3B,mCAAc;QFhhClB,KAAK,EArDU,OAAO;QAsDtB,gBAAgB,EAvDD,OAAO;QAwDtB,MAAM,EAAE,iBAAyB;QEghC3B,KAAK,EAAE,IAAI;MAEb,8BAAS;QF1hCb,KAAK,EAnDS,OAAO;QAoDrB,gBAAgB,EArDF,OAAO;QAsDrB,MAAM,EAAE,iBAAwB;ME2hC5B,gCAAS;QACP,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,kCAAE;UACA,YAAY,EAAE,IAAI;EAK1B,aAAK;IACH,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,IAAI;IAChB,sBAAS;MACP,aAAa,EAAE,GAAG;MAClB,6BAAO;QACL,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,MAAM;QAClB,gBAAgB,EF5lCJ,OAAO;QE6lCnB,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,OAAO;EAItB,oBAAY;IACV,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,MAAM;;AAItB,OAAQ;EACN,UAAU,EAAE,iBAAiB;;AAG/B,MAAO;EACL,UAAU,EAAE,gBAAgB;;AAG9B,KAAM;EACJ,UAAU,EAAE,eAAe;;AAG7B,UAAW;EACT,OAAO,EAAE,aAAa;;AAGxB,sBAAuB;EFzkCrB,KAAK,EArDU,OAAO;EAsDtB,gBAAgB,EAvDD,OAAO;EAwDtB,MAAM,EAAE,iBAAyB;EEykCjC,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,KAAK;EACb,SAAS,EAAE,KAAK;;AC1oChB,4BAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,IAAI;EAChB,yCAAa;IACX,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;EAEZ,yCAAa;IACX,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,KAAK;IACjB,2CAAE;MACA,KAAK,EAAE,OAAO;AAIpB,8BAAa;EACX,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,QAAQ;EAChB,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,KAAK;EHgChB,KAAK,EAnDS,OAAO;EAoDrB,gBAAgB,EArDF,OAAO;EAsDrB,MAAM,EAAE,iBAAwB;AG/BhC,4BAAW;EACT,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,eAAe;EACvB,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,iBAAiB;EAC7B,aAAa,EAAE,iBAAiB;EAChC,+BAAG;IACD,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,YAAY;IAC7B,UAAU,EAAE,IAAI;IAEd,yCAAO;MACL,OAAO,EAAE,KAAK;;AAOxB,oCAAqC;EAG/B,yCAAa;IACX,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,KAAK;EAEnB,yCAAa;IACX,UAAU,EAAE,GAAG;EAIjB,+BAAG;IACD,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM;IACtB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,IAAI;IAChB,kCAAG;MACD,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,IAAI;MAChB,yCAAO;QACL,OAAO,EAAE,KAAK;AD6kC1B,6CAA6C;AAC7C,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,qCAAsC;EAI9B,uCAAM;IACJ,MAAM,EAAE,eAAe;;EAK/B,MAAO;IACL,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,aAAa;IAC9B,SAAS,EAAE,IAAI;IACf,oBAAc;MACZ,eAAe,EAAE,aAAa;MAC9B,SAAS,EAAE,IAAI;IAEjB,yCAA4B;MAC1B,KAAK,EAAE,IAAI;IAEb,0BAAoB;MAClB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,MAAM;AAKrB,oCAAqC;EAEjC,gCAAM;IACJ,KAAK,EAAE,IAAI;EAEb,kDAAe;IACb,KAAK,EAAE,IAAI;EAEb,8CAAa;IACX,OAAO,EAAE,IAAI;EAGb,wEAAc;IACZ,OAAO,EAAE,KAAK;;EAOhB,kCAAe;IACb,KAAK,EAAE,GAAG;EAEZ,gCAAa;IACX,KAAK,EAAE,GAAG;EAGV,sDAAmB;IACjB,KAAK,EAAE,IAAI;EAKjB,qDAA6C;IAC3C,OAAO,EAAE,IAAI;EAGf,4CAA2B;IACzB,KAAK,EAAE,IAAI;IACX,kFAAmB;MACjB,KAAK,EAAE,IAAI;EAIf,2BAAmB;IACjB,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;;EAKd,gCAAsB;IACpB,OAAO,EAAE,YAAY;;EAKvB,kBAAU;IACR,SAAS,EAAE,IAAI;;EAInB,eAAgB;IACd,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,IAAI;;EAIX,0CAAO;IACL,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,QAAQ;IACvB,gBAAgB,EAAE,QAAQ;EAE5B,iCAAgB;IACd,OAAO,EAAE,gBAAgB", "sources": ["_elements.scss","_base.scss","_noheader.scss","styles.scss","_login.scss"], "names": [], "file": "styles.css" diff --git a/app/modules/web/themes/material-blue/css/styles.min.css b/app/modules/web/themes/material-blue/css/styles.min.css index db33edc6..3c3938cf 100644 --- a/app/modules/web/themes/material-blue/css/styles.min.css +++ b/app/modules/web/themes/material-blue/css/styles.min.css @@ -1 +1 @@ -html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box;max-width:100%}*{font-family:"Roboto Regular",Verdana,Tahoma,sans-serif;box-sizing:inherit}*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr{height:20px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover,table tr.odd:hover{background-color:#e8ff99}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}form .form-field{display:flex;justify-content:space-between}form .form-field>label{min-width:12em;padding:.5em 0;font-size:16px;align-self:center}form .form-field>div{width:100%;align-self:center}a{text-decoration:none;color:#536dfe}a:visited{text-decoration:none;color:#536dfe}a:hover,a:active,a:focus{text-decoration:none;cursor:pointer}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}body.login,body.logout,body.userpassreset{background:#607d8b}body.login #wrap,body.logout #wrap,body.userpassreset #wrap{background:transparent}body.login #container,body.logout #container,body.userpassreset #container{padding-top:5%}body.login footer,body.logout footer,body.userpassreset footer{background:#78909c}body.login footer a,body.logout footer a,body.userpassreset footer a{color:#f2f2f2}#box-pub-noheader{background:transparent url("public/images/logo_full_nobg_outline.png") no-repeat top center;background-size:75% auto;width:40em;min-height:20em;margin:0 auto}#box-pub-noheader>div{width:100%;padding:1em;margin:0 auto}#box-pub-noheader .box-spacer{height:15em;background-color:transparent}#box-pub-noheader .box-header{width:100%;color:#f2f2f2;font-size:16px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form{-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}#box-pub-noheader .box-form form fieldset#box-data{height:100%;min-height:14em;text-align:left;background-color:transparent;margin-bottom:2em}#box-pub-noheader .box-form form fieldset#box-data legend{width:100%;color:#607d8b;font-size:14px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form form fieldset#box-data .form-control>i{margin-right:.5em;opacity:.5}#box-pub-noheader .box-form form fieldset#box-data .extra-hidden{display:none}#box-pub-noheader .box-form div#box-buttons{margin-top:2em;text-align:center}@media screen and (max-width:600px){#box-pub-noheader{width:25em}#box-pub-noheader .box-spacer{height:10em}#box-pub-noheader form fieldset#box-data .mdl-textfield{width:100%}}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:#ef5350;color:white;font-weight:bold;font-size:14px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5;padding-bottom:5em}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,0.8);display:none;border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}#wrap-loading.overlay-full{top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.5)}#wrap-loading.overlay-full #loading{position:absolute;top:50%;left:50%}#wrap-loading.overlay-full #taskStatus{display:block}#wrap-loading #taskStatus{display:none;position:absolute;left:0;top:55%;width:100%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);padding:1em 0}#container{margin:auto;width:100%}#container.error,#container.install{width:100%}#container .logo{height:64px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:2em auto 8em auto}#container #content.public-link{width:70%;min-height:0;margin:5em auto}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;border-right:1px solid #d9d9d9;color:#999;font-size:12px;font-weight:bold}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:none;width:100%;color:#607d8b;font-size:12px}#content .pager{width:100%;margin-top:15px;padding:.5em;vertical-align:middle;font-size:11px;color:#999;background-color:#fcfcfc}#content .pager img{margin-left:5px;vertical-align:middle}#content .pager a{margin-left:5px;font-size:12px;color:#999}#content .pager>div{display:inline-block;width:49%}#content .pager .pager-left{text-align:left}#content .pager .pager-right{text-align:right}#content #title{width:100%;padding:7px;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.2em}#content #title.titleNormal{background-color:#607d8b;color:#fff}#content .data-container{width:75%;margin:0 auto}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>div{display:none}#content fieldset.data>div table{width:100%}#content .data{width:100%;padding:10px;margin:0 auto;background-color:#fff;-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .dropzone{width:100%;padding:1em;border:2px dashed #26a69a;text-align:center;opacity:.3}#content .data .dropzone:hover{opacity:1}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .data .account-permissions .tag-list-box{margin-bottom:1em}#content .data .account-permissions .tag-list-box .tag-list-header{text-align:left;border-bottom:1px solid #d9d9d9;color:#607d8b;font-size:12px;font-weight:bold}#content span.tag{margin:0 3px 3px 0;padding:.2em;background:#5c6bc0;color:#fff;border:0 solid transparent;border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}#content .extra-info{margin-top:20px}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff8e1;color:#ffca28;font-weight:bold}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#5c6bc0}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-flow:row;flex-wrap:wrap;align-content:flex-start;justify-content:space-around;margin:0}#content .data-header-minimal li{min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-header-minimal li.search-filter-spacer{flex:0 0 18em}#content .data-table{width:100%}#content .data-table td:first-of-type,#content .data-table th:first-of-type{width:5em}#content .data-table thead th{background-color:#607d8b;color:#fff}#content .data-table tbody td.cell-data{text-align:left}#content .data-table tbody td.cell-nodata{padding:0 .5em;text-align:left}#content .data-table tbody td.cell-actions{text-align:right}#content .data-table tbody td.cell-actions i{opacity:.5}#content .data-table tbody td.cell-actions i:hover{opacity:1}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:left;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img{width:24px;height:24px;margin:0 .5em}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{background-color:#fcfcfc;vertical-align:middle;position:relative;height:auto;padding:.5em 1em;margin-bottom:2em}#content #searchbox form{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox .search-filters .filter-slider{width:10em}#content #searchbox .search-filters-tags{display:none;flex-grow:2}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content .actions-optional{display:none}#content .error{width:350px;padding:15px;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#content .data .user-list-action,#content .data .profile-list-action,#box-popup .user-list-action,#box-popup .profile-list-action{width:75%;margin:0 auto}#content .data .list-wrap,#box-popup .list-wrap{max-height:20em;overflow:auto;padding:.5em;margin:1em 0}#content .data .list-wrap ul,#box-popup .list-wrap ul{list-style-type:none;margin:0;padding:0}#content .data .list-wrap li,#box-popup .list-wrap li{display:flex;background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:.5em}#content .data .list-wrap li:hover,#box-popup .list-wrap li:hover{background:#e8eaf6;color:#000}#content .data .list-wrap div.files-item-info,#box-popup .list-wrap div.files-item-info{flex-grow:2}#content .data .list-wrap div.files-item-info img,#box-popup .list-wrap div.files-item-info img{margin:0 .5em}#content .data .list-wrap div.files-item-actions,#box-popup .list-wrap div.files-item-actions{padding:.3em 0}#content .data .list-actions i,#box-popup .list-actions i{opacity:.5}#content .data .list-actions i:hover,#box-popup .list-actions i:hover{opacity:1}#box-popup{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:30em}#box-popup>h2{position:relative;width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0;padding:.5em 0;line-height:1em}#box-popup>h2 .btn-popup-close{display:none;position:absolute;right:.5em;top:.2em}#box-popup>table{width:100%;padding-bottom:1em}#box-popup select{width:220px}#box-popup #resFancyAccion{display:none}#box-popup #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#box-popup.image{background-color:transparent;max-width:100%;margin:0 auto;border-radius:0 !important;-moz-border-radius:0 !important;-webkit-border-radius:0 !important}#box-popup.image img{width:auto;margin:0 auto}#box-popup.image>div.title{background-color:#607d8b;color:#fff;padding:.5em}#box-popup.help{min-height:100px;background-color:#f5f5f5}#box-popup.help p{font-size:14px;text-align:justify;line-height:2em}#box-complexity>div{text-align:justify;line-height:1.5em;margin-top:1em}#box-upload-files>*{margin:0 auto}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:#fff8e1;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.popup-data{width:100%;min-width:400px;border:0;text-align:left;margin:0;padding:1em .5em}.popup-data .descField{min-width:100px}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;-webkit-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);-moz-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14)}footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left{width:50%;margin:0 1em}footer #footer-right{width:50%;margin:0 1em;justify-content:flex-end;text-align:right}footer #updates,footer #notices{min-width:5em;text-align:center;cursor:pointer}footer #notices .notices-title{font-weight:bold;border-bottom:1px solid #c9c9c9;margin-bottom:1em}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a{color:#b9b9b9}footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round,.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}.noRes{width:60%;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-grey{background-color:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action-in-box{padding:1em;text-align:right}.action-in-box ul{list-style:none;margin:0;padding:0}.tab-data{margin:2em auto 0;width:75%}.item-actions{display:flex;justify-content:flex-end;position:relative;margin:1em auto}.item-actions>div{display:inline-block}.tab-actions{margin:2em 0}.item-actions>ul,.tab-actions>ul{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;list-style:none;margin:0;padding:0}.item-actions>ul>li,.tab-actions>ul>li{width:auto;min-width:2em;margin-left:.5em}.item-actions>ul>li.datagrid-action-search,.tab-actions>ul>li.datagrid-action-search{min-width:5em}.item-actions>ul>li.datagrid-action-search form,.tab-actions>ul>li.datagrid-action-search form{width:100%}h5.datagrid-header-title{padding:.7em;border-bottom:1px solid #d9d9d9}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;padding:.3em 1em}.global-on{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;padding:.3em 1em}.opacity50{filter:alpha(opacity=50);opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.password-level.strongest{color:#26a69a}.password-level.strong{color:#2196f3}.password-level.good{color:#ffca28}.password-level.weak{color:#ef5350}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-text,.dialog-user-text,.dialog-pass-text{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;padding:.5em;text-align:center;min-width:200px}.dialog-user-text{border-bottom:#d9d9d9 1px solid;color:#a9a9a9}.dialog-pass-text{border:transparent 1px solid;letter-spacing:.2em}.dialog-button{width:150px}.dialog-buttons{text-align:center;padding:.5em;border-top:1px solid #c9c9c9;line-height:2.5em}.dialog-clip-copy{color:#26a69a;background-color:#e0f2f1}.btn-help{cursor:pointer}.help-box{display:none;background-color:#fff !important;color:#607d8b}.help-box>*{font-weight:bold}.help-container ul{padding:0 .5em;list-style:none}.help-container ul li{padding:.5em 0}.help-container .help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.tooltip-text{padding:.5em}.tooltip-text .tooltip-header{text-transform:capitalize;font-weight:bold;border-bottom:1px solid #c9c9c9}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.form-control{position:relative}.form-control .password-actions{position:absolute;right:0;padding:20px}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{min-width:20em}fieldset.warning{padding:8px;border-radius:5px;color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}fieldset.warning legend{color:#ef5350 !important}fieldset.warning a{color:#ef5350 !important;font-weight:bold}#actions{width:100%;line-height:2em;margin-bottom:5em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;align-items:center;background:url("public/images/logo_full_bg.png") left no-repeat;background-size:auto 150px;height:150px}#actions #page-title{width:100%;color:#607d8b;text-align:center}#actions #page-title h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40vw;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:3px;padding:1em .5em}#actions ul.errors>li.msg-critical{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}#actions ul.errors>li.msg-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;color:#555}#actions ul.errors>li.msg-ok{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#actions ul.errors>li>p.hint{color:#555;font-size:12px}#actions ul.errors>li>p.hint i{margin-right:.5em}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset{margin-bottom:2em}#actions form fieldset legend{width:100%;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin:1em 0;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !important}.opacity50{opacity:.5 !important}.msg-option-unvailable{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;border:0;padding:.5em;text-align:center;margin:1em 0;font-size:1.5em}#box-pub-noheader #box-login{position:relative;min-height:14em}#box-pub-noheader #box-login #box-buttons{position:absolute;top:2em;right:2em}#box-pub-noheader #box-login #box-actions{width:100%;text-align:right}#box-pub-noheader #box-login #box-actions a{color:#c9c9c9}#box-pub-noheader #box-updated{width:350px;margin:3em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#box-pub-noheader #demo-info{padding:.5em;margin:3em auto 0 auto;color:#c9c9c9;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9}#box-pub-noheader #demo-info ul{display:flex;justify-content:space-around;list-style:none}#box-pub-noheader #demo-info ul li>span{padding:0 1em}@media screen and (max-width:600px){#box-pub-noheader #box-login #box-buttons{position:relative;top:0;right:0;text-align:right}#box-pub-noheader #box-login #box-actions{margin-top:1em}#box-pub-noheader #demo-info ul{display:flex;flex-direction:column;align-items:center;list-style:none}#box-pub-noheader #demo-info ul li{width:11em;text-align:left}#box-pub-noheader #demo-info ul li>span{padding:0 1em}}@media screen and (max-width:1000px){#content #searchbox .search-filters>*{margin:.5em 1em .5em 0}footer{display:none;justify-content:space-between;flex-wrap:wrap}footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right{width:100%}footer .footer-parts>div{width:100%;padding:.5em 0}}@media screen and (max-width:600px){#content input,#box-popup input{width:100%}#content .mdl-textfield,#box-popup .mdl-textfield{width:100%}#content td.descField,#box-popup td.descField{display:none}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:block}#content #searchbox .mdl-textfield{width:90%}#content #searchbox .search-text{width:90%}#content #searchbox .search-filters .selectize-control{width:100%}#content .data-header-minimal li.search-filter-spacer{display:none}#content .data-container,#content .tab-data{width:100%}#content .data-container .selectize-control,#content .tab-data .selectize-control{width:100%}#content .mdl-tabs__tab-bar{flex-wrap:wrap;height:auto}#box-popup h2>.btn-popup-close{display:inline-block}#actions ul.errors{max-width:90vw}.mdl-data-table{table-layout:fixed;width:100%}.table-responsive td,.table-responsive th{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.table-responsive .cell-actions i{display:block !important}} \ No newline at end of file +html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box;max-width:100%}*{font-family:"Roboto Regular",Verdana,Tahoma,sans-serif;box-sizing:inherit}*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr{height:20px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover,table tr.odd:hover{background-color:#e8ff99}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}form .form-field{display:flex;justify-content:space-between}form .form-field>label{min-width:12em;padding:.5em 0;font-size:16px;align-self:center}form .form-field>div{width:100%;align-self:center}a{text-decoration:none;color:#536dfe}a:visited{text-decoration:none;color:#536dfe}a:hover,a:active,a:focus{text-decoration:none;cursor:pointer}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}body.login,body.logout,body.userpassreset{background:#607d8b}body.login #wrap,body.logout #wrap,body.userpassreset #wrap{background:transparent}body.login #container,body.logout #container,body.userpassreset #container{padding-top:5%}body.login footer,body.logout footer,body.userpassreset footer{background:#78909c}body.login footer a,body.logout footer a,body.userpassreset footer a{color:#f2f2f2}#box-pub-noheader{background:transparent url("public/images/logo_full_nobg_outline.png") no-repeat top center;background-size:75% auto;width:40em;min-height:20em;margin:0 auto}#box-pub-noheader>div{width:100%;padding:1em;margin:0 auto}#box-pub-noheader .box-spacer{height:15em;background-color:transparent}#box-pub-noheader .box-header{width:100%;color:#f2f2f2;font-size:16px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form{-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}#box-pub-noheader .box-form form fieldset#box-data{height:100%;min-height:14em;text-align:left;background-color:transparent;margin-bottom:2em}#box-pub-noheader .box-form form fieldset#box-data legend{width:100%;color:#607d8b;font-size:14px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form form fieldset#box-data .form-control>i{margin-right:.5em;opacity:.5}#box-pub-noheader .box-form form fieldset#box-data .extra-hidden{display:none}#box-pub-noheader .box-form div#box-buttons{margin-top:2em;text-align:center}@media screen and (max-width:600px){#box-pub-noheader{width:25em}#box-pub-noheader .box-spacer{height:10em}#box-pub-noheader form fieldset#box-data .mdl-textfield{width:100%}}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:#ef5350;color:white;font-weight:bold;font-size:14px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5;padding-bottom:5em}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,0.8);display:none;border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}#wrap-loading.overlay-full{top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.5)}#wrap-loading.overlay-full #loading{position:absolute;top:50%;left:50%}#wrap-loading.overlay-full #taskStatus{display:block}#wrap-loading #taskStatus{display:none;position:absolute;left:0;top:55%;width:100%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);padding:1em 0}#container{margin:auto;width:100%}#container.error,#container.install{width:100%}#container .logo{height:64px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:2em auto 8em auto}#container #content.public-link{width:70%;min-height:0;margin:5em auto}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;border-right:1px solid #d9d9d9;color:#999;font-size:12px;font-weight:bold}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:none;width:100%;color:#607d8b;font-size:12px}#content .pager{width:100%;margin-top:15px;padding:.5em;vertical-align:middle;font-size:11px;color:#999;background-color:#fcfcfc}#content .pager img{margin-left:5px;vertical-align:middle}#content .pager a{margin-left:5px;font-size:12px;color:#999}#content .pager>div{display:inline-block;width:49%}#content .pager .pager-left{text-align:left}#content .pager .pager-right{text-align:right}#content #title{width:100%;padding:7px;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.2em}#content #title.titleNormal{background-color:#607d8b;color:#fff}#content .data-container{width:75%;margin:0 auto}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>div{display:none}#content fieldset.data>div table{width:100%}#content .data{width:100%;padding:10px;margin:0 auto;background-color:#fff;-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .dropzone{width:100%;padding:1em;border:2px dashed #26a69a;text-align:center;opacity:.3}#content .data .dropzone:hover{opacity:1}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .data .account-permissions .tag-list-box{margin-bottom:1em}#content .data .account-permissions .tag-list-box .tag-list-header{text-align:left;border-bottom:1px solid #d9d9d9;color:#607d8b;font-size:12px;font-weight:bold}#content .data .account-permissions .tag-list-box .tag-list-body{padding:.5em 0}#content span.tag{margin:0 3px 3px 0;padding:3px;background:#5c6bc0;color:#fff;border:0 solid transparent;border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}#content .extra-info{margin-top:20px}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff8e1;color:#ffca28;font-weight:bold}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#5c6bc0}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-flow:row;flex-wrap:wrap;align-content:flex-start;justify-content:space-around;margin:0}#content .data-header-minimal li{min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-header-minimal li.search-filter-spacer{flex:0 0 18em}#content .data-table{width:100%}#content .data-table td:first-of-type,#content .data-table th:first-of-type{width:5em}#content .data-table thead th{background-color:#607d8b;color:#fff}#content .data-table tbody td.cell-data{text-align:left}#content .data-table tbody td.cell-nodata{padding:0 .5em;text-align:left}#content .data-table tbody td.cell-actions{text-align:right}#content .data-table tbody td.cell-actions i{opacity:.5}#content .data-table tbody td.cell-actions i:hover{opacity:1}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:left;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img{width:24px;height:24px;margin:0 .5em}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{background-color:#fcfcfc;vertical-align:middle;position:relative;height:auto;padding:.5em 1em;margin-bottom:2em}#content #searchbox form{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox .search-filters .filter-slider{width:10em}#content #searchbox .search-filters-tags{display:none;flex-grow:2}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content .actions-optional{display:none}#content .error{width:350px;padding:15px;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#content .data .user-list-action,#content .data .profile-list-action,#box-popup .user-list-action,#box-popup .profile-list-action{width:75%;margin:0 auto}#content .data .list-wrap,#box-popup .list-wrap{max-height:20em;overflow:auto;padding:.5em;margin:1em 0}#content .data .list-wrap ul,#box-popup .list-wrap ul{list-style-type:none;margin:0;padding:0}#content .data .list-wrap li,#box-popup .list-wrap li{display:flex;background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:.5em}#content .data .list-wrap li:hover,#box-popup .list-wrap li:hover{background:#e8eaf6;color:#000}#content .data .list-wrap div.files-item-info,#box-popup .list-wrap div.files-item-info{flex-grow:2}#content .data .list-wrap div.files-item-info img,#box-popup .list-wrap div.files-item-info img{margin:0 .5em}#content .data .list-wrap div.files-item-actions,#box-popup .list-wrap div.files-item-actions{padding:.3em 0}#content .data .list-actions i,#box-popup .list-actions i{opacity:.5}#content .data .list-actions i:hover,#box-popup .list-actions i:hover{opacity:1}#box-popup{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:30em}#box-popup>h2{position:relative;width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0;padding:.5em 0;line-height:1em}#box-popup>h2 .btn-popup-close{display:none;position:absolute;right:.5em;top:.2em}#box-popup>table{width:100%;padding-bottom:1em}#box-popup select{width:220px}#box-popup #resFancyAccion{display:none}#box-popup #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#box-popup.image{background-color:transparent;max-width:100%;margin:0 auto;border-radius:0 !important;-moz-border-radius:0 !important;-webkit-border-radius:0 !important}#box-popup.image img{width:auto;margin:0 auto}#box-popup.image>div.title{background-color:#607d8b;color:#fff;padding:.5em}#box-popup.help{min-height:100px;background-color:#f5f5f5}#box-popup.help p{font-size:14px;text-align:justify;line-height:2em}#box-complexity>div{text-align:justify;line-height:1.5em;margin-top:1em}#box-upload-files>*{margin:0 auto}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:#fff8e1;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.popup-data{width:100%;min-width:400px;border:0;text-align:left;margin:0;padding:1em .5em}.popup-data .descField{min-width:100px}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;-webkit-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);-moz-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14)}footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left{width:50%;margin:0 1em}footer #footer-right{width:50%;margin:0 1em;justify-content:flex-end;text-align:right}footer #updates,footer #notices{min-width:5em;text-align:center;cursor:pointer}footer #notices .notices-title{font-weight:bold;border-bottom:1px solid #c9c9c9;margin-bottom:1em}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a{color:#b9b9b9}footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round,.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}.noRes{width:60%;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-grey{background-color:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action-in-box{padding:1em;text-align:right}.action-in-box ul{list-style:none;margin:0;padding:0}.tab-data{margin:2em auto 0;width:75%}.item-actions{display:flex;justify-content:flex-end;position:relative;margin:1em auto}.item-actions>div{display:inline-block}.tab-actions{margin:2em 0}.item-actions>ul,.tab-actions>ul{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;list-style:none;margin:0;padding:0}.item-actions>ul>li,.tab-actions>ul>li{width:auto;min-width:2em;margin-left:.5em}.item-actions>ul>li.datagrid-action-search,.tab-actions>ul>li.datagrid-action-search{min-width:5em}.item-actions>ul>li.datagrid-action-search form,.tab-actions>ul>li.datagrid-action-search form{width:100%}h5.datagrid-header-title{padding:.7em;border-bottom:1px solid #d9d9d9}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;padding:.3em 1em}.global-on{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;padding:.3em 1em}.opacity50{filter:alpha(opacity=50);opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.password-level.strongest{color:#26a69a}.password-level.strong{color:#2196f3}.password-level.good{color:#ffca28}.password-level.weak{color:#ef5350}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-text,.dialog-user-text,.dialog-pass-text{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;padding:.5em;text-align:center;min-width:200px}.dialog-user-text{border-bottom:#d9d9d9 1px solid;color:#a9a9a9}.dialog-pass-text{border:transparent 1px solid;letter-spacing:.2em}.dialog-button{width:150px}.dialog-buttons{text-align:center;padding:.5em;border-top:1px solid #c9c9c9;line-height:2.5em}.dialog-clip-copy{color:#26a69a;background-color:#e0f2f1}.btn-help{cursor:pointer}.help-box{display:none;background-color:#fff !important;color:#607d8b}.help-box>*{font-weight:bold}.help-container ul{padding:0 .5em;list-style:none}.help-container ul li{padding:.5em 0}.help-container .help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.tooltip-text{padding:.5em}.tooltip-text .tooltip-header{text-transform:capitalize;font-weight:bold;border-bottom:1px solid #c9c9c9}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.form-control{position:relative}.form-control .password-actions{position:absolute;right:0;padding:20px}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{min-width:20em}fieldset.warning{padding:8px;border-radius:5px;color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}fieldset.warning legend{color:#ef5350 !important}fieldset.warning a{color:#ef5350 !important;font-weight:bold}#actions{width:100%;line-height:2em;margin-bottom:5em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;align-items:center;background:url("public/images/logo_full_bg.png") left no-repeat;background-size:auto 150px;height:150px}#actions #page-title{width:100%;color:#607d8b;text-align:center}#actions #page-title h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40vw;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:3px;padding:1em .5em}#actions ul.errors>li.msg-critical{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}#actions ul.errors>li.msg-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;color:#555}#actions ul.errors>li.msg-ok{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#actions ul.errors>li>p.hint{color:#555;font-size:12px}#actions ul.errors>li>p.hint i{margin-right:.5em}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset{margin-bottom:2em}#actions form fieldset legend{width:100%;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin:1em 0;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !important}.opacity50{opacity:.5 !important}.msg-option-unvailable{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;border:0;padding:.5em;text-align:center;margin:1em 0;font-size:1.5em}#box-pub-noheader #box-login{position:relative;min-height:14em}#box-pub-noheader #box-login #box-buttons{position:absolute;top:2em;right:2em}#box-pub-noheader #box-login #box-actions{width:100%;text-align:right}#box-pub-noheader #box-login #box-actions a{color:#c9c9c9}#box-pub-noheader #box-updated{width:350px;margin:3em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#box-pub-noheader #demo-info{padding:.5em;margin:3em auto 0 auto;color:#c9c9c9;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9}#box-pub-noheader #demo-info ul{display:flex;justify-content:space-around;list-style:none}#box-pub-noheader #demo-info ul li>span{padding:0 1em}@media screen and (max-width:600px){#box-pub-noheader #box-login #box-buttons{position:relative;top:0;right:0;text-align:right}#box-pub-noheader #box-login #box-actions{margin-top:1em}#box-pub-noheader #demo-info ul{display:flex;flex-direction:column;align-items:center;list-style:none}#box-pub-noheader #demo-info ul li{width:11em;text-align:left}#box-pub-noheader #demo-info ul li>span{padding:0 1em}}@media screen and (max-width:1000px){#content #searchbox .search-filters>*{margin:.5em 1em .5em 0}footer{display:none;justify-content:space-between;flex-wrap:wrap}footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right{width:100%}footer .footer-parts>div{width:100%;padding:.5em 0}}@media screen and (max-width:600px){#content input,#box-popup input{width:100%}#content .mdl-textfield,#box-popup .mdl-textfield{width:100%}#content td.descField,#box-popup td.descField{display:none}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:block}#content #searchbox .mdl-textfield{width:90%}#content #searchbox .search-text{width:90%}#content #searchbox .search-filters .selectize-control{width:100%}#content .data-header-minimal li.search-filter-spacer{display:none}#content .data-container,#content .tab-data{width:100%}#content .data-container .selectize-control,#content .tab-data .selectize-control{width:100%}#content .mdl-tabs__tab-bar{flex-wrap:wrap;height:auto}#box-popup h2>.btn-popup-close{display:inline-block}#actions ul.errors{max-width:90vw}.mdl-data-table{table-layout:fixed;width:100%}.table-responsive td,.table-responsive th{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.table-responsive .cell-actions i{display:block !important}} \ No newline at end of file diff --git a/app/modules/web/themes/material-blue/css/styles.scss b/app/modules/web/themes/material-blue/css/styles.scss index 0334b89f..e05fbf8b 100644 --- a/app/modules/web/themes/material-blue/css/styles.scss +++ b/app/modules/web/themes/material-blue/css/styles.scss @@ -243,12 +243,15 @@ font-size: 12px; font-weight: bold; } + .tag-list-body { + padding: .5em 0; + } } } } span.tag { margin: 0 3px 3px 0; - padding: .2em; + padding: 3px; background: $color-indigo-fg; color: #fff; border: 0 solid rgba(0, 0, 0, 0); diff --git a/app/modules/web/themes/material-blue/js/app-theme.js b/app/modules/web/themes/material-blue/js/app-theme.js index 381df261..ba1ff4c8 100644 --- a/app/modules/web/themes/material-blue/js/app-theme.js +++ b/app/modules/web/themes/material-blue/js/app-theme.js @@ -21,11 +21,9 @@ * along with sysPass. If not, see . */ -sysPass.Theme = function (Common) { +sysPass.Theme = function (log) { "use strict"; - const log = Common.log; - /** * Funciones a realizar en peticiones AJAX * @@ -69,14 +67,14 @@ sysPass.Theme = function (Common) { // Función para generar claves aleatorias. const randomPassword = function ($target) { - Common.generateRandomPass(function (password, level) { + sysPassApp.util.password.random(function (password, level) { $target.attr("data-pass", password); // if ($target) { const $dstParent = $target.parent(); const $targetR = $("#" + $target.attr("id") + "_repeat"); - Common.outputResult(level, $target); + sysPassApp.util.password.output(level, $target); // Actualizar los componentes de MDL const mdl = new MaterialTextfield(); @@ -92,7 +90,7 @@ sysPass.Theme = function (Common) { $targetR.val(password).parent() .addClass(mdl.CssClasses_.IS_DIRTY) .removeClass(mdl.CssClasses_.IS_INVALID); - Common.encryptFormValue($targetR); + sysPassApp.encryptFormValue($targetR); } }); }; @@ -104,52 +102,52 @@ sysPass.Theme = function (Common) { `
- +
`; mdlDialog().show({ - title: Common.config().LANG[29], + title: sysPassApp.config.LANG[29], text: content, negative: { - title: Common.config().LANG[44] + title: sysPassApp.config.LANG[44] }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { e.preventDefault(); - Common.passwordData.complexity.chars = $("#checkbox-chars").is(":checked"); - Common.passwordData.complexity.numbers = $("#checkbox-numbers").is(":checked"); - Common.passwordData.complexity.uppercase = $("#checkbox-uppercase").is(":checked"); - Common.passwordData.complexity.symbols = $("#checkbox-symbols").is(":checked"); - Common.passwordData.complexity.numlength = parseInt($("#passlength").val()); + sysPassApp.util.password.config.complexity.chars = $("#checkbox-chars").is(":checked"); + sysPassApp.util.password.config.complexity.numbers = $("#checkbox-numbers").is(":checked"); + sysPassApp.util.password.config.complexity.uppercase = $("#checkbox-uppercase").is(":checked"); + sysPassApp.util.password.config.complexity.symbols = $("#checkbox-symbols").is(":checked"); + sysPassApp.util.password.config.complexity.numlength = parseInt($("#passlength").val()); } }, cancelable: true, contentStyle: {"max-width": "300px"}, onLoaded: function () { - $("#checkbox-chars").prop("checked", Common.passwordData.complexity.chars); - $("#checkbox-numbers").prop("checked", Common.passwordData.complexity.numbers); - $("#checkbox-uppercase").prop("checked", Common.passwordData.complexity.uppercase); - $("#checkbox-symbols").prop("checked", Common.passwordData.complexity.symbols); - $("#passlength").val(Common.passwordData.complexity.numlength); + $("#checkbox-chars").prop("checked", sysPassApp.util.password.config.complexity.chars); + $("#checkbox-numbers").prop("checked", sysPassApp.util.password.config.complexity.numbers); + $("#checkbox-uppercase").prop("checked", sysPassApp.util.password.config.complexity.uppercase); + $("#checkbox-symbols").prop("checked", sysPassApp.util.password.config.complexity.symbols); + $("#passlength").val(sysPassApp.util.password.config.complexity.numlength); } }); }; @@ -166,7 +164,7 @@ sysPass.Theme = function (Common) { return; } - const uniqueId = Common.uniqueId(); + const uniqueId = sysPassApp.util.uniqueId(); const $thisParent = $this.parent(); const $form = $this.closest("form"); const targetId = $this.attr("id") + "-" + uniqueId; @@ -178,20 +176,20 @@ sysPass.Theme = function (Common) { $this.attr("data-pass", $this.val()); let btnMenu = - ` + `
    -
  • settings${Common.config().LANG[28]}
  • -
  • vpn_key${Common.config().LANG[29]}
  • -
  • refresh${Common.config().LANG[30]}
`; +
  • settings${sysPassApp.config.LANG[28]}
  • +
  • vpn_key${sysPassApp.config.LANG[29]}
  • +
  • refresh${sysPassApp.config.LANG[30]}
  • `; $thisParent.after(`
    `); $thisParent.next(".password-actions") - .prepend(`remove_red_eye`) + .prepend(`remove_red_eye`) .prepend(btnMenu); $this.on("keyup", function () { - Common.checkPassLevel($this); + sysPassApp.util.password.checkLevel($this); this.dataset.pass = $this.val(); }); @@ -248,10 +246,10 @@ sysPass.Theme = function (Common) { // Crear los iconos de acciones sobre claves (sólo mostrar clave) $container.find(".passwordfield__input-show").each(function () { const $this = $(this); - const $icon = $("remove_red_eye"); + const $icon = $("remove_red_eye"); if ($this.data("clipboard") === 1) { - const $clip = $("content_paste"); + const $clip = $("content_paste"); $this.parent().after($clip).after($icon); } else { $this.parent().after($icon); @@ -273,18 +271,18 @@ sysPass.Theme = function (Common) { const datePickerOpts = { format: "YYYY-MM-DD", - lang: Common.config().LOCALE.substr(0, 2), + lang: sysPassApp.config.BROWSER.LOCALE.substr(0, 2), time: false, - cancelText: Common.config().LANG[44], - okText: Common.config().LANG[43], - clearText: Common.config().LANG[30], - nowText: Common.config().LANG[56], + cancelText: sysPassApp.config.LANG[44], + okText: sysPassApp.config.LANG[43], + clearText: sysPassApp.config.LANG[30], + nowText: sysPassApp.config.LANG[56], minDate: new Date(), triggerEvent: "dateIconClick" }; const getUnixtime = function (val) { - return moment.tz(val, Common.config().TIMEZONE).format("X"); + return moment.tz(val, sysPassApp.config.BROWSER.TIMEZONE).format("X"); }; $container.find(".password-datefield__input").each(function () { @@ -336,12 +334,12 @@ sysPass.Theme = function (Common) { if ($searchfav.val() == 0) { $icon.addClass("mdl-color-text--amber-A200"); - $icon.attr("title", Common.config().LANG[53]); + $icon.attr("title", sysPassApp.config.LANG[53]); $searchfav.val(1); } else { $icon.removeClass("mdl-color-text--amber-A200"); - $icon.attr("title", Common.config().LANG[52]); + $icon.attr("title", sysPassApp.config.LANG[52]); $searchfav.val(0); } @@ -352,11 +350,11 @@ sysPass.Theme = function (Common) { const checkFavorite = function ($obj) { if ($obj.data("status") === "on") { $obj.addClass("mdl-color-text--amber-A100"); - $obj.attr("title", Common.config().LANG[50]); + $obj.attr("title", sysPassApp.config.LANG[50]); $obj.html("star"); } else { $obj.removeClass("mdl-color-text--amber-A100"); - $obj.attr("title", Common.config().LANG[49]); + $obj.attr("title", sysPassApp.config.LANG[49]); $obj.html("star_border"); } }; @@ -369,11 +367,11 @@ sysPass.Theme = function (Common) { const $this = $(this); $this.parent().find("a").addClass("filterOn"); - Common.appActions().account.sort($this); + sysPassApp.actions.account.sort($this); }).on("click", "#search-rows i.icon-favorite", function () { const $this = $(this); - Common.appActions().account.saveFavorite($this, function () { + sysPassApp.actions.account.saveFavorite($this, function () { checkFavorite($this); }); }).on("click", "#search-rows span.tag", function () { diff --git a/app/modules/web/themes/material-blue/js/app-theme.min.js b/app/modules/web/themes/material-blue/js/app-theme.min.js index 1cc061f4..71dd92c1 100644 --- a/app/modules/web/themes/material-blue/js/app-theme.min.js +++ b/app/modules/web/themes/material-blue/js/app-theme.min.js @@ -1,20 +1,21 @@ -var $jscomp={scope:{},findInternal:function(a,e,b){a instanceof String&&(a=String(a));for(var f=a.length,g=0;g\n \n \n \n \n
    \n \n \n
    \n ';mdlDialog().show({title:a.config().LANG[29],text:c,negative:{title:a.config().LANG[44]},positive:{title:a.config().LANG[43],onClick:function(d){d.preventDefault();a.passwordData.complexity.chars=$("#checkbox-chars").is(":checked");a.passwordData.complexity.numbers=$("#checkbox-numbers").is(":checked"); -a.passwordData.complexity.uppercase=$("#checkbox-uppercase").is(":checked");a.passwordData.complexity.symbols=$("#checkbox-symbols").is(":checked");a.passwordData.complexity.numlength=parseInt($("#passlength").val())}},cancelable:!0,contentStyle:{"max-width":"300px"},onLoaded:function(){$("#checkbox-chars").prop("checked",a.passwordData.complexity.chars);$("#checkbox-numbers").prop("checked",a.passwordData.complexity.numbers);$("#checkbox-uppercase").prop("checked",a.passwordData.complexity.uppercase); -$("#checkbox-symbols").prop("checked",a.passwordData.complexity.symbols);$("#passlength").val(a.passwordData.complexity.numlength)}})},l=function(c){c.find(".passwordfield__input").each(function(){var d=$(this);if("true"!==d.attr("data-pass-upgraded")){var c=a.uniqueId(),b=d.parent(),h=d.closest("form"),c=d.attr("id")+"-"+c,k=h.find("#"+d.attr("id")+"_repeat");k.attr("id",c+"_repeat");d.attr("id",c);d.attr("data-pass",d.val());h='\n
      \n
    • settings'+a.config().LANG[28]+'
    • \n
    • vpn_key'+a.config().LANG[29]+'
    • \n
    • refresh'+a.config().LANG[30]+ -"
    ";b.after('
    ');b.next(".password-actions").prepend("remove_red_eye').prepend(h);d.on("keyup",function(){a.checkPassLevel(d);this.dataset.pass=d.val()});b=d.parent().next();b.find(".passGen").on("click",function(){f(d);d.blur()});b.find(".passComplexity").on("click",function(){g()}); -b.find(".showpass").on("mouseover",function(){""!==this.dataset.levelMsg?$(this).attr("title",this.dataset.levelMsg+"\n\n"+d[0].dataset.pass):$(this).attr("title",d[0].dataset.pass)});b.find(".reset").on("click",function(){d.val("");d[0].dataset.pass="";0remove_red_eye');if(1===d.data("clipboard")){var b=$('content_paste');d.parent().after(b).after(c)}else d.parent().after(c);c.on("mouseover",function(){c.attr("title",d.val())})})},p=function(c){e.info("setupDatePicker");var d={format:"YYYY-MM-DD",lang:a.config().LOCALE.substr(0,2),time:!1,cancelText:a.config().LANG[44],okText:a.config().LANG[43],clearText:a.config().LANG[30], -nowText:a.config().LANG[56],minDate:new Date,triggerEvent:"dateIconClick"};c.find(".password-datefield__input").each(function(){var c=$(this),b=c.parent();c.bootstrapMaterialDatePicker(d);var h=b.find("input[name="+c.data("dst-unix")+"]");h.val(moment.tz(c.val(),a.config().TIMEZONE).format("X"));b.next("i").on("click",function(){c.trigger("dateIconClick")});c.on("change",function(){h.val(moment.tz(c.val(),a.config().TIMEZONE).format("X"))})})};return{passwordDetect:l,password:f,viewsTriggers:{main:function(){var a= -document.querySelector(".mdl-layout");$(".mdl-layout__drawer").find("a").click(function(){a.MaterialLayout.toggleDrawer()})},search:function(){var c=$("#frmSearch"),d=$("#res-content");c.find("button.btn-clear").on("click",function(a){$(".icon-searchfav").find("i").removeClass("mdl-color-text--amber-A200")});c.find(".icon-searchfav").on("click",function(){var b=$(this).find("i"),d=c.find("input[name='searchfav']");0==d.val()?(b.addClass("mdl-color-text--amber-A200"),b.attr("title",a.config().LANG[53]), -d.val(1)):(b.removeClass("mdl-color-text--amber-A200"),b.attr("title",a.config().LANG[52]),d.val(0));c.submit()});var b=c.find("#tags")[0],e=c.find(".search-filters-tags"),h=c.find("i.show-filter");d.on("click","#data-search-header .sort-down,#data-search-header .sort-up",function(){var c=$(this);c.parent().find("a").addClass("filterOn");a.appActions().account.sort(c)}).on("click","#search-rows i.icon-favorite",function(){var c=$(this);a.appActions().account.saveFavorite(c,function(){"on"===c.data("status")? -(c.addClass("mdl-color-text--amber-A100"),c.attr("title",a.config().LANG[50]),c.html("star")):(c.removeClass("mdl-color-text--amber-A100"),c.attr("title",a.config().LANG[49]),c.html("star_border"))})}).on("click","#search-rows span.tag",function(){e.is(":hidden")&&h.trigger("click");b.selectize.addItem($(this).data("tag-id"),!1)});h.on("click",function(){var a=$(this);e.is(":hidden")?(e.slideDown("slow"),a.html(a.data("icon-up"))):(e.slideUp("slow"),a.html(a.data("icon-down")))});-1!==b.selectedIndex&& -h.trigger("click")},common:function(a){l(a);p(a)}},loading:b,ajax:{complete:function(){e.info("ajax:complete");componentHandler.upgradeDom()}},html:{getList:function(a,b){var c=$('
      '),d=$('
    • '),e=$(''),f=''+(void 0===b||""===b?"description":b)+"";a.forEach(function(a){var b=e.clone();b.append(f);b.append(a);a=d.clone().append(b); -c.append(a)});return c},tabs:{add:function(a,b,e,f){a=$(a);var c;1===f&&(a.parent().find("#tabs-"+b).addClass("is-active"),c="is-active");a.append(''+e+"")}}}}}; +var $jscomp={scope:{},findInternal:function(a,d,e){a instanceof String&&(a=String(a));for(var g=a.length,f=0;f\n \n \n \n \n
      \n \n \n
      \n ';mdlDialog().show({title:sysPassApp.config.LANG[29],text:a,negative:{title:sysPassApp.config.LANG[44]},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){b.preventDefault();sysPassApp.util.password.config.complexity.chars=$("#checkbox-chars").is(":checked");sysPassApp.util.password.config.complexity.numbers= +$("#checkbox-numbers").is(":checked");sysPassApp.util.password.config.complexity.uppercase=$("#checkbox-uppercase").is(":checked");sysPassApp.util.password.config.complexity.symbols=$("#checkbox-symbols").is(":checked");sysPassApp.util.password.config.complexity.numlength=parseInt($("#passlength").val())}},cancelable:!0,contentStyle:{"max-width":"300px"},onLoaded:function(){$("#checkbox-chars").prop("checked",sysPassApp.util.password.config.complexity.chars);$("#checkbox-numbers").prop("checked", +sysPassApp.util.password.config.complexity.numbers);$("#checkbox-uppercase").prop("checked",sysPassApp.util.password.config.complexity.uppercase);$("#checkbox-symbols").prop("checked",sysPassApp.util.password.config.complexity.symbols);$("#passlength").val(sysPassApp.util.password.config.complexity.numlength)}})},f=function(a){a.find(".passwordfield__input").each(function(){var b=$(this);if("true"!==b.attr("data-pass-upgraded")){var a=sysPassApp.util.uniqueId(),c=b.parent(),h=b.closest("form"),a= +b.attr("id")+"-"+a,k=h.find("#"+b.attr("id")+"_repeat");k.attr("id",a+"_repeat");b.attr("id",a);b.attr("data-pass",b.val());h='\n
        \n
      • settings'+sysPassApp.config.LANG[28]+ +'
      • \n
      • vpn_key'+sysPassApp.config.LANG[29]+'
      • \n
      • refresh'+sysPassApp.config.LANG[30]+"
      ";c.after('
      ');c.next(".password-actions").prepend("remove_red_eye').prepend(h);b.on("keyup",function(){sysPassApp.util.password.checkLevel(b);this.dataset.pass=b.val()});c=b.parent().next();c.find(".passGen").on("click",function(){e(b);b.blur()});c.find(".passComplexity").on("click",function(){g()});c.find(".showpass").on("mouseover",function(){""!==this.dataset.levelMsg?$(this).attr("title",this.dataset.levelMsg+"\n\n"+b[0].dataset.pass):$(this).attr("title",b[0].dataset.pass)});c.find(".reset").on("click",function(){b.val(""); +b[0].dataset.pass="";0remove_red_eye');if(1===a.data("clipboard")){var d=$('content_paste');a.parent().after(d).after(c)}else a.parent().after(c); +c.on("mouseover",function(){c.attr("title",a.val())})})},l=function(c){a.info("setupDatePicker");var b={format:"YYYY-MM-DD",lang:sysPassApp.config.BROWSER.LOCALE.substr(0,2),time:!1,cancelText:sysPassApp.config.LANG[44],okText:sysPassApp.config.LANG[43],clearText:sysPassApp.config.LANG[30],nowText:sysPassApp.config.LANG[56],minDate:new Date,triggerEvent:"dateIconClick"};c.find(".password-datefield__input").each(function(){var a=$(this),c=a.parent();a.bootstrapMaterialDatePicker(b);var d=c.find("input[name="+ +a.data("dst-unix")+"]");d.val(moment.tz(a.val(),sysPassApp.config.BROWSER.TIMEZONE).format("X"));c.next("i").on("click",function(){a.trigger("dateIconClick")});a.on("change",function(){d.val(moment.tz(a.val(),sysPassApp.config.BROWSER.TIMEZONE).format("X"))})})};return{passwordDetect:f,password:e,viewsTriggers:{main:function(){var a=document.querySelector(".mdl-layout");$(".mdl-layout__drawer").find("a").click(function(){a.MaterialLayout.toggleDrawer()})},search:function(){var a=$("#frmSearch"),b= +$("#res-content");a.find("button.btn-clear").on("click",function(a){$(".icon-searchfav").find("i").removeClass("mdl-color-text--amber-A200")});a.find(".icon-searchfav").on("click",function(){var b=$(this).find("i"),c=a.find("input[name='searchfav']");0==c.val()?(b.addClass("mdl-color-text--amber-A200"),b.attr("title",sysPassApp.config.LANG[53]),c.val(1)):(b.removeClass("mdl-color-text--amber-A200"),b.attr("title",sysPassApp.config.LANG[52]),c.val(0));a.submit()});var d=a.find("#tags")[0],e=a.find(".search-filters-tags"), +h=a.find("i.show-filter");b.on("click","#data-search-header .sort-down,#data-search-header .sort-up",function(){var a=$(this);a.parent().find("a").addClass("filterOn");sysPassApp.actions.account.sort(a)}).on("click","#search-rows i.icon-favorite",function(){var a=$(this);sysPassApp.actions.account.saveFavorite(a,function(){"on"===a.data("status")?(a.addClass("mdl-color-text--amber-A100"),a.attr("title",sysPassApp.config.LANG[50]),a.html("star")):(a.removeClass("mdl-color-text--amber-A100"),a.attr("title", +sysPassApp.config.LANG[49]),a.html("star_border"))})}).on("click","#search-rows span.tag",function(){e.is(":hidden")&&h.trigger("click");d.selectize.addItem($(this).data("tag-id"),!1)});h.on("click",function(){var a=$(this);e.is(":hidden")?(e.slideDown("slow"),a.html(a.data("icon-up"))):(e.slideUp("slow"),a.html(a.data("icon-down")))});-1!==d.selectedIndex&&h.trigger("click")},common:function(a){f(a);l(a)}},loading:d,ajax:{complete:function(){a.info("ajax:complete");componentHandler.upgradeDom()}}, +html:{getList:function(a,b){var c=$('
        '),d=$('
      • '),e=$(''),f=''+(void 0===b||""===b?"description":b)+"";a.forEach(function(a){var b=e.clone();b.append(f);b.append(a);a=d.clone().append(b);c.append(a)});return c},tabs:{add:function(a,b,d,e){a=$(a);var c;1===e&&(a.parent().find("#tabs-"+b).addClass("is-active"),c="is-active");a.append(''+d+"")}}}}}; diff --git a/app/modules/web/themes/material-blue/views/account/account-permissions.inc b/app/modules/web/themes/material-blue/views/account/account-permissions.inc index 6f0d037f..8c972a6e 100644 --- a/app/modules/web/themes/material-blue/views/account/account-permissions.inc +++ b/app/modules/web/themes/material-blue/views/account/account-permissions.inc @@ -16,34 +16,56 @@ @@ -54,34 +76,56 @@ @@ -92,7 +136,7 @@ - > @@ -109,7 +153,7 @@ - > @@ -131,7 +175,7 @@ @@ -147,7 +191,7 @@ diff --git a/app/modules/web/themes/material-blue/views/account/account.inc b/app/modules/web/themes/material-blue/views/account/account.inc index a77cd5ca..10c5c5ec 100644 --- a/app/modules/web/themes/material-blue/views/account/account.inc +++ b/app/modules/web/themes/material-blue/views/account/account.inc @@ -8,7 +8,7 @@ $showLinked = $gotData && count($linkedAccounts) > 0; $showFiles = $gotData && $configData->isFilesEnabled() && $accountAcl->isShowFiles(); $showDetails = $gotData && $accountAcl->isShowDetails(); -$showPermissions = !$isView && ($accountAcl->isShowPermission() || $allowPrivate || $allowPrivateGroup); +$showPermissions = $accountAcl->isShowPermission() || $allowPrivate || $allowPrivateGroup; $showCustomFields = count($customFields) > 0; ?> diff --git a/app/modules/web/themes/material-blue/views/account/details.inc b/app/modules/web/themes/material-blue/views/account/details.inc index e92b24bf..b522d26c 100644 --- a/app/modules/web/themes/material-blue/views/account/details.inc +++ b/app/modules/web/themes/material-blue/views/account/details.inc @@ -50,52 +50,6 @@ - 0): ?> - - - -
        - - isSkip() && $otherUser->isSelected()) { - $users[] = $otherUser->getName(); - } - } - - $usersEdit = $accountData->getOtherUserEdit() ? '(+)' : ''; - echo $usersEdit . ' ' . implode(' | ', $users); - ?> - - - - - 0): ?> - - - -
        - - isSkip() && $otherUserGroup->isSelected()) { - $userGroups[] = $otherUserGroup->getName(); - } - } - - $userGroupsEdit = $accountData->getOtherUserGroupEdit() ? '(+)' : ''; - echo $userGroupsEdit . ' ' . implode(' | ', $userGroups); - ?> - - - - isModified()): ?> diff --git a/app/modules/web/themes/material-blue/views/common/datatabs.inc b/app/modules/web/themes/material-blue/views/common/datatabs.inc index b90fef5f..ce0ad643 100644 --- a/app/modules/web/themes/material-blue/views/common/datatabs.inc +++ b/app/modules/web/themes/material-blue/views/common/datatabs.inc @@ -20,7 +20,7 @@
        diff --git a/app/modules/web/themes/material-blue/views/common/tabs-end.inc b/app/modules/web/themes/material-blue/views/common/tabs-end.inc index 3d737ae4..9aa8500e 100644 --- a/app/modules/web/themes/material-blue/views/common/tabs-end.inc +++ b/app/modules/web/themes/material-blue/views/common/tabs-end.inc @@ -4,6 +4,6 @@ sysPassApp.sk.set(""); $tab): ?> - sysPassApp.theme().html.tabs.add("#tabsHeader", , "", ); + sysPassApp.theme.html.tabs.add("#tabsHeader", , "", ); \ No newline at end of file diff --git a/app/modules/web/themes/material-blue/views/grid/datatabs-grid.inc b/app/modules/web/themes/material-blue/views/grid/datatabs-grid.inc index 19b352fb..f79ba702 100644 --- a/app/modules/web/themes/material-blue/views/grid/datatabs-grid.inc +++ b/app/modules/web/themes/material-blue/views/grid/datatabs-grid.inc @@ -21,7 +21,7 @@ diff --git a/lib/SP/Core/Crypt/CryptPKI.php b/lib/SP/Core/Crypt/CryptPKI.php index 8fb28f06..b60537c1 100644 --- a/lib/SP/Core/Crypt/CryptPKI.php +++ b/lib/SP/Core/Crypt/CryptPKI.php @@ -27,8 +27,9 @@ namespace SP\Core\Crypt; defined('APP_ROOT') || die(); use phpseclib\Crypt\RSA; -use SP\Core\Exceptions\FileNotFoundException; use SP\Core\Exceptions\SPException; +use SP\Storage\File\FileException; +use SP\Storage\File\FileHandler; /** * Class CryptPKI para el manejo de las funciones para PKI @@ -37,10 +38,22 @@ use SP\Core\Exceptions\SPException; */ final class CryptPKI { + const KEY_SIZE = 1024; + const PUBLIC_KEY_FILE = CONFIG_PATH . DIRECTORY_SEPARATOR . 'pubkey.pem'; + const PRIVATE_KEY_FILE = CONFIG_PATH . DIRECTORY_SEPARATOR . 'key.pem'; + /** * @var RSA */ protected $rsa; + /** + * @var FileHandler + */ + private $publicKeyFile; + /** + * @var FileHandler + */ + private $privateKeyFile; /** * @param RSA $rsa @@ -51,58 +64,51 @@ final class CryptPKI { $this->rsa = $rsa; - if (!$this->checkKeys()) { - $this->createKeys(); - } + $this->setUp(); } /** * Check if private and public keys exist * - * @return bool + * @return void + * @throws SPException */ - public function checkKeys() + private function setUp() { - return file_exists($this->getPublicKeyFile()) && file_exists($this->getPrivateKeyFile()); - } + $this->publicKeyFile = new FileHandler(self::PUBLIC_KEY_FILE); + $this->privateKeyFile = new FileHandler(self::PRIVATE_KEY_FILE); - /** - * Devuelve la ruta al archivo de la clave pública - * - * @return string - */ - public function getPublicKeyFile() - { - return CONFIG_PATH . DIRECTORY_SEPARATOR . 'pubkey.pem'; - } + try { + $this->publicKeyFile->checkFileExists(); + $this->privateKeyFile->checkFileExists(); + } catch (FileException $e) { + processException($e); - /** - * Devuelve la ruta al archivo de la clave privada - * - * @return string - */ - public function getPrivateKeyFile() - { - return CONFIG_PATH . DIRECTORY_SEPARATOR . 'key.pem'; + $this->createKeys(); + } } /** * Crea el par de claves pública y privada * - * @throws SPException + * @throws FileException */ public function createKeys() { - $keys = $this->rsa->createKey(1024); + $keys = $this->rsa->createKey(self::KEY_SIZE); - $priv = file_put_contents($this->getPrivateKeyFile(), $keys['privatekey']); - $pub = file_put_contents($this->getPublicKeyFile(), $keys['publickey']); + $this->publicKeyFile->save($keys['publickey']); + $this->privateKeyFile->save($keys['privatekey']); - if (!$priv || !$pub) { - throw new SPException(__u('No es posible generar las claves RSA'), SPException::CRITICAL); - } + chmod(CryptPKI::PRIVATE_KEY_FILE, 0600); + } - chmod($this->getPrivateKeyFile(), 0600); + /** + * @return int + */ + public static function getMaxDataSize() + { + return (self::KEY_SIZE / 8) - 11; } /** @@ -111,12 +117,12 @@ final class CryptPKI * @param string $data los datos a encriptar * * @return string - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException */ public function encryptRSA($data) { $this->rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1); - $this->rsa->loadKey($this->getPublicKey()); + $this->rsa->loadKey($this->getPublicKey(), RSA::PUBLIC_FORMAT_PKCS1); return $this->rsa->encrypt($data); } @@ -125,17 +131,13 @@ final class CryptPKI * Devuelve la clave pública desde el archivo * * @return string - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException */ public function getPublicKey() { - $file = $this->getPublicKeyFile(); - - if (!file_exists($file)) { - throw new FileNotFoundException(__u('El archivo de clave no existe')); - } - - return file_get_contents($file); + return $this->publicKeyFile + ->checkFileExists() + ->readToString(); } /** @@ -144,12 +146,12 @@ final class CryptPKI * @param string $data los datos a desencriptar * * @return string - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException */ public function decryptRSA($data) { $this->rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1); - $this->rsa->loadKey($this->getPrivateKey()); + $this->rsa->loadKey($this->getPrivateKey(), RSA::PRIVATE_FORMAT_PKCS1); return @$this->rsa->decrypt($data); } @@ -158,16 +160,24 @@ final class CryptPKI * Devuelve la clave privada desde el archivo * * @return string - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException */ public function getPrivateKey() { - $file = $this->getPrivateKeyFile(); + return $this->privateKeyFile + ->checkFileExists() + ->readToString(); + } - if (!file_exists($file)) { - throw new FileNotFoundException(__u('El archivo de clave no existe')); - } + /** + * @return int + * @throws FileException + */ + public function getKeySize() + { + $this->rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1); + $this->rsa->loadKey($this->getPrivateKey(), RSA::PRIVATE_FORMAT_PKCS1); - return file_get_contents($file); + return $this->rsa->getSize(); } } \ No newline at end of file diff --git a/lib/SP/Services/Install/Installer.php b/lib/SP/Services/Install/Installer.php index 9d747178..feec64aa 100644 --- a/lib/SP/Services/Install/Installer.php +++ b/lib/SP/Services/Install/Installer.php @@ -57,7 +57,7 @@ final class Installer extends Service */ const VERSION = [3, 0, 0]; const VERSION_TEXT = '3.0-beta'; - const BUILD = 18090903; + const BUILD = 18091801; /** * @var DatabaseSetupInterface diff --git a/lib/SP/Util/Util.php b/lib/SP/Util/Util.php index 72263541..b3e71584 100644 --- a/lib/SP/Util/Util.php +++ b/lib/SP/Util/Util.php @@ -289,7 +289,7 @@ final class Util */ public static function logout() { - exit(''); + exit(''); } /** diff --git a/public/js/app-actions.js b/public/js/app-actions.js index fc352fbd..640a43cd 100644 --- a/public/js/app-actions.js +++ b/public/js/app-actions.js @@ -21,11 +21,9 @@ * along with sysPass. If not, see . */ -sysPass.Actions = function (Common) { +sysPass.Actions = function (log) { "use strict"; - const log = Common.log; - // Variable para almacenar la llamada a setTimeout() let timeout = 0; @@ -48,19 +46,19 @@ sysPass.Actions = function (Common) { isAjax: 1 }; - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.type = "html"; opts.addHistory = true; opts.data = data; - Common.appRequests().getActionCall(opts, function (response) { + sysPassApp.requests.getActionCall(opts, function (response) { const $content = $("#content"); $content.empty().html(response); - const views = Common.triggers().views; + const views = sysPassApp.triggers.views; views.common($content); if (view !== undefined && typeof views[view] === "function") { @@ -81,19 +79,19 @@ sysPass.Actions = function (Common) { data.isAjax = 1; - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.type = "html"; opts.addHistory = true; opts.data = data; - Common.appRequests().getActionCall(opts, function (response) { + sysPassApp.requests.getActionCall(opts, function (response) { const $content = $("#content"); $content.empty().html(response); - const views = Common.triggers().views; + const views = sysPassApp.triggers.views; views.common($content); if (view !== undefined && typeof views[view] === "function") { @@ -128,13 +126,13 @@ sysPass.Actions = function (Common) { open: function () { const $boxPopup = $("#box-popup"); - Common.appTriggers().views.common($boxPopup); - - $boxPopup.find(":input:text:visible:first").focus(); + sysPassApp.triggers.views.common($boxPopup); if (callback !== undefined && typeof callback.open === "function") { callback.open(); } + + $boxPopup.find("form input:visible:first").focus(); }, close: function () { if (callback !== undefined && typeof callback.close === "function") { @@ -176,7 +174,7 @@ sysPass.Actions = function (Common) { }); setTimeout(function () { - const image = Common.resizeImage($image); + const image = sysPassApp.util.resizeImage($image); $content.css({ backgroundColor: "#fff", @@ -205,45 +203,45 @@ sysPass.Actions = function (Common) { view: function ($obj) { log.info("account:show"); - getContent(Common.appRequests().getRouteForQuery($obj.data("action-route"), $obj.data("item-id")), "account"); + getContent(sysPassApp.requests.getRouteForQuery($obj.data("action-route"), $obj.data("item-id")), "account"); }, viewHistory: function ($obj) { log.info("account:showHistory"); - getContent(Common.appRequests().getRouteForQuery($obj.data("action-route"), $obj.val()), "account"); + getContent(sysPassApp.requests.getRouteForQuery($obj.data("action-route"), $obj.val()), "account"); }, edit: function ($obj) { log.info("account:edit"); - getContent(Common.appRequests().getRouteForQuery($obj.data("action-route"), $obj.data("item-id")), "account"); + getContent(sysPassApp.requests.getRouteForQuery($obj.data("action-route"), $obj.data("item-id")), "account"); }, delete: function ($obj) { log.info("account:delete"); - const atext = "

        " + Common.config().LANG[3] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[3] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.data = { r: "account/saveDelete/" + $obj.data("item-id"), - sk: Common.sk.get() + sk: sysPassApp.sk.get() }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); account.search($obj); }); @@ -258,18 +256,18 @@ sysPass.Actions = function (Common) { const parentId = $obj.data("parent-id") || 0; const id = parentId === 0 ? $obj.data("item-id") : parentId; - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + id + "/" + parentId, - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status !== 0) { - Common.msg.out(json); + sysPassApp.msg.out(json); } else { const $container = $(json.data.html); @@ -304,17 +302,17 @@ sysPass.Actions = function (Common) { const parentId = $obj.data("parent-id"); const id = parentId === 0 ? $obj.data("item-id") : parentId; - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.async = false; opts.data = { r: $obj.data("action-route") + "/" + id, - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - return Common.appRequests().getActionCall(opts); + return sysPassApp.requests.getActionCall(opts); }, copyPassHistory: function ($obj) { log.info("account:copyPassHistory"); @@ -324,7 +322,7 @@ sysPass.Actions = function (Common) { copy: function ($obj) { log.info("account:copy"); - getContent(Common.appRequests().getRouteForQuery($obj.data("action-route"), $obj.data("item-id")), "account"); + getContent(sysPassApp.requests.getRouteForQuery($obj.data("action-route"), $obj.data("item-id")), "account"); }, saveFavorite: function ($obj, callback) { log.info("account:saveFavorite"); @@ -332,16 +330,16 @@ sysPass.Actions = function (Common) { const isOn = $obj.data("status") === "on"; const actionRoute = isOn ? $obj.data("action-route-off") : $obj.data("action-route-on"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.data = { r: actionRoute + "/" + $obj.data("item-id"), - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { $obj.data("status", isOn ? "off" : "on"); @@ -355,12 +353,12 @@ sysPass.Actions = function (Common) { request: function ($obj) { log.info("account:request"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route") + "/" + $obj.data("item-id"); opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0 && json.data['nextAction'] !== undefined) { getContent({r: json.data.nextAction['nextAction']}, "account"); @@ -391,37 +389,37 @@ sysPass.Actions = function (Common) { const parentId = $obj.data("parent-id"); const itemId = parentId === undefined ? $obj.data("item-id") : parentId; - getContent(Common.appRequests().getRouteForQuery($obj.data("action-route"), itemId), "account"); + getContent(sysPassApp.requests.getRouteForQuery($obj.data("action-route"), itemId), "account"); }, saveEditRestore: function ($obj) { log.info("account:restore"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route") + "/" + $obj.data("history-id") + "/" + $obj.data("item-id"); opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.data.itemId !== undefined && json.data.nextAction !== undefined) { - getContent(Common.appRequests().getRouteForQuery(json.data.nextAction, json.data.itemId), "account"); + getContent(sysPassApp.requests.getRouteForQuery(json.data.nextAction, json.data.itemId), "account"); } }); }, listFiles: function ($obj) { log.info("account:getfiles"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.method = "get"; opts.type = "html"; opts.url = ajaxUrl.entrypoint; opts.data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), del: $obj.data("delete"), - sk: Common.sk.get() + sk: sysPassApp.sk.get() }; - Common.appRequests().getActionCall(opts, function (response) { + sysPassApp.requests.getActionCall(opts, function (response) { $obj.html(response); }); }, @@ -429,7 +427,7 @@ sysPass.Actions = function (Common) { log.info("account:search"); const $frmSearch = $("#frmSearch"); - $frmSearch.find("input[name='sk']").val(Common.sk.get()); + $frmSearch.find("input[name='sk']").val(sysPassApp.sk.get()); order.key = $frmSearch.find("input[name='skey']").val(); order.dir = $frmSearch.find("input[name='sorder']").val(); @@ -438,17 +436,17 @@ sysPass.Actions = function (Common) { $frmSearch.find("input[name='start']").val(0); } - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $frmSearch.data("action-route"); opts.method = "get"; opts.data = $frmSearch.serialize(); - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status === 10) { - Common.msg.out(json); + sysPassApp.msg.out(json); } - Common.sk.set(json.data.sk); + sysPassApp.sk.set(json.data.sk); $("#res-content").empty().html(json.data.html); }); @@ -456,7 +454,7 @@ sysPass.Actions = function (Common) { save: function ($obj) { log.info("account:save"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route") + "/" + $obj.data("item-id"); opts.data = $obj.serialize(); @@ -465,11 +463,11 @@ sysPass.Actions = function (Common) { opts.data += "&" + value.getAttribute("id") + "_update=1"; }); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.data.itemId !== undefined && json.data.nextAction !== undefined) { - getContent(Common.appRequests().getRouteForQuery(json.data.nextAction, json.data.itemId), "account"); + getContent(sysPassApp.requests.getRouteForQuery(json.data.nextAction, json.data.itemId), "account"); } }); } @@ -487,7 +485,7 @@ sysPass.Actions = function (Common) { const $dst = $obj[0].selectize; $dst.clearOptions(); $dst.load(function (callback) { - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { @@ -495,12 +493,12 @@ sysPass.Actions = function (Common) { sk: $obj.data("sk") }; - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { callback(json.data); $dst.setValue($obj.data("selected-id"), true); - Common.appTriggers().updateFormHash(); + sysPassApp.triggers.updateFormHash(); }); }); }, @@ -510,15 +508,15 @@ sysPass.Actions = function (Common) { const $dst = $("#" + $obj.data("item-dst"))[0].selectize; $dst.clearOptions(); $dst.load(function (callback) { - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("item-route"), - sk: Common.sk.get() + sk: sysPassApp.sk.get() }; - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { callback(json); }); }); @@ -542,17 +540,17 @@ sysPass.Actions = function (Common) { password: function ($obj) { log.info("user:password"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.type = "html"; opts.method = "get"; opts.url = ajaxUrl.entrypoint; opts.data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (response) { + sysPassApp.requests.getActionCall(opts, function (response) { if (response.length === 0) { main.logout(); } else { @@ -563,16 +561,16 @@ sysPass.Actions = function (Common) { passreset: function ($obj) { log.info("user:passreset"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "/?r=" + $obj.data("action-route"); opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { setTimeout(function () { - Common.redirect("index.php"); + sysPassApp.redirect("index.php"); }, 2000); } }); @@ -586,28 +584,28 @@ sysPass.Actions = function (Common) { */ const main = { logout: function () { - Common.redirect("index.php?r=login/logout"); + sysPassApp.util.redirect("index.php?r=login/logout"); }, login: function ($obj) { log.info("main:login"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("route"); opts.method = "get"; opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { const $extra = $(".extra-hidden"); switch (json.status) { case 0: - Common.redirect(json.data.url); + sysPassApp.util.redirect(json.data.url); break; case 2: - Common.msg.out(json); + sysPassApp.msg.out(json); $obj.find("input[type='text'],input[type='password']").val(""); - $obj.find("input:first").focus(); + $obj.find("input:visible:first").focus(); if ($extra.length > 0) { $extra.hide(); @@ -617,10 +615,10 @@ sysPass.Actions = function (Common) { $("#smpass").show(); break; case 5: - Common.msg.out(json); + sysPassApp.msg.out(json); $obj.find("input[type='text'],input[type='password']").val(""); - $obj.find("input:first").focus(); + $obj.find("input:visible:first").focus(); if ($extra.length > 0) { $extra.hide(); @@ -630,26 +628,26 @@ sysPass.Actions = function (Common) { $("#soldpass").show(); break; default: - Common.msg.out(json); + sysPassApp.msg.out(json); $obj.find("input[type='text'],input[type='password']").val(""); - $obj.find("input:first").focus(); + $obj.find("input:visible:first").focus(); } }); }, install: function ($obj) { log.info("main:install"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("route"); opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { setTimeout(function () { - Common.redirect("index.php?r=login/index"); + sysPassApp.redirect("index.php?r=login/index"); }, 1000); } }); @@ -657,20 +655,20 @@ sysPass.Actions = function (Common) { upgrade: function ($obj) { log.info("main:upgrade"); - const atext = "

        " + Common.config().LANG[59] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[59] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { let taskRunner; const taskId = $obj.find("input[name='taskId']").val(); @@ -679,14 +677,14 @@ sysPass.Actions = function (Common) { taskRunner = task(taskId); } - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data('action-route'); opts.method = "get"; opts.useFullLoading = !!taskId; opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status !== 0) { $obj.find(":input[name=key]").val(""); @@ -696,7 +694,7 @@ sysPass.Actions = function (Common) { } setTimeout(function () { - Common.redirect("index.php"); + sysPassApp.redirect("index.php"); }, 5000); } }); @@ -707,7 +705,7 @@ sysPass.Actions = function (Common) { getUpdates: function () { log.info("main:getUpdates"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=status/checkRelease"; opts.method = "get"; opts.timeout = 10000; @@ -716,7 +714,7 @@ sysPass.Actions = function (Common) { const $updates = $("#updates"); - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status === 0) { if (json.data.length > 0) { $updates.html( @@ -726,12 +724,12 @@ sysPass.Actions = function (Common) { } else { $updates.html( '
        check_circle
        ' + - '' + Common.config().LANG[68] + ''); + '' + sysPassApp.config.LANG[68] + ''); } } else { $updates.html( '
        warning
        ' + - '' + Common.config().LANG[69] + ''); + '' + sysPassApp.config.LANG[69] + ''); } if (componentHandler !== undefined) { @@ -740,13 +738,13 @@ sysPass.Actions = function (Common) { }, function () { $updates.html( '
        warning
        ' + - '' + Common.config().LANG[69] + ''); + '' + sysPassApp.config.LANG[69] + ''); }); }, getNotices: function () { log.info("main:getNotices"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=status/checkNotices"; opts.method = "get"; opts.timeout = 10000; @@ -755,7 +753,7 @@ sysPass.Actions = function (Common) { const $notices = $("#notices"); - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status === 0) { if (json.data.length > 0) { $notices.html( @@ -763,7 +761,7 @@ sysPass.Actions = function (Common) { '
        feedback
        ' + '' + - '
        ' + Common.config().LANG[70] + '
        ' + + '
        ' + sysPassApp.config.LANG[70] + '
        ' + json.data.map(x => x.title).join('
        ') + '
        '); } @@ -786,14 +784,14 @@ sysPass.Actions = function (Common) { log.info("checks:wiki"); const $form = $($obj.data("src")); - $form.find("[name='sk']").val(Common.sk.get()); + $form.find("[name='sk']").val(sysPassApp.sk.get()); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.data = $form.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { $("#dokuWikiResCheck").html(json.data); @@ -807,29 +805,29 @@ sysPass.Actions = function (Common) { * * @type {{save: config.save, backup: config.backup, export: config.export, import: config.import}} */ - const config = { + const configManager = { save: function ($obj) { log.info("config:save"); tabs.save($obj); }, masterpass: function ($obj) { - const atext = "

        " + Common.config().LANG[59] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[59] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); $obj.find(":input[type=password]").val(""); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { let taskRunner; const taskId = $obj.find("input[name='taskId']").val(); @@ -838,13 +836,13 @@ sysPass.Actions = function (Common) { taskRunner = task(taskId); } - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.useFullLoading = !!taskId; opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); $obj.find(":input[type=password]").val(""); @@ -861,13 +859,13 @@ sysPass.Actions = function (Common) { tabs.state.update($obj); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); opts.useFullLoading = true; - opts.data = $obj.serialize() + "&sk=" + Common.sk.get(); + opts.data = $obj.serialize() + "&sk=" + sysPassApp.sk.get(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { getContent({ @@ -885,38 +883,38 @@ sysPass.Actions = function (Common) { import: function ($obj) { log.info("config:import"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); - opts.data = $obj.serialize() + "&sk=" + Common.sk.get(); + opts.data = $obj.serialize() + "&sk=" + sysPassApp.sk.get(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); }); }, refreshMpass: function ($obj) { log.info("config:import"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); opts.data = { sk: $obj.data("sk"), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); }); }, mailCheck: function ($obj) { log.info("config:mailCheck"); const $form = $($obj.data("src")); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + '?r=' + $obj.data("action-route"); - opts.data = $form.serialize() + "&sk=" + Common.sk.get(); + opts.data = $form.serialize() + "&sk=" + sysPassApp.sk.get(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); }); } }; @@ -928,17 +926,17 @@ sysPass.Actions = function (Common) { view: function ($obj) { log.info("file:view"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), - sk: Common.sk.get() + sk: sysPassApp.sk.get() }; - Common.appRequests().getActionCall(opts, function (response) { + sysPassApp.requests.getActionCall(opts, function (response) { if (response.status !== 0) { - return Common.msg.out(response); + return sysPassApp.msg.out(response); } showImageBox($obj, response.data.html); @@ -949,7 +947,7 @@ sysPass.Actions = function (Common) { const data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), - sk: Common.sk.get() + sk: sysPassApp.sk.get() }; $.fileDownload(ajaxUrl.entrypoint, {"httpMethod": "GET", "data": data}); @@ -957,31 +955,31 @@ sysPass.Actions = function (Common) { delete: function ($obj) { log.info("file:delete"); - const atext = "

        " + Common.config().LANG[15] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[15] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), - sk: Common.sk.get() + sk: sysPassApp.sk.get() }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { account.listFiles($("#list-account-files")); @@ -1003,7 +1001,7 @@ sysPass.Actions = function (Common) { const request = function (notify) { const itemId = $obj.data("item-id"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); if (itemId) { opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route") + "/" + itemId + "/" + notify; @@ -1012,8 +1010,8 @@ sysPass.Actions = function (Common) { opts.data = $obj.serialize(); } - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { getContent({r: $obj.data("action-next") + "/" + itemId}); @@ -1021,12 +1019,12 @@ sysPass.Actions = function (Common) { }); }; - const atext = "

        " + Common.config().LANG[48] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[48] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); @@ -1034,7 +1032,7 @@ sysPass.Actions = function (Common) { } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { e.preventDefault(); @@ -1050,17 +1048,17 @@ sysPass.Actions = function (Common) { const itemId = $obj.data("item-id"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + itemId, - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { const actionNext = $obj.data("action-next"); @@ -1081,7 +1079,7 @@ sysPass.Actions = function (Common) { }; /** - * Common tabs actions + * sysPassApp tabs actions * * @type {{state: {tab: {index: number, refresh: boolean, route: string}, itemId: number, update: update}, save: save}} */ @@ -1109,13 +1107,13 @@ sysPass.Actions = function (Common) { tabs.state.update($obj); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); opts.method = $obj.data("action-method") || "post"; - opts.data = $obj.serialize() + "&sk=" + Common.sk.get(); + opts.data = $obj.serialize() + "&sk=" + sysPassApp.sk.get(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { if (typeof onSuccess === "function") { @@ -1126,7 +1124,7 @@ sysPass.Actions = function (Common) { log.info('reload'); setTimeout(function () { - Common.redirect("index.php"); + sysPassApp.redirect("index.php"); }, 2000); } else if (tabs.state.tab.refresh === true) { log.info("refresh"); @@ -1150,18 +1148,18 @@ sysPass.Actions = function (Common) { tabs.state.update($obj); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status !== 0) { - Common.msg.out(json); + sysPassApp.msg.out(json); } else { const $itemDst = $obj.data("item-dst"); @@ -1190,18 +1188,18 @@ sysPass.Actions = function (Common) { console.info(itemId); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + (itemId > 0 ? "/" + itemId : ''), items: items, - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); getContent({ r: tabs.state.tab.route, @@ -1246,36 +1244,36 @@ sysPass.Actions = function (Common) { grid.nav($obj); }, clear: function ($obj) { - const atext = "

        " + Common.config().LANG[20] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[20] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { e.preventDefault(); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); opts.method = "get"; - opts.data = {sk: Common.sk.get(), isAjax: 1}; + opts.data = {sk: sysPassApp.sk.get(), isAjax: 1}; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { getContent({r: $obj.data("action-next")}); } - Common.sk.set(json.csrf); + sysPassApp.sk.set(json.csrf); }); } } @@ -1292,19 +1290,19 @@ sysPass.Actions = function (Common) { show: function ($obj) { log.info("wiki:show"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { pageName: $obj.data("pagename"), actionId: $obj.data("action-id"), - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status !== 0) { - Common.msg.out(json); + sysPassApp.msg.out(json); } else { showFloatingBox(json.data.html); } @@ -1322,27 +1320,27 @@ sysPass.Actions = function (Common) { tabs.save($obj, function () { // Recargar para cargar/descargar el plugin setTimeout(function () { - Common.redirect("index.php"); + sysPassApp.redirect("index.php"); }, 2000); }); }, reset: function ($obj) { log.info("plugin:reset"); - const atext = "

        " + Common.config().LANG[58] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[58] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { e.preventDefault(); @@ -1364,12 +1362,12 @@ sysPass.Actions = function (Common) { save: function ($obj) { log.info("plugin:save"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("route"); opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { getContent({r: $obj.data("action-next")}); @@ -1392,23 +1390,23 @@ sysPass.Actions = function (Common) { check: function ($obj) { log.info("notification:check"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + $obj.data("item-id"), - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { getContent({r: $obj.data("action-next")}); } - Common.sk.set(json.csrf); + sysPassApp.sk.set(json.csrf); }); }, search: function ($obj) { @@ -1424,12 +1422,12 @@ sysPass.Actions = function (Common) { save: function ($obj) { log.info("notification:save"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("route"); opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { getContent({r: $obj.data("action-next")}); @@ -1444,18 +1442,18 @@ sysPass.Actions = function (Common) { grid.delete($obj, function (items) { const itemId = $obj.data("item-id"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + (itemId ? "/" + itemId : ''), items: items, - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); getContent({r: $obj.data("action-next")}); }); @@ -1464,16 +1462,16 @@ sysPass.Actions = function (Common) { getActive: function () { log.info("notification:getActive"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: "items/notifications", - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { return json; }); }, @@ -1485,7 +1483,7 @@ sysPass.Actions = function (Common) { }; /** - * Common grids actions + * sysPassApp grids actions * * @type {{search: search, nav: nav, delete: delete}} */ @@ -1494,19 +1492,19 @@ sysPass.Actions = function (Common) { log.info("grid:search"); const $target = $($obj.data("target")); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); opts.method = "get"; opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { + sysPassApp.requests.getActionCall(opts, function (json) { if (json.status === 0) { $target.html(json.data.html); } else { - $target.html(Common.msg.html.error(json.description)); + $target.html(sysPassApp.msg.html.error(json.description)); } - Common.sk.set(json.csrf); + sysPassApp.sk.set(json.csrf); }); }, nav: function ($obj, callback) { @@ -1516,7 +1514,7 @@ sysPass.Actions = function (Common) { $form.find("[name='start']").val($obj.data("start")); $form.find("[name='count']").val($obj.data("count")); - $form.find("[name='sk']").val(Common.sk.get()); + $form.find("[name='sk']").val(sysPassApp.sk.get()); if (typeof callback === "function") { callback($form); @@ -1525,7 +1523,7 @@ sysPass.Actions = function (Common) { } }, delete: function ($obj, onAccept) { - const atext = "

        " + Common.config().LANG[12] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[12] + "

        "; const selection = $obj.data("selection"); const items = []; @@ -1542,15 +1540,15 @@ sysPass.Actions = function (Common) { mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { e.preventDefault(); @@ -1568,12 +1566,12 @@ sysPass.Actions = function (Common) { log.info("ldap:check"); const $form = $($obj.data("src")); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + '?r=' + $obj.data("action-route"); - opts.data = $form.serialize() + "&sk=" + Common.sk.get(); + opts.data = $form.serialize() + "&sk=" + sysPassApp.sk.get(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0 && json.data['template'] !== undefined @@ -1584,7 +1582,7 @@ sysPass.Actions = function (Common) { const $list = $("#ldap-results").find(".list-wrap").empty(); json.data.items.forEach(function (value) { - $list.append(Common.appTheme().html.getList(value.items, value.icon)); + $list.append(sysPassApp.theme.html.getList(value.items, value.icon)); }); } }); @@ -1594,28 +1592,28 @@ sysPass.Actions = function (Common) { import: function ($obj) { log.info("ldap:import"); - const atext = "

        " + Common.config().LANG[57] + "

        "; + const atext = "

        " + sysPassApp.config.LANG[57] + "

        "; mdlDialog().show({ text: atext, negative: { - title: Common.config().LANG[44], + title: sysPassApp.config.LANG[44], onClick: function (e) { e.preventDefault(); - Common.msg.error(Common.config().LANG[44]); + sysPassApp.msg.error(sysPassApp.config.LANG[44]); } }, positive: { - title: Common.config().LANG[43], + title: sysPassApp.config.LANG[43], onClick: function (e) { const $form = $($obj.data("src")); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint + "?r=" + $obj.data("action-route"); - opts.data = $form.serialize() + "&sk=" + Common.sk.get(); + opts.data = $form.serialize() + "&sk=" + sysPassApp.sk.get(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); }); } } @@ -1631,17 +1629,17 @@ sysPass.Actions = function (Common) { const itemId = $obj.data("item-id"); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.url = ajaxUrl.entrypoint; opts.method = "get"; opts.data = { r: $obj.data("action-route") + "/" + itemId, - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), isAjax: 1 }; - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + sysPassApp.requests.getActionCall(opts, function (json) { + sysPassApp.msg.out(json); if (json.status === 0) { const actionNext = $obj.data("action-next"); @@ -1664,15 +1662,15 @@ sysPass.Actions = function (Common) { const task = function (taskId) { const $taskStatus = $("#taskStatus"); - $taskStatus.empty().html(Common.config().LANG[62]); + $taskStatus.empty().html(sysPassApp.config.LANG[62]); - const opts = Common.appRequests().getRequestOpts(); + const opts = sysPassApp.requests.getRequestOpts(); opts.method = "get"; opts.url = ajaxUrl.entrypoint + "?r=task/runTask/" + taskId; - return Common.appRequests().getActionEvent(opts, function (result) { + return sysPassApp.requests.getActionEvent(opts, function (result) { let text = result.task + " - " + result.message + " - " + result.time + " - " + result.progress + "%"; - text += "
        " + Common.config().LANG[62]; + text += "
        " + sysPassApp.config.LANG[62]; $taskStatus.empty().html(text); }); @@ -1680,12 +1678,15 @@ sysPass.Actions = function (Common) { return { doAction: doAction, + getContent: getContent, + showFloatingBox: showFloatingBox, + closeFloatingBox: closeFloatingBox, appMgmt: appMgmt, account: account, accountManager: accountManager, file: file, checks: checks, - config: config, + config: configManager, main: main, user: user, link: link, diff --git a/public/js/app-actions.min.js b/public/js/app-actions.min.js index e8c48b21..19ac24eb 100644 --- a/public/js/app-actions.min.js +++ b/public/js/app-actions.min.js @@ -1,49 +1,52 @@ -var $jscomp={scope:{},findInternal:function(b,e,l){b instanceof String&&(b=String(b));for(var f=b.length,g=0;g'+c+""),h=d.find("img");if(0===h.length)return n(c);h.hide();$.magnificPopup.open({items:{src:d,type:"inline"},callbacks:{open:function(){var a= -this;h.on("click",function(){a.close()});setTimeout(function(){var a=b.resizeImage(h);d.css({backgroundColor:"#fff",width:a.width,height:"auto"});h.show("slow")},500)}}})},p={view:function(a){e.info("account:show");g(b.appRequests().getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},viewHistory:function(a){e.info("account:showHistory");g(b.appRequests().getRouteForQuery(a.data("action-route"),a.val()),"account")},edit:function(a){e.info("account:edit");g(b.appRequests().getRouteForQuery(a.data("action-route"), -a.data("item-id")),"account")},"delete":function(a){e.info("account:delete");var c='

        '+b.config().LANG[3]+"

        ";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(d){d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.data={r:"account/saveDelete/"+a.data("item-id"),sk:b.sk.get()};b.appRequests().getActionCall(d,function(d){b.msg.out(d); -p.search(a)})}}})},viewPass:function(a){e.info("account:viewPass");var c=a.data("parent-id")||0,d=0===c?a.data("item-id"):c,h=b.appRequests().getRequestOpts();h.url=f.entrypoint;h.method="get";h.data={r:a.data("action-route")+"/"+d+"/"+c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(h,function(a){0!==a.status?b.msg.out(a):(a=$(a.data.html),n(a),l=setTimeout(function(){$.magnificPopup.close()},3E4),a.on("mouseleave",function(){clearTimeout(l);l=setTimeout(function(){$.magnificPopup.close()}, -3E4)}).on("mouseenter",function(){0!==l&&clearTimeout(l)}))})},viewPassHistory:function(a){e.info("account:viewPassHistory");p.viewPass(a)},copyPass:function(a){e.info("account:copyPass");var c=a.data("parent-id"),c=0===c?a.data("item-id"):c,d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.async=!1;d.data={r:a.data("action-route")+"/"+c,sk:b.sk.get(),isAjax:1};return b.appRequests().getActionCall(d)},copyPassHistory:function(a){e.info("account:copyPassHistory");p.copyPassHistory(a)}, -copy:function(a){e.info("account:copy");g(b.appRequests().getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},saveFavorite:function(a,c){e.info("account:saveFavorite");var d="on"===a.data("status"),h=d?a.data("action-route-off"):a.data("action-route-on"),q=b.appRequests().getRequestOpts();q.url=f.entrypoint;q.data={r:h+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(q,function(h){b.msg.out(h);0===h.status&&(a.data("status",d?"off":"on"),"function"=== -typeof c&&c())})},request:function(a){e.info("account:request");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&void 0!==a.data.nextAction&&g({r:a.data.nextAction.nextAction},"account")})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){e.info("account:sort");var b=$("#frmSearch");b.find('input[name="skey"]').val(a.data("key")); -b.find('input[name="sorder"]').val(a.data("dir"));b.find('input[name="start"]').val(a.data("start"));p.search()},editPass:function(a){e.info("account:editpass");var c=a.data("parent-id"),c=void 0===c?a.data("item-id"):c;g(b.appRequests().getRouteForQuery(a.data("action-route"),c),"account")},saveEditRestore:function(a){e.info("account:restore");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("history-id")+"/"+a.data("item-id");c.data=a.serialize(); -b.appRequests().getActionCall(c,function(a){b.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&g(b.appRequests().getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})},listFiles:function(a){e.info("account:getfiles");var c=b.appRequests().getRequestOpts();c.method="get";c.type="html";c.url=f.entrypoint;c.data={r:a.data("action-route")+"/"+a.data("item-id"),del:a.data("delete"),sk:b.sk.get()};b.appRequests().getActionCall(c,function(b){a.html(b)})},search:function(a){e.info("account:search"); -var c=$("#frmSearch");c.find("input[name='sk']").val(b.sk.get());c.find("input[name='skey']").val();c.find("input[name='sorder']").val();void 0!==a&&c.find("input[name='start']").val(0);a=b.appRequests().getRequestOpts();a.url=f.entrypoint+"?r="+c.data("action-route");a.method="get";a.data=c.serialize();b.appRequests().getActionCall(a,function(a){10===a.status&&b.msg.out(a);b.sk.set(a.data.sk);$("#res-content").empty().html(a.data.html)})},save:function(a){e.info("account:save");var c=b.appRequests().getRequestOpts(); -c.url=f.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");c.data=a.serialize();$("select.select-box-tags[data-hash][data-updated=true]").each(function(a,b){c.data+="&"+b.getAttribute("id")+"_update=1"});b.appRequests().getActionCall(c,function(a){b.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&g(b.appRequests().getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})}},t={get:function(a){e.info("items:get");var c=a[0].selectize;c.clearOptions();c.load(function(d){var h= -b.appRequests().getRequestOpts();h.url=f.entrypoint;h.method="get";h.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:a.data("sk")};b.appRequests().getActionCall(h,function(h){d(h.data);c.setValue(a.data("selected-id"),!0);b.appTriggers().updateFormHash()})})},update:function(a){e.info("items:update");var c=$("#"+a.data("item-dst"))[0].selectize;c.clearOptions();c.load(function(c){var d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.data={r:a.data("item-route"),sk:b.sk.get()}; -b.appRequests().getActionCall(d,function(a){c(a)})})}},v={logout:function(){b.redirect("index.php?r=login/logout")},login:function(a){e.info("main:login");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("route");c.method="get";c.data=a.serialize();b.appRequests().getActionCall(c,function(c){var d=$(".extra-hidden");switch(c.status){case 0:b.redirect(c.data.url);break;case 2:b.msg.out(c);a.find("input[type='text'],input[type='password']").val("");a.find("input:first").focus(); -0";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){var d;(c= -a.find("input[name='taskId']").val())&&(d=u(c));var e=b.appRequests().getRequestOpts();e.url=f.entrypoint+"?r="+a.data("action-route");e.method="get";e.useFullLoading=!!c;e.data=a.serialize();b.appRequests().getActionCall(e,function(c){b.msg.out(c);0!==c.status?a.find(":input[name=key]").val(""):(void 0!==d&&d.close(),setTimeout(function(){b.redirect("index.php")},5E3))})}}})},getUpdates:function(){e.info("main:getUpdates");var a=b.appRequests().getRequestOpts();a.url=f.entrypoint+"?r=status/checkRelease"; -a.method="get";a.timeout=1E4;a.useLoading=!1;a.data={isAjax:1};var c=$("#updates");b.appRequests().getActionCall(a,function(a){0===a.status?0'+a.data.title+'
        cloud_download
        '+a.data.description+""):c.html('
        check_circle
        '+ -b.config().LANG[68]+""):c.html('
        warning
        '+b.config().LANG[69]+"");void 0!==componentHandler&&componentHandler.upgradeDom()},function(){c.html('
        warning
        '+b.config().LANG[69]+ -"")})},getNotices:function(){e.info("main:getNotices");var a=b.appRequests().getRequestOpts();a.url=f.entrypoint+"?r=status/checkNotices";a.method="get";a.timeout=1E4;a.useLoading=!1;a.data={isAjax:1};var c=$("#notices");b.appRequests().getActionCall(a,function(a){0===a.status&&0
        feedback
        '+b.config().LANG[70]+"
        "+a.data.map(function(a){return a.title}).join("
        ")+"
        ");void 0!==componentHandler&&componentHandler.upgradeDom()})}},k={state:{tab:{index:0,refresh:!0,route:""},itemId:0,update:function(a){var b=$("#content").find("[id^='tabs-'].is-active");0",h=a.data("selection"),e=[];if(h&&($(h).find(".is-selected").each(function(){e.push($(this).data("item-id"))}),0===e.length))return;mdlDialog().show({text:d,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(a){a.preventDefault(); -"function"===typeof c&&c(e)}}})}},u=function(a){var c=$("#taskStatus");c.empty().html(b.config().LANG[62]);var d=b.appRequests().getRequestOpts();d.method="get";d.url=f.entrypoint+"?r=task/runTask/"+a;return b.appRequests().getActionEvent(d,function(a){a=a.task+" - "+a.message+" - "+a.time+" - "+a.progress+"%";a+="
        "+b.config().LANG[62];c.empty().html(a)})};return{doAction:function(a,c){var d={r:a.r+(void 0!==a.itemId?"/"+a.itemId:""),isAjax:1},e=b.appRequests().getRequestOpts();e.url=f.entrypoint; -e.method="get";e.type="html";e.addHistory=!0;e.data=d;b.appRequests().getActionCall(e,function(a){var d=$("#content");d.empty().html(a);a=b.triggers().views;a.common(d);if(void 0!==c&&"function"===typeof a[c])a[c]();d=$(".mdl-layout__content");0";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get"; -c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get()};b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&p.listFiles($("#list-account-files"))})}}})}},checks:{wiki:function(a){e.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(b.sk.get());var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){e.info("config:save"); -k.save(a)},masterpass:function(a){var c='

        '+b.config().LANG[59]+"

        ";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(c){c.preventDefault();b.msg.error(b.config().LANG[44]);a.find(":input[type=password]").val("")}},positive:{title:b.config().LANG[43],onClick:function(c){var d;(c=a.find("input[name='taskId']").val())&&(d=u(c));var e=b.appRequests().getRequestOpts();e.url=f.entrypoint;e.useFullLoading=!!c;e.data=a.serialize();b.appRequests().getActionCall(e, -function(c){b.msg.out(c);a.find(":input[type=password]").val("");void 0!==d&&d.close()})}}})},backup:function(a){e.info("config:backup");k.state.update(a);var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.useFullLoading=!0;c.data=a.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&g({r:k.state.tab.route,tabIndex:k.state.tab.index})})},"export":function(a){e.info("config:export");k.save(a)},"import":function(a){e.info("config:import"); -var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.data=a.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(c,function(a){b.msg.out(a)})},refreshMpass:function(a){e.info("config:import");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.data={sk:a.data("sk"),isAjax:1};b.appRequests().getActionCall(c,function(a){b.msg.out(a)})},mailCheck:function(a){e.info("config:mailCheck");var c=$(a.data("src")),d=b.appRequests().getRequestOpts(); -d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a)})}},main:v,user:{showSettings:function(a){e.info("user:showSettings");g({r:a.data("action-route")},"userSettings")},saveSettings:function(a){e.info("user:saveSettings");k.save(a)},password:function(a){e.info("user:password");var c=b.appRequests().getRequestOpts();c.type="html";c.method="get";c.url=f.entrypoint;c.data={r:a.data("action-route")+"/"+a.data("item-id"), -sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(a){0===a.length?v.logout():n(a)})},passreset:function(a){e.info("user:passreset");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"/?r="+a.data("action-route");c.data=a.serialize();b.appRequests().getActionCall(c,function(a){b.msg.out(a);0===a.status&&setTimeout(function(){b.redirect("index.php")},2E3)})}},link:{save:function(a){e.info("link:save");var c=function(c){var d=a.data("item-id"),e=b.appRequests().getRequestOpts(); -d?e.url=f.entrypoint+"?r="+a.data("action-route")+"/"+d+"/"+c:(e.url=f.entrypoint+"?r="+a.data("action-route"),e.data=a.serialize());b.appRequests().getActionCall(e,function(c){b.msg.out(c);0===c.status&&g({r:a.data("action-next")+"/"+d})})},d='

        '+b.config().LANG[48]+"

        ";mdlDialog().show({text:d,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();c(0)}},positive:{title:b.config().LANG[43],onClick:function(a){a.preventDefault();c(1)}}})}, -refresh:function(a){e.info("link:refresh");k.state.update(a);var c=a.data("item-id"),d=b.appRequests().getRequestOpts();d.url=f.entrypoint;d.method="get";d.data={r:a.data("action-route")+"/"+c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(d,function(d){b.msg.out(d);0===d.status&&((d=a.data("action-next"))?g({r:d+"/"+c}):g({r:k.state.tab.route,tabIndex:k.state.tab.index}))})}},eventlog:{search:function(a){e.info("eventlog:search");m.search(a)},nav:function(a){e.info("eventlog:nav");m.nav(a)}, -clear:function(a){var c='

        '+b.config().LANG[20]+"

        ";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c.preventDefault();c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("action-route");c.method="get";c.data={sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&& -g({r:a.data("action-next")});b.sk.set(c.csrf)})}}})}},ajaxUrl:f,plugin:{toggle:function(a){e.info("plugin:enable");k.save(a,function(){setTimeout(function(){b.redirect("index.php")},2E3)})},reset:function(a){e.info("plugin:reset");var c='

        '+b.config().LANG[58]+"

        ";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(b){b.preventDefault(); -k.save(a)}}})},search:function(a){e.info("plugin:search");m.search(a)},show:function(a){e.info("plugin:show");r.show(a)},save:function(a){e.info("plugin:save");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("route");c.data=a.serialize();b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&(g({r:a.data("action-next")}),$.magnificPopup.close())})},nav:function(a){e.info("plugin:nav");m.nav(a)}},notification:{check:function(a){e.info("notification:check");var c= -b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&g({r:a.data("action-next")});b.sk.set(c.csrf)})},search:function(a){e.info("notification:search");m.search(a)},show:function(a){e.info("notification:show");r.show(a)},save:function(a){e.info("notification:save");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint+"?r="+a.data("route"); -c.data=a.serialize();b.appRequests().getActionCall(c,function(c){b.msg.out(c);0===c.status&&(g({r:a.data("action-next")}),$.magnificPopup.close())})},"delete":function(a){e.info("notification:delete");m["delete"](a,function(c){var d=a.data("item-id"),e=b.appRequests().getRequestOpts();e.url=f.entrypoint;e.method="get";e.data={r:a.data("action-route")+(d?"/"+d:""),items:c,sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(e,function(c){b.msg.out(c);g({r:a.data("action-next")})})})},getActive:function(){e.info("notification:getActive"); -var a=b.appRequests().getRequestOpts();a.url=f.entrypoint;a.method="get";a.data={r:"items/notifications",sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(a,function(a){return a})},nav:function(a){e.info("eventlog:nav");m.nav(a)}},wiki:{show:function(a){e.info("wiki:show");var c=b.appRequests().getRequestOpts();c.url=f.entrypoint;c.method="get";c.data={pageName:a.data("pagename"),actionId:a.data("action-id"),sk:b.sk.get(),isAjax:1};b.appRequests().getActionCall(c,function(a){0!==a.status?b.msg.out(a): -n(a.data.html)})}},items:t,ldap:{check:function(a){e.info("ldap:check");var c=$(a.data("src")),d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a);0===a.status&&void 0!==a.data.template&&void 0!==a.data.items&&n(a.data.template,{open:function(){var c=$("#ldap-results").find(".list-wrap").empty();a.data.items.forEach(function(a){c.append(b.appTheme().html.getList(a.items,a.icon))})}})})}, -"import":function(a){e.info("ldap:import");var c='

        '+b.config().LANG[57]+"

        ";mdlDialog().show({text:c,negative:{title:b.config().LANG[44],onClick:function(a){a.preventDefault();b.msg.error(b.config().LANG[44])}},positive:{title:b.config().LANG[43],onClick:function(c){c=$(a.data("src"));var d=b.appRequests().getRequestOpts();d.url=f.entrypoint+"?r="+a.data("action-route");d.data=c.serialize()+"&sk="+b.sk.get();b.appRequests().getActionCall(d,function(a){b.msg.out(a)})}}})}}}}; +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(d,l,e){d instanceof String&&(d=String(d));for(var f=d.length,k=0;k'+b+""),h=c.find("img");if(0===h.length)return k(b);h.hide();$.magnificPopup.open({items:{src:c,type:"inline"}, +callbacks:{open:function(){var a=this;h.on("click",function(){a.close()});setTimeout(function(){var a=sysPassApp.util.resizeImage(h);c.css({backgroundColor:"#fff",width:a.width,height:"auto"});h.show("slow")},500)}}})},q=function(){$.magnificPopup.close()},n={view:function(a){d.info("account:show");f(sysPassApp.requests.getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},viewHistory:function(a){d.info("account:showHistory");f(sysPassApp.requests.getRouteForQuery(a.data("action-route"), +a.val()),"account")},edit:function(a){d.info("account:edit");f(sysPassApp.requests.getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},delete:function(a){d.info("account:delete");var b='

        '+sysPassApp.config.LANG[3]+"

        ";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(c){c= +sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.data={r:"account/saveDelete/"+a.data("item-id"),sk:sysPassApp.sk.get()};sysPassApp.requests.getActionCall(c,function(c){sysPassApp.msg.out(c);n.search(a)})}}})},viewPass:function(a){d.info("account:viewPass");var b=a.data("parent-id")||0,c=0===b?a.data("item-id"):b,h=sysPassApp.requests.getRequestOpts();h.url=e.entrypoint;h.method="get";h.data={r:a.data("action-route")+"/"+c+"/"+b,sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(h, +function(a){0!==a.status?sysPassApp.msg.out(a):(a=$(a.data.html),k(a),l=setTimeout(function(){q()},3E4),a.on("mouseleave",function(){clearTimeout(l);l=setTimeout(function(){q()},3E4)}).on("mouseenter",function(){0!==l&&clearTimeout(l)}))})},viewPassHistory:function(a){d.info("account:viewPassHistory");n.viewPass(a)},copyPass:function(a){d.info("account:copyPass");var b=a.data("parent-id");b=0===b?a.data("item-id"):b;var c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.method="get";c.async= +!1;c.data={r:a.data("action-route")+"/"+b,sk:sysPassApp.sk.get(),isAjax:1};return sysPassApp.requests.getActionCall(c)},copyPassHistory:function(a){d.info("account:copyPassHistory");n.copyPassHistory(a)},copy:function(a){d.info("account:copy");f(sysPassApp.requests.getRouteForQuery(a.data("action-route"),a.data("item-id")),"account")},saveFavorite:function(a,b){d.info("account:saveFavorite");var c="on"===a.data("status"),h=c?a.data("action-route-off"):a.data("action-route-on"),r=sysPassApp.requests.getRequestOpts(); +r.url=e.entrypoint;r.data={r:h+"/"+a.data("item-id"),sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(r,function(h){sysPassApp.msg.out(h);0===h.status&&(a.data("status",c?"off":"on"),"function"===typeof b&&b())})},request:function(a){d.info("account:request");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");b.data=a.serialize();sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a);0===a.status&&void 0!== +a.data.nextAction&&f({r:a.data.nextAction.nextAction},"account")})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){d.info("account:sort");var b=$("#frmSearch");b.find('input[name="skey"]').val(a.data("key"));b.find('input[name="sorder"]').val(a.data("dir"));b.find('input[name="start"]').val(a.data("start"));n.search()},editPass:function(a){d.info("account:editpass");var b=a.data("parent-id");b=void 0===b?a.data("item-id"):b;f(sysPassApp.requests.getRouteForQuery(a.data("action-route"), +b),"account")},saveEditRestore:function(a){d.info("account:restore");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("action-route")+"/"+a.data("history-id")+"/"+a.data("item-id");b.data=a.serialize();sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&f(sysPassApp.requests.getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})},listFiles:function(a){d.info("account:getfiles");var b=sysPassApp.requests.getRequestOpts(); +b.method="get";b.type="html";b.url=e.entrypoint;b.data={r:a.data("action-route")+"/"+a.data("item-id"),del:a.data("delete"),sk:sysPassApp.sk.get()};sysPassApp.requests.getActionCall(b,function(c){a.html(c)})},search:function(a){d.info("account:search");var b=$("#frmSearch");b.find("input[name='sk']").val(sysPassApp.sk.get());b.find("input[name='skey']").val();b.find("input[name='sorder']").val();void 0!==a&&b.find("input[name='start']").val(0);a=sysPassApp.requests.getRequestOpts();a.url=e.entrypoint+ +"?r="+b.data("action-route");a.method="get";a.data=b.serialize();sysPassApp.requests.getActionCall(a,function(a){10===a.status&&sysPassApp.msg.out(a);sysPassApp.sk.set(a.data.sk);$("#res-content").empty().html(a.data.html)})},save:function(a){d.info("account:save");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("action-route")+"/"+a.data("item-id");b.data=a.serialize();$("select.select-box-tags[data-hash][data-updated=true]").each(function(a,h){b.data+="&"+h.getAttribute("id")+ +"_update=1"});sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a);void 0!==a.data.itemId&&void 0!==a.data.nextAction&&f(sysPassApp.requests.getRouteForQuery(a.data.nextAction,a.data.itemId),"account")})}},u={get:function(a){d.info("items:get");var b=a[0].selectize;b.clearOptions();b.load(function(c){var h=sysPassApp.requests.getRequestOpts();h.url=e.entrypoint;h.method="get";h.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:a.data("sk")};sysPassApp.requests.getActionCall(h, +function(h){c(h.data);b.setValue(a.data("selected-id"),!0);sysPassApp.triggers.updateFormHash()})})},update:function(a){d.info("items:update");var b=$("#"+a.data("item-dst"))[0].selectize;b.clearOptions();b.load(function(b){var c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.method="get";c.data={r:a.data("item-route"),sk:sysPassApp.sk.get()};sysPassApp.requests.getActionCall(c,function(a){b(a)})})}},w={logout:function(){sysPassApp.util.redirect("index.php?r=login/logout")},login:function(a){d.info("main:login"); +var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("route");b.method="get";b.data=a.serialize();sysPassApp.requests.getActionCall(b,function(b){var c=$(".extra-hidden");switch(b.status){case 0:sysPassApp.util.redirect(b.data.url);break;case 2:sysPassApp.msg.out(b);a.find("input[type='text'],input[type='password']").val("");a.find("input:visible:first").focus();0";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){var c;(b=a.find("input[name='taskId']").val())&& +(c=v(b));var d=sysPassApp.requests.getRequestOpts();d.url=e.entrypoint+"?r="+a.data("action-route");d.method="get";d.useFullLoading=!!b;d.data=a.serialize();sysPassApp.requests.getActionCall(d,function(b){sysPassApp.msg.out(b);0!==b.status?a.find(":input[name=key]").val(""):(void 0!==c&&c.close(),setTimeout(function(){sysPassApp.redirect("index.php")},5E3))})}}})},getUpdates:function(){d.info("main:getUpdates");var a=sysPassApp.requests.getRequestOpts();a.url=e.entrypoint+"?r=status/checkRelease"; +a.method="get";a.timeout=1E4;a.useLoading=!1;a.data={isAjax:1};var b=$("#updates");sysPassApp.requests.getActionCall(a,function(a){0===a.status?0'+a.data.title+'
        cloud_download
        '+a.data.description+""):b.html('
        check_circle
        '+ +sysPassApp.config.LANG[68]+""):b.html('
        warning
        '+sysPassApp.config.LANG[69]+"");void 0!==componentHandler&&componentHandler.upgradeDom()},function(){b.html('
        warning
        '+ +sysPassApp.config.LANG[69]+"")})},getNotices:function(){d.info("main:getNotices");var a=sysPassApp.requests.getRequestOpts();a.url=e.entrypoint+"?r=status/checkNotices";a.method="get";a.timeout=1E4;a.useLoading=!1;a.data={isAjax:1};var b=$("#notices");sysPassApp.requests.getActionCall(a,function(a){0===a.status&&0
        feedback
        '+sysPassApp.config.LANG[70]+"
        "+a.data.map(function(a){return a.title}).join("
        ")+"
        ");void 0!==componentHandler&&componentHandler.upgradeDom()})}},g={state:{tab:{index:0,refresh:!0,route:""},itemId:0,update:function(a){var b=$("#content").find("[id^='tabs-'].is-active");0";a=a.data("selection");var d=[];if(a&&($(a).find(".is-selected").each(function(){d.push($(this).data("item-id"))}),0===d.length))return;mdlDialog().show({text:c,negative:{title:sysPassApp.config.LANG[44], +onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(a){a.preventDefault();"function"===typeof b&&b(d)}}})}},v=function(a){var b=$("#taskStatus");b.empty().html(sysPassApp.config.LANG[62]);var c=sysPassApp.requests.getRequestOpts();c.method="get";c.url=e.entrypoint+"?r=task/runTask/"+a;return sysPassApp.requests.getActionEvent(c,function(a){a=a.task+" - "+a.message+" - "+a.time+" - "+a.progress+"%";a+= +"
        "+sysPassApp.config.LANG[62];b.empty().html(a)})};return{doAction:function(a,b){a={r:a.r+(void 0!==a.itemId?"/"+a.itemId:""),isAjax:1};var c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.method="get";c.type="html";c.addHistory=!0;c.data=a;sysPassApp.requests.getActionCall(c,function(a){var c=$("#content");c.empty().html(a);a=sysPassApp.triggers.views;a.common(c);if(void 0!==b&&"function"===typeof a[b])a[b]();c=$(".mdl-layout__content");0";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint;b.method="get";b.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:sysPassApp.sk.get()};sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a); +0===a.status&&n.listFiles($("#list-account-files"))})}}})}},checks:{wiki:function(a){d.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(sysPassApp.sk.get());var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint;b.data=a.serialize();sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){d.info("config:save");g.save(a)},masterpass:function(a){var b='

        '+ +sysPassApp.config.LANG[59]+"

        ";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(b){b.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44]);a.find(":input[type=password]").val("")}},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){var c;(b=a.find("input[name='taskId']").val())&&(c=v(b));var d=sysPassApp.requests.getRequestOpts();d.url=e.entrypoint;d.useFullLoading=!!b;d.data=a.serialize();sysPassApp.requests.getActionCall(d,function(b){sysPassApp.msg.out(b); +a.find(":input[type=password]").val("");void 0!==c&&c.close()})}}})},backup:function(a){d.info("config:backup");g.state.update(a);var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("action-route");b.useFullLoading=!0;b.data=a.serialize()+"&sk="+sysPassApp.sk.get();sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a);0===a.status&&f({r:g.state.tab.route,tabIndex:g.state.tab.index})})},export:function(a){d.info("config:export");g.save(a)},import:function(a){d.info("config:import"); +var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("action-route");b.data=a.serialize()+"&sk="+sysPassApp.sk.get();sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a)})},refreshMpass:function(a){d.info("config:import");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("action-route");b.data={sk:a.data("sk"),isAjax:1};sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a)})},mailCheck:function(a){d.info("config:mailCheck"); +var b=$(a.data("src")),c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint+"?r="+a.data("action-route");c.data=b.serialize()+"&sk="+sysPassApp.sk.get();sysPassApp.requests.getActionCall(c,function(a){sysPassApp.msg.out(a)})}},main:w,user:{showSettings:function(a){d.info("user:showSettings");f({r:a.data("action-route")},"userSettings")},saveSettings:function(a){d.info("user:saveSettings");g.save(a)},password:function(a){d.info("user:password");var b=sysPassApp.requests.getRequestOpts();b.type= +"html";b.method="get";b.url=e.entrypoint;b.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(b,function(a){0===a.length?w.logout():k(a)})},passreset:function(a){d.info("user:passreset");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"/?r="+a.data("action-route");b.data=a.serialize();sysPassApp.requests.getActionCall(b,function(a){sysPassApp.msg.out(a);0===a.status&&setTimeout(function(){sysPassApp.redirect("index.php")}, +2E3)})}},link:{save:function(a){d.info("link:save");var b=function(b){var c=a.data("item-id"),d=sysPassApp.requests.getRequestOpts();c?d.url=e.entrypoint+"?r="+a.data("action-route")+"/"+c+"/"+b:(d.url=e.entrypoint+"?r="+a.data("action-route"),d.data=a.serialize());sysPassApp.requests.getActionCall(d,function(b){sysPassApp.msg.out(b);0===b.status&&f({r:a.data("action-next")+"/"+c})})},c='

        '+sysPassApp.config.LANG[48]+"

        ";mdlDialog().show({text:c,negative:{title:sysPassApp.config.LANG[44], +onClick:function(a){a.preventDefault();b(0)}},positive:{title:sysPassApp.config.LANG[43],onClick:function(a){a.preventDefault();b(1)}}})},refresh:function(a){d.info("link:refresh");g.state.update(a);var b=a.data("item-id"),c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.method="get";c.data={r:a.data("action-route")+"/"+b,sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(c,function(c){sysPassApp.msg.out(c);0===c.status&&((c=a.data("action-next"))?f({r:c+"/"+b}):f({r:g.state.tab.route, +tabIndex:g.state.tab.index}))})}},eventlog:{search:function(a){d.info("eventlog:search");m.search(a)},nav:function(a){d.info("eventlog:nav");m.nav(a)},clear:function(a){var b='

        '+sysPassApp.config.LANG[20]+"

        ";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){b.preventDefault();b=sysPassApp.requests.getRequestOpts(); +b.url=e.entrypoint+"?r="+a.data("action-route");b.method="get";b.data={sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(b,function(b){sysPassApp.msg.out(b);0===b.status&&f({r:a.data("action-next")});sysPassApp.sk.set(b.csrf)})}}})}},ajaxUrl:e,plugin:{toggle:function(a){d.info("plugin:enable");g.save(a,function(){setTimeout(function(){sysPassApp.redirect("index.php")},2E3)})},reset:function(a){d.info("plugin:reset");var b='

        '+sysPassApp.config.LANG[58]+ +"

        ";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){b.preventDefault();g.save(a)}}})},search:function(a){d.info("plugin:search");m.search(a)},show:function(a){d.info("plugin:show");t.show(a)},save:function(a){d.info("plugin:save");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("route");b.data= +a.serialize();sysPassApp.requests.getActionCall(b,function(b){sysPassApp.msg.out(b);0===b.status&&(f({r:a.data("action-next")}),$.magnificPopup.close())})},nav:function(a){d.info("plugin:nav");m.nav(a)}},notification:{check:function(a){d.info("notification:check");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint;b.method="get";b.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(b,function(b){sysPassApp.msg.out(b);0=== +b.status&&f({r:a.data("action-next")});sysPassApp.sk.set(b.csrf)})},search:function(a){d.info("notification:search");m.search(a)},show:function(a){d.info("notification:show");t.show(a)},save:function(a){d.info("notification:save");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"?r="+a.data("route");b.data=a.serialize();sysPassApp.requests.getActionCall(b,function(b){sysPassApp.msg.out(b);0===b.status&&(f({r:a.data("action-next")}),$.magnificPopup.close())})},delete:function(a){d.info("notification:delete"); +m.delete(a,function(b){var c=a.data("item-id"),d=sysPassApp.requests.getRequestOpts();d.url=e.entrypoint;d.method="get";d.data={r:a.data("action-route")+(c?"/"+c:""),items:b,sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(d,function(b){sysPassApp.msg.out(b);f({r:a.data("action-next")})})})},getActive:function(){d.info("notification:getActive");var a=sysPassApp.requests.getRequestOpts();a.url=e.entrypoint;a.method="get";a.data={r:"items/notifications",sk:sysPassApp.sk.get(),isAjax:1}; +sysPassApp.requests.getActionCall(a,function(a){return a})},nav:function(a){d.info("eventlog:nav");m.nav(a)}},wiki:{show:function(a){d.info("wiki:show");var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint;b.method="get";b.data={pageName:a.data("pagename"),actionId:a.data("action-id"),sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(b,function(a){0!==a.status?sysPassApp.msg.out(a):k(a.data.html)})}},items:u,ldap:{check:function(a){d.info("ldap:check");var b=$(a.data("src")), +c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint+"?r="+a.data("action-route");c.data=b.serialize()+"&sk="+sysPassApp.sk.get();sysPassApp.requests.getActionCall(c,function(a){sysPassApp.msg.out(a);0===a.status&&void 0!==a.data.template&&void 0!==a.data.items&&k(a.data.template,{open:function(){var b=$("#ldap-results").find(".list-wrap").empty();a.data.items.forEach(function(a){b.append(sysPassApp.theme.html.getList(a.items,a.icon))})}})})},import:function(a){d.info("ldap:import");var b='

        '+ +sysPassApp.config.LANG[57]+"

        ";mdlDialog().show({text:b,negative:{title:sysPassApp.config.LANG[44],onClick:function(a){a.preventDefault();sysPassApp.msg.error(sysPassApp.config.LANG[44])}},positive:{title:sysPassApp.config.LANG[43],onClick:function(b){b=$(a.data("src"));var c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint+"?r="+a.data("action-route");c.data=b.serialize()+"&sk="+sysPassApp.sk.get();sysPassApp.requests.getActionCall(c,function(a){sysPassApp.msg.out(a)})}}})}}}}; diff --git a/public/js/app-config.js b/public/js/app-config.js new file mode 100644 index 00000000..b1e66659 --- /dev/null +++ b/public/js/app-config.js @@ -0,0 +1,128 @@ +/* + * sysPass + * + * @author nuxsmin + * @link https://syspass.org + * @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org + * + * This file is part of sysPass. + * + * sysPass is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * sysPass is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with sysPass. If not, see . + */ + +sysPass.Config = function () { + "use strict"; + + let initialized = false; + + const config = { + APP_ROOT: "", + LANG: [], // Language strings + PKI: { + AVAILABLE: false, + KEY: "", // RSA public key + MAX_SIZE: 0, // Max data length + CRYPTO: null // Crypt handler + }, + FILES: { + MAX_SIZE: 1024, // Max uploading file fize + ACCOUNT_ALLOWED_EXTS: [], // Allowed extensions for accounts' file uploading + IMPORT_ALLOWED_EXTS: [] // Allowed extensions for importing + }, + STATUS: { + CHECK_UPDATES: false, // Check for updates + CHECK_NOTICES: false, // Check for notices + CHECK_NOTIFICATIONS: false, // Check for notifications + }, + BROWSER: { + TIMEZONE: "UTC", + LOCALE: "en_US", + COOKIES_ENABLED: false + }, + DEBUG: true, + PLUGINS: [], + AUTH: { + LOGGEDIN: false, + AUTHBASIC_AUTOLOGIN: false + } + }; + + return { + setAppRoot: function (url) { + config.APP_ROOT = url; + }, + setLang: function (lang) { + config.LANG = lang; + }, + setPkiKey: function (key) { + if (key.length > 0) { + config.PKI.KEY = key; + config.PKI.CRYPTO = new JSEncrypt(); + config.PKI.CRYPTO.setPublicKey(key); + config.PKI.AVAILABLE = true; + } + }, + setPkiSize: function (size) { + config.PKI.MAX_SIZE = parseInt(size); + }, + setFileMaxSize: function (size) { + config.FILES.MAX_SIZE = parseInt(size); + }, + setFileAccountAllowedExts: function (extensions) { + config.FILES.ACCOUNT_ALLOWED_EXTS = extensions; + }, + setFileImportAllowedExts: function (extensions) { + config.FILES.IMPORT_ALLOWED_EXTS = extensions; + }, + setCheckUpdates: function (bool) { + config.STATUS.CHECK_UPDATES = bool; + }, + setCheckNotices: function (bool) { + config.STATUS.CHECK_NOTICES = bool; + }, + setCheckNotifications: function (bool) { + config.STATUS.CHECK_NOTIFICATIONS = bool; + }, + setTimezone: function (timezone) { + config.BROWSER.TIMEZONE = timezone; + }, + setLocale: function (locale) { + config.BROWSER.LOCALE = locale; + }, + setCookiesEnabled: function (bool) { + config.BROWSER.COOKIES_ENABLED = bool; + }, + setDebugEnabled: function (bool) { + config.DEBUG = bool; + }, + setPlugins: function (plugins) { + config.PLUGINS = plugins; + }, + setLoggedIn: function (bool) { + config.AUTH.LOGGEDIN = bool; + }, + setAuthBasicAutologinEnabled: function (bool) { + config.AUTH.AUTHBASIC_AUTOLOGIN = bool; + }, + getConfig: function () { + return config; + }, + initialize: function () { + Object.freeze(config); + + initialized = true; + } + }; +}; + diff --git a/public/js/app-config.min.js b/public/js/app-config.min.js new file mode 100644 index 00000000..76b312d9 --- /dev/null +++ b/public/js/app-config.min.js @@ -0,0 +1,3 @@ +sysPass.Config=function(){var b={APP_ROOT:"",LANG:[],PKI:{AVAILABLE:!1,KEY:"",MAX_SIZE:0,CRYPTO:null},FILES:{MAX_SIZE:1024,ACCOUNT_ALLOWED_EXTS:[],IMPORT_ALLOWED_EXTS:[]},STATUS:{CHECK_UPDATES:!1,CHECK_NOTICES:!1,CHECK_NOTIFICATIONS:!1},BROWSER:{TIMEZONE:"UTC",LOCALE:"en_US",COOKIES_ENABLED:!1},DEBUG:!0,PLUGINS:[],AUTH:{LOGGEDIN:!1,AUTHBASIC_AUTOLOGIN:!1}};return{setAppRoot:function(a){b.APP_ROOT=a},setLang:function(a){b.LANG=a},setPkiKey:function(a){0]*>([\S\s]*?)<\/script>/gmi, ""); - str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, ""); - element.innerHTML = str; - str = element.textContent; - element.textContent = ""; - } - - return str; - } - - return decodeHTMLEntities; - })(); - - /** - * Redimensionar una imagen al viewport - * - * @param $obj - */ - const resizeImage = function ($obj) { - log.info("resizeImage"); - - const viewport = { - width: $(window).width() * 0.90, - height: $(window).height() * 0.90 - }; - const image = { - width: $obj.width(), - height: $obj.height() - }; - const dimension = { - calc: 0, - main: 0, - secondary: 0, - factor: 0.90, - rel: image.width / image.height - }; - - /** - * Ajustar la relación de aspecto de la imagen. - * - * Se tiene en cuenta la dimensión máxima en el eje opuesto. - * - * @param dimension - * @returns {*} - */ - const adjustRel = function (dimension) { - if (dimension.main > dimension.secondary) { - dimension.calc = dimension.main / dimension.rel; - } else if (dimension.main < dimension.secondary) { - dimension.calc = dimension.main * dimension.rel; - } - - if (dimension.calc > dimension.secondary) { - dimension.main *= dimension.factor; - - adjustRel(dimension); - } - - return dimension; - }; - - /** - * Redimensionar en relación a la anchura - */ - const resizeWidth = function () { - dimension.main = viewport.width; - dimension.secondary = viewport.height; - - const adjust = adjustRel(dimension); - - $obj.css({ - "width": adjust.main, - "height": adjust.calc - }); - - image.width = adjust.main; - image.height = adjust.calc; - }; - - /** - * Redimensionar en relación a la altura - */ - const resizeHeight = function () { - dimension.main = viewport.height; - dimension.secondary = viewport.width; - - const adjust = adjustRel(dimension); - - $obj.css({ - "width": adjust.calc, - "height": adjust.main - }); - - image.width = adjust.calc; - image.height = adjust.main; - }; - - if (image.width > viewport.width) { - resizeWidth(); - } else if (image.height > viewport.height) { - log.info("height"); - resizeHeight(); - } - - return image; + return plugins; }; /** @@ -206,13 +90,26 @@ sysPass.Main = function () { return; } - encryptFormValue($this); + try { + encryptFormValue($this); + } catch (e) { + log.error(e); + + msg.error(e); + } }).on("keypress", ":input[type=password]", function (e) { if (e.keyCode === 13) { e.preventDefault(); const $this = $(this); - encryptFormValue($this); + + try { + encryptFormValue($this); + } catch (e) { + log.error(e); + + msg.error(e); + } $this.closest("form").submit(); } @@ -226,12 +123,12 @@ sysPass.Main = function () { log.info("initializeClipboard"); if (!clipboard.isSupported()) { - log.warn(config.LANG[65]); + log.warn(oPublic.config.LANG[65]); return; } $("body").on("click", ".clip-pass-button", function () { - const json = appActions.account.copyPass($(this)).done(function (json) { + const json = sysPassApp.actions.account.copyPass($(this)).done(function (json) { if (json.status !== 0) { msg.out(json); @@ -246,10 +143,10 @@ sysPass.Main = function () { .copy(json.responseJSON.data.accpass) .then( function () { - msg.ok(config.LANG[45]); + msg.ok(oPublic.config.LANG[45]); }, function (err) { - msg.error(config.LANG[46]); + msg.error(oPublic.config.LANG[46]); } ); } @@ -264,29 +161,29 @@ sysPass.Main = function () { $target.addClass("dialog-clip-copy"); }, function (err) { - msg.error(config.LANG[46]); + msg.error(oPublic.config.LANG[46]); } ); }).on("click", ".clip-pass-icon", function () { clipboard - .copy(decodeEntities($(this.dataset.clipboardTarget).val())) + .copy(sysPass.Util.decodeEntities($(this.dataset.clipboardTarget).val())) .then( function () { - msg.ok(config.LANG[45]); + msg.ok(oPublic.config.LANG[45]); }, function (err) { - msg.error(config.LANG[46]); + msg.error(oPublic.config.LANG[46]); } ); }).on("click", ".clip-pass-field", function () { clipboard - .copy(decodeEntities(document.getElementById(this.dataset.clipboardTarget).dataset.pass)) + .copy(sysPass.Util.decodeEntities(document.getElementById(this.dataset.clipboardTarget).dataset.pass)) .then( function () { - msg.ok(config.LANG[45]); + msg.ok(oPublic.config.LANG[45]); }, function (err) { - msg.error(config.LANG[46]); + msg.error(oPublic.config.LANG[46]); } ); }); @@ -302,217 +199,29 @@ sysPass.Main = function () { const curValue = $input.val(); - if (curValue !== "" && parseInt($input.attr("data-length")) !== curValue.length) { - const passEncrypted = config.CRYPT.encrypt(curValue); + if (curValue !== "" + && parseInt($input.attr("data-length")) !== curValue.length + ) { + if (curValue.length > oPublic.config.PKI.MAX_SIZE) { + $input.val(""); + + throw "Data length too big for encrypting"; + } + + const passEncrypted = oPublic.config.PKI.CRYPTO.encrypt(curValue); $input.val(passEncrypted); $input.attr("data-length", passEncrypted.length); } }; - // Funciones para analizar al fortaleza de una clave - const outputResult = function (level, $target) { - log.info("outputResult"); - - const $passLevel = $("#password-level-" + $target.attr("id")); - const score = level.score; - - $passLevel.removeClass("weak good strong strongest"); - - if (passwordData.passLength === 0) { - $passLevel.attr("data-level-msg", ""); - } else if (passwordData.passLength < passwordData.minPasswordLength) { - $passLevel.attr("data-level-msg", config.LANG[11]).addClass("weak"); - } else if (score === 0) { - $passLevel.attr("data-level-msg", config.LANG[9] + " - " + level.feedback.warning).addClass("weak"); - } else if (score === 1 || score === 2) { - $passLevel.attr("data-level-msg", config.LANG[8] + " - " + level.feedback.warning).addClass("good"); - } else if (score === 3) { - $passLevel.attr("data-level-msg", config.LANG[7]).addClass("strong"); - } else if (score === 4) { - $passLevel.attr("data-level-msg", config.LANG[10]).addClass("strongest"); - } - }; - - // From http://net.tutsplus.com/tutorials/javascript-ajax/build-a-simple-password-strength-checker/ - const checkPassLevel = function ($target) { - log.info("checkPassLevel"); - - passwordData.passLength = $target.val().length; - - outputResult(zxcvbn($target.val()), $target); - }; - - // Función para habilitar la subida de archivos en una zona o formulario - const fileUpload = function ($obj) { - - // Inicializar el formulario de archivos en modo compatibilidad - const initForm = function (display) { - const $form = $("#fileUploadForm"); - - if (display === false) { - $form.hide(); - } - - const $input = $form.find("input[type='file']"); - - $input.on("change", function () { - if (typeof options.beforeSendAction === "function") { - options.beforeSendAction(); - } - - handleFiles(this.files); - }); - - return $input; - }; - - const requestData = { - actionId: $obj.data("action-id"), - itemId: $obj.data("item-id"), - sk: sk.get() - }; - - const options = { - requestDoneAction: "", - setRequestData: function (data) { - $.extend(requestData, data); - }, - getRequestData: function () { - return requestData; - }, - beforeSendAction: "", - url: "", - allowedExts: [] - }; - - // Subir un archivo - const sendFile = function (file) { - if (options.url === undefined || options.url === "") { - return false; - } - - // Objeto FormData para crear datos de un formulario - const fd = new FormData(); - fd.append("inFile", file); - fd.append("isAjax", 1); - - requestData.sk = sk.get(); - - Object.keys(requestData).forEach(function (key) { - fd.append(key, requestData[key]); - }); - - const opts = appRequests.getRequestOpts(); - opts.url = options.url; - opts.processData = false; - opts.contentType = false; - opts.data = fd; - - appRequests.getActionCall(opts, function (json) { - const status = json.status; - const description = json.description; - - if (status === 0) { - if (typeof options.requestDoneAction === "function") { - options.requestDoneAction(); - } - - msg.ok(description); - } else if (status === 10) { - appActions.main.logout(); - } else { - msg.error(description); - } - }); - - }; - - const checkFileSize = function (size) { - return (size / 1000 > config.MAX_FILE_SIZE); - }; - - const checkFileExtension = function (name) { - for (let ext in options.allowedExts) { - if (name.indexOf(options.allowedExts[ext]) !== -1) { - return true; - } - } - - return false; - }; - - // Comprobar los archivos y subirlos - const handleFiles = function (filesArray) { - if (filesArray.length > 5) { - msg.error(config.LANG[17] + " (Max: 5)"); - return; - } - - for (let i = 0; i < filesArray.length; i++) { - const file = filesArray[i]; - if (checkFileSize(file.size)) { - msg.error(config.LANG[18] + "
        " + file.name + " (Max: " + config.MAX_FILE_SIZE + ")"); - } else if (!checkFileExtension(file.name.toUpperCase())) { - msg.error(config.LANG[19] + "
        " + file.name); - } else { - sendFile(filesArray[i]); - } - } - }; - - // Inicializar la zona de subida de archivos Drag&Drop - const init = function () { - log.info("fileUpload:init"); - - const fallback = initForm(false); - - $obj.on("dragover dragenter", function (e) { - log.info("fileUpload:drag"); - - e.stopPropagation(); - e.preventDefault(); - }); - - $obj.on("drop", function (e) { - log.info("fileUpload:drop"); - - e.stopPropagation(); - e.preventDefault(); - - if (typeof options.beforeSendAction === "function") { - options.beforeSendAction(); - } - - handleFiles(e.originalEvent.dataTransfer.files); - }); - - $obj.on("click", function () { - fallback.click(); - }); - }; - - - if (window.File && window.FileList && window.FileReader) { - init(); - } else { - initForm(true); - } - - return options; - }; - - const redirect = function (url) { - window.location.replace(url); - }; - // Función para comprobar si se ha salido de la sesión const checkLogout = function () { log.info("checkLogout"); if (getUrlVars("r") === "login/logout") { - msg.sticky(config.LANG[61], function () { - redirect("index.php?r=login"); + msg.sticky(oPublic.config.LANG[61], function () { + oPublic.util.redirect("index.php?r=login"); }); return true; @@ -521,27 +230,9 @@ sysPass.Main = function () { return false; }; - // Función para retornar el scroll a la posición inicial - const scrollUp = function () { - $("html, body").animate({scrollTop: 0}, "slow"); - }; - - // Función para establecer la altura del contenedor ajax - const setContentSize = function () { - const $container = $("#container"); - - if ($container.hasClass("content-no-auto-resize")) { - return; - } - - //console.info($("#content").height()); - - // Calculate total height for full body resize - $container.css("height", $("#content").height() + 200); - }; - // Objeto para leer/escribir el token de seguridad const sk = { + current: "", get: function () { log.info("sk:get"); return $("#container").attr("data-sk"); @@ -552,78 +243,19 @@ sysPass.Main = function () { $("#container").attr("data-sk", sk); - state.sk = sk; + this.current = sk; } }; - // Configuración de atributos generales - const config = { - APP_ROOT: "", // Base para llamadas AJAX - LANG: [], // Array de lenguaje - PK: "", // Clave pública - MAX_FILE_SIZE: 1024, // Máximo tamaño de archivo - CRYPT: new JSEncrypt(), // Inicializar la encriptación RSA - CHECK_UPDATES: false, // Comprobar actualizaciones - TIMEZONE: "", - LOCALE: "", - DEBUG: "", - COOKIES_ENABLED: false, - PLUGINS: [], - LOGGEDIN: false, - AUTHBASIC_AUTOLOGIN: false, - FILES_ALLOWED_EXTS: "", - IMPORT_ALLOWED_EXTS: [] - }; - - // Atributos del generador de claves - const passwordData = { - passLength: 0, - minPasswordLength: 8, - complexity: { - chars: true, - numbers: true, - symbols: true, - uppercase: true, - numlength: 12 - } - }; - - const state = { - sk: "" - }; - - Object.seal(passwordData); - - // Objeto con las funciones propias del tema visual - let appTheme = {}; - - // Objeto con los triggers de la aplicación - let appTriggers = {}; - - // Objeto con las acciones de la aplicación - let appActions = {}; - - // Objeto con las funciones para peticiones de la aplicación - let appRequests = {}; - - // Objeto con los plugins habilitados - const appPlugins = {}; - - // Objeto con las propiedades públicas - let oPublic = {}; - - // Objeto con las propiedades protegidas - let oProtected = {}; - // Logging const log = { log: function (msg) { - if (config.DEBUG === true) { + if (oPublic.config.DEBUG === true) { console.log(msg); } }, info: function (msg) { - if (config.DEBUG === true) { + if (oPublic.config.DEBUG === true) { console.info(msg); } }, @@ -634,7 +266,7 @@ sysPass.Main = function () { console.warn(msg); }, debug: function (msg) { - if (config.DEBUG === true) { + if (oPublic.config.DEBUG === true) { console.debug(msg); } } @@ -670,19 +302,21 @@ sysPass.Main = function () { const $container = $("#container"); const page = $container.data("page"); - if (page !== "" && typeof appTriggers.views[page] === "function") { - appTriggers.views[page]($container); + if (page.length > 0 + && typeof oPublic.triggers.views[page] === "function" + ) { + oPublic.triggers.views[page]($container); } if ($("footer").length > 0) { - appTriggers.views.footer(); + oPublic.triggers.views.footer(); } $("#btnBack").click(function () { - redirect("index.php"); + oPublic.util.redirect("index.php"); }); - appTriggers.bodyHooks(); + oPublic.triggers.bodyHooks(); }; // Mostrar mensaje de aviso @@ -706,52 +340,52 @@ sysPass.Main = function () { opts.onHidden = callback; } - toastr.warning(msg, config.LANG[60], opts); + toastr.warning(msg, oPublic.config.LANG[60], opts); }, out: function (data) { if (typeof data === "object") { const status = data.status; let description = data.description; - if (data.messages !== undefined && data.messages.length > 0) { + if (data.messages !== undefined + && data.messages.length > 0 + ) { description = description + "
        " + data.messages.join("
        "); } switch (status) { case 0: - msg.ok(description); + this.ok(description); break; case 1: - // case 2: - // case 4: - msg.error(description); + this.error(description); break; case 2: - msg.warn(description); + this.warn(description); break; case 10: - appActions.main.logout(); + sysPassApp.actions.main.logout(); break; case 100: - msg.ok(description); - msg.sticky(description); + this.ok(description); + this.sticky(description); break; case 101: - msg.error(description); - msg.sticky(description); + this.error(description); + this.sticky(description); break; case 102: - msg.warn(description); - msg.sticky(description); + this.warn(description); + this.sticky(description); break; default: - msg.error(description); + this.error(description); } } }, html: { error: function (msg) { - return "

        Oops...
        " + config.LANG[1] + "
        " + msg + "

        "; + return "

        Oops...
        " + oPublic.config.LANG[1] + "
        " + msg + "

        "; } } }; @@ -761,6 +395,7 @@ sysPass.Main = function () { if (!String.format) { String.format = function (format) { const args = Array.prototype.slice.call(arguments, 1); + return format.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] !== "undefined" ? args[number] : match; }); @@ -784,132 +419,98 @@ sysPass.Main = function () { return fullPath; }; - config.APP_ROOT = window.location.protocol + "//" + window.location.host + rootPath(); + const configHandler = sysPass.Config(); - const opts = appRequests.getRequestOpts(); + configHandler.setAppRoot(window.location.protocol + "//" + window.location.host + rootPath()); + + const opts = oPublic.requests.getRequestOpts(); opts.url = "/index.php?r=bootstrap/getEnvironment"; opts.method = "get"; // opts.async = false; opts.useLoading = false; opts.data = {isAjax: 1}; - return appRequests.getActionCall(opts, function (json) { + return oPublic.requests.getActionCall(opts, function (json) { if (json.data !== undefined) { - // config.APP_ROOT = json.app_root; - config.LANG = json.data.lang; - config.PK = json.data.pk; - config.CHECK_UPDATES = json.data.check_updates; - config.CHECK_NOTICES = json.data.check_notices; - config.CRYPT.setPublicKey(json.data.pk); - config.TIMEZONE = json.data.timezone; - config.LOCALE = json.data.locale; - config.DEBUG = json.data.debug; - config.MAX_FILE_SIZE = parseInt(json.data.max_file_size); - config.COOKIES_ENABLED = json.data.cookies_enabled; - config.PLUGINS = json.data.plugins; - config.LOGGEDIN = json.data.loggedin; - config.AUTHBASIC_AUTOLOGIN = json.data.authbasic_autologin; - config.IMPORT_ALLOWED_EXTS = json.data.import_allowed_exts; - config.FILES_ALLOWED_EXTS = json.data.files_allowed_exts; + configHandler.setLang(json.data.lang); + configHandler.setPkiKey(json.data.pki_key); + configHandler.setPkiSize(json.data.pki_max_size); + configHandler.setCheckUpdates(json.data.check_updates); + configHandler.setCheckNotices(json.data.check_notices); + configHandler.setTimezone(json.data.timezone); + configHandler.setLocale(json.data.locale); + configHandler.setDebugEnabled(json.data.debug); + configHandler.setFileMaxSize(json.data.max_file_size); + configHandler.setFileAccountAllowedExts(json.data.files_allowed_exts); + configHandler.setFileImportAllowedExts(json.data.import_allowed_exts); + configHandler.setCookiesEnabled(json.data.cookies_enabled); + configHandler.setPlugins(json.data.plugins); + configHandler.setLoggedIn(json.data.loggedin); + configHandler.setAuthBasicAutologinEnabled(json.data.authbasic_autologin); - Object.freeze(config); + configHandler.initialize(); + + oPublic.config = configHandler.getConfig(); } + }).fail(function () { + msg.error("Error while getting sysPass config
        Please try again or check web server logs"); }); }; + // Objeto con métodos y propiedades públicas + const oPublic = { + config: sysPass.Config().getConfig(), + actions: sysPass.Actions(log), + triggers: sysPass.Triggers(log), + util: sysPass.Util(log), + theme: {}, + plugins: {}, + sk: sk, + msg: msg, + log: log, + encryptFormValue: encryptFormValue, + }; + /** * Inicialización */ const init = function () { log.info("init"); - // Objeto con métodos y propiedades públicas - oPublic = { - actions: function () { - return appActions; - }, - triggers: function () { - return appTriggers; - }, - theme: function () { - return appTheme; - }, - sk: sk, - msg: msg, - log: log, - passwordData: passwordData, - outputResult: outputResult, - checkPassLevel: checkPassLevel, - encryptFormValue: encryptFormValue, - fileUpload: fileUpload, - redirect: redirect, - scrollUp: scrollUp, - setContentSize: setContentSize, - generateRandomPass: generateRandomPass, - uniqueId: uniqueId - }; - - // Objeto con métodos y propiedades protegidas - oProtected = $.extend({ - log: log, - config: function () { - return config; - }, - appTheme: function () { - return appTheme; - }, - appActions: function () { - return appActions; - }, - appTriggers: function () { - return appTriggers; - }, - appRequests: function () { - return appRequests; - }, - appPlugins: function () { - return appPlugins; - }, - evalAction: evalAction, - resizeImage: resizeImage - }, oPublic); - - Object.freeze(oPublic); - Object.freeze(oProtected); - - appTriggers = sysPass.Triggers(oProtected); - appActions = sysPass.Actions(oProtected); - appRequests = sysPass.Requests(oProtected); - if (typeof sysPass.Theme === "function") { - appTheme = sysPass.Theme(oProtected); + oPublic.theme = sysPass.Theme(log); } + // Late init + oPublic.requests = sysPass.Requests(oPublic); + getEnvironment().then(function () { if (!checkLogout()) { - if (config.PK !== "") { + if (oPublic.config.PKI.AVAILABLE) { bindPassEncrypt(); } - if (config.COOKIES_ENABLED === false) { - msg.sticky(config.LANG[64]); + if (oPublic.config.BROWSER.COOKIES_ENABLED === false) { + msg.sticky(oPublic.config.LANG[64]); } initializeClipboard(); setupCallbacks(); - if (config.PLUGINS.length > 0) { - log.info(config.PLUGINS); + if (oPublic.config.PLUGINS.length > 0) { + log.info(oPublic.config.PLUGINS); - initPlugins(); + oPublic.plugins = initPlugins(); - if (config.LOGGEDIN === true - && config.CHECK_UPDATES === true + if (oPublic.config.AUTH.LOGGEDIN === true + && oPublic.config.STATUS.CHECK_UPDATES === true ) { checkPluginUpdates(); } } } + + Object.freeze(oPublic); }); return oPublic; @@ -929,74 +530,5 @@ sysPass.Main = function () { return param !== undefined && vars[param] !== undefined ? vars[param] : vars; }; - // Función para obtener el tiempo actual en milisegundos - const getTime = function () { - const t = new Date(); - return t.getTime(); - }; - - /** - * Function to generate random password and call a callback sending the generated string - * and a zxcvbn object - * - * @param callback - */ - const generateRandomPass = function (callback) { - let i = 0; - let chars = ""; - let password = ""; - - const getRandomChar = function (min, max) { - return chars.charAt(Math.floor((Math.random() * max) + min)); - }; - - if (passwordData.complexity.symbols) { - chars += "!\"\\·@|#$~%&/()=?'¿¡^*[]·;,_-{}<>"; - } - - if (passwordData.complexity.numbers) { - chars += "1234567890"; - } - - if (passwordData.complexity.chars) { - chars += "abcdefghijklmnopqrstuvwxyz"; - - if (passwordData.complexity.uppercase) { - chars += String("abcdefghijklmnopqrstuvwxyz").toUpperCase(); - } - } - - for (; i++ < passwordData.complexity.numlength;) { - password += getRandomChar(0, chars.length - 1); - } - - passwordData.passLength = password.length; - - if (typeof callback === "function") { - callback(password, zxcvbn(password)); - } - }; - - /** - * @see https://stackoverflow.com/questions/3231459/create-unique-id-with-javascript - * @returns {string} - */ - const uniqueId = function () { - // always start with a letter (for DOM friendlyness) - let idstr = String.fromCharCode(Math.floor((Math.random() * 25) + 65)); - - do { - // between numbers and characters (48 is 0 and 90 is Z (42-48 = 90) - const ascicode = Math.floor((Math.random() * 42) + 48); - if (ascicode < 58 || ascicode > 64) { - // exclude all chars between : (58) and @ (64) - idstr += String.fromCharCode(ascicode); - } - } while (idstr.length < 32); - - return idstr.toLowerCase(); - }; - - return init(); }; \ No newline at end of file diff --git a/public/js/app-main.min.js b/public/js/app-main.min.js index 47c5d22e..f32dce48 100644 --- a/public/js/app-main.min.js +++ b/public/js/app-main.min.js @@ -1,27 +1,12 @@ -var $jscomp={scope:{},findInternal:function(b,l,h){b instanceof String&&(b=String(b));for(var m=b.length,n=0;n]*>([\S\s]*?)<\/script>/gmi,""),g=g.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi,""),a.innerHTML=g,g=a.textContent, -a.textContent="");return g}}(),h=function(a){f.info("resizeImage");var g=.9*$(window).width(),e=.9*$(window).height(),b={width:a.width(),height:a.height()},c={calc:0,main:0,secondary:0,factor:.9,rel:b.width/b.height},d=function(a){a.main>a.secondary?a.calc=a.main/a.rel:a.maina.secondary&&(a.main*=a.factor,d(a));return a},D=function(){c.main=g;c.secondary=e;var k=d(c);a.css({width:k.main,height:k.calc});b.width=k.main;b.height=k.calc},E=function(){c.main= -e;c.secondary=g;var k=d(c);a.css({width:k.calc,height:k.main});b.width=k.calc;b.height=k.main};b.width>g?D():b.height>e&&(f.info("height"),E());return b},m=function(a,g){f.info("Eval: "+a);if("function"===typeof a)a(g);else throw Error("Function not found: "+a);},n=function(){f.info("bindPassEncrypt");$("body").on("blur",":input[type=password]",function(a){a=$(this);a.hasClass("passwordfield__no-pki")||z(a)}).on("keypress",":input[type=password]",function(a){13===a.keyCode&&(a.preventDefault(),a= -$(this),z(a),a.closest("form").submit())})},w=function(){f.info("initializeClipboard");if(clipboard.isSupported())$("body").on("click",".clip-pass-button",function(){var a=u.account.copyPass($(this)).done(function(a){if(0!==a.status)return d.out(a),!1;x.set(a.csrf)});!1!==a&&clipboard.copy(a.responseJSON.data.accpass).then(function(){d.ok(c.LANG[45])},function(a){d.error(c.LANG[46])})}).on("click",".dialog-clip-button",function(){var a=$(this.dataset.clipboardTarget);clipboard.copy(a.text().replace(/\r?\n|\r/g)).then(function(){$(".dialog-text").removeClass("dialog-clip-copy"); -a.addClass("dialog-clip-copy")},function(a){d.error(c.LANG[46])})}).on("click",".clip-pass-icon",function(){clipboard.copy(l($(this.dataset.clipboardTarget).val())).then(function(){d.ok(c.LANG[45])},function(a){d.error(c.LANG[46])})}).on("click",".clip-pass-field",function(){clipboard.copy(l(document.getElementById(this.dataset.clipboardTarget).dataset.pass)).then(function(){d.ok(c.LANG[45])},function(a){d.error(c.LANG[46])})});else f.warn(c.LANG[65])},z=function(a){f.info("encryptFormValue");var b= -a.val();""!==b&&parseInt(a.attr("data-length"))!==b.length&&(b=c.CRYPT.encrypt(b),a.val(b),a.attr("data-length",b.length))},C=function(a,b){f.info("outputResult");var e=$("#password-level-"+b.attr("id")),g=a.score;e.removeClass("weak good strong strongest");0===p.passLength?e.attr("data-level-msg",""):p.passLengthc.MAX_FILE_SIZE)d.error(c.LANG[18]+"
        "+e.name+" (Max: "+c.MAX_FILE_SIZE+")");else{var g;a:{g=e.name.toUpperCase();var f=void 0;for(f in k.allowedExts)if(-1!==g.indexOf(k.allowedExts[f])){g=!0;break a}g=!1}g?h(a[b]):d.error(c.LANG[19]+"
        "+e.name)}}};window.File&&window.FileList&& -window.FileReader?function(){f.info("fileUpload:init");var e=b(!1);a.on("dragover dragenter",function(a){f.info("fileUpload:drag");a.stopPropagation();a.preventDefault()});a.on("drop",function(a){f.info("fileUpload:drop");a.stopPropagation();a.preventDefault();"function"===typeof k.beforeSendAction&&k.beforeSendAction();l(a.originalEvent.dataTransfer.files)});a.on("click",function(){e.click()})}():b(!0);return k},A=function(a){window.location.replace(a)},I=function(){f.info("checkLogout");return"login/logout"=== -H("r")?(d.sticky(c.LANG[61],function(){A("index.php?r=login")}),!0):!1},J=function(){$("html, body").animate({scrollTop:0},"slow")},K=function(){var a=$("#container");a.hasClass("content-no-auto-resize")||a.css("height",$("#content").height()+200)},x={get:function(){f.info("sk:get");return $("#container").attr("data-sk")},set:function(a){f.info("sk:set");f.debug(a);$("#container").attr("data-sk",a)}},c={APP_ROOT:"",LANG:[],PK:"",MAX_FILE_SIZE:1024,CRYPT:new JSEncrypt,CHECK_UPDATES:!1,TIMEZONE:"", -LOCALE:"",DEBUG:"",COOKIES_ENABLED:!1,PLUGINS:[],LOGGEDIN:!1,AUTHBASIC_AUTOLOGIN:!1,FILES_ALLOWED_EXTS:"",IMPORT_ALLOWED_EXTS:[]},p={passLength:0,minPasswordLength:8,complexity:{chars:!0,numbers:!0,symbols:!0,uppercase:!0,numlength:12}};Object.seal(p);var B={},q={},u={},v={},t={},y={},r={},f={log:function(a){!0===c.DEBUG&&console.log(a)},info:function(a){!0===c.DEBUG&&console.info(a)},error:function(a){console.error(a)},warn:function(a){console.warn(a)},debug:function(a){!0===c.DEBUG&&console.debug(a)}}; -Object.freeze(f);toastr.options={closeButton:!0,debug:!1,newestOnTop:!1,progressBar:!1,positionClass:"toast-top-center",preventDuplicates:!1,onclick:null,showDuration:"300",hideDuration:"1000",timeOut:"5000",extendedTimeOut:"1000",showEasing:"swing",hideEasing:"linear",showMethod:"fadeIn",hideMethod:"fadeOut"};var L=function(){f.info("setupCallbacks");var a=$("#container"),b=a.data("page");if(""!==b&&"function"===typeof q.views[b])q.views[b](a);0<$("footer").length&&q.views.footer();$("#btnBack").click(function(){A("index.php")}); -q.bodyHooks()},d={ok:function(a){toastr.success(a)},error:function(a){toastr.error(a)},warn:function(a){toastr.warning(a)},info:function(a){toastr.info(a)},sticky:function(a,b){var e={timeOut:0};"function"===typeof b&&(e.onHidden=b);toastr.warning(a,c.LANG[60],e)},out:function(a){if("object"===typeof a){var b=a.status,e=a.description;void 0!==a.messages&&0"+a.messages.join("
        "));switch(b){case 0:d.ok(e);break;case 1:d.error(e);break;case 2:d.warn(e);break;case 10:u.main.logout(); -break;case 100:d.ok(e);d.sticky(e);break;case 101:d.error(e);d.sticky(e);break;case 102:d.warn(e);d.sticky(e);break;default:d.error(e)}}},html:{error:function(a){return'

        Oops...
        '+c.LANG[1]+"
        "+a+"

        "}}};Object.freeze(d);String.format||(String.format=function(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(/{(\d+)}/g,function(a,c){return"undefined"!==typeof b[c]?b[c]:a})});var M=function(){f.info("getEnvironment");var a=window.location.pathname.split("/"); -c.APP_ROOT=window.location.protocol+"//"+window.location.host+function(){for(var b="",c=1;c<=a.length-2;c++)b+="/"+a[c];return b}();var b=v.getRequestOpts();b.url="/index.php?r=bootstrap/getEnvironment";b.method="get";b.useLoading=!1;b.data={isAjax:1};return v.getActionCall(b,function(a){void 0!==a.data&&(c.LANG=a.data.lang,c.PK=a.data.pk,c.CHECK_UPDATES=a.data.check_updates,c.CHECK_NOTICES=a.data.check_notices,c.CRYPT.setPublicKey(a.data.pk),c.TIMEZONE=a.data.timezone,c.LOCALE=a.data.locale,c.DEBUG= -a.data.debug,c.MAX_FILE_SIZE=parseInt(a.data.max_file_size),c.COOKIES_ENABLED=a.data.cookies_enabled,c.PLUGINS=a.data.plugins,c.LOGGEDIN=a.data.loggedin,c.AUTHBASIC_AUTOLOGIN=a.data.authbasic_autologin,c.IMPORT_ALLOWED_EXTS=a.data.import_allowed_exts,c.FILES_ALLOWED_EXTS=a.data.files_allowed_exts,Object.freeze(c))})},H=function(a){for(var b=[],c,d=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),f=0;f");p.complexity.numbers&&(c+="1234567890");p.complexity.chars&&(c+="abcdefghijklmnopqrstuvwxyz",p.complexity.uppercase&&(c+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"));for(;b++b||64a.length);return a.toLowerCase()};return function(){f.info("init");y={actions:function(){return u},triggers:function(){return q},theme:function(){return B},sk:x,msg:d,log:f,passwordData:p,outputResult:C,checkPassLevel:F,encryptFormValue:z,fileUpload:G,redirect:A,scrollUp:J,setContentSize:K,generateRandomPass:N,uniqueId:O};r=$.extend({log:f,config:function(){return c},appTheme:function(){return B},appActions:function(){return u}, -appTriggers:function(){return q},appRequests:function(){return v},appPlugins:function(){return t},evalAction:m,resizeImage:h},y);Object.freeze(y);Object.freeze(r);q=sysPass.Triggers(r);u=sysPass.Actions(r);v=sysPass.Requests(r);"function"===typeof sysPass.Theme&&(B=sysPass.Theme(r));M().then(function(){if(!I()&&(""!==c.PK&&n(),!1===c.COOKIES_ENABLED&&d.sticky(c.LANG[64]),w(),L(),0b.config.PKI.MAX_SIZE)throw a.val(""),"Data length too big for encrypting";c=b.config.PKI.CRYPTO.encrypt(c);a.val(c);a.attr("data-length",c.length)}},p=function(){d.info("checkLogout");return"login/logout"===n("r")?(e.sticky(b.config.LANG[61],function(){b.util.redirect("index.php?r=login")}),!0):!1},h={current:"", +get:function(){d.info("sk:get");return $("#container").attr("data-sk")},set:function(a){d.info("sk:set");d.debug(a);$("#container").attr("data-sk",a);this.current=a}},d={log:function(a){!0===b.config.DEBUG&&console.log(a)},info:function(a){!0===b.config.DEBUG&&console.info(a)},error:function(a){console.error(a)},warn:function(a){console.warn(a)},debug:function(a){!0===b.config.DEBUG&&console.debug(a)}};Object.freeze(d);toastr.options={closeButton:!0,debug:!1,newestOnTop:!1,progressBar:!1,positionClass:"toast-top-center", +preventDuplicates:!1,onclick:null,showDuration:"300",hideDuration:"1000",timeOut:"5000",extendedTimeOut:"1000",showEasing:"swing",hideEasing:"linear",showMethod:"fadeIn",hideMethod:"fadeOut"};var q=function(){d.info("setupCallbacks");var a=$("#container"),c=a.data("page");if(0"+a.messages.join("
        "));switch(c){case 0:this.ok(b);break;case 1:this.error(b);break;case 2:this.warn(b);break;case 10:sysPassApp.actions.main.logout();break; +case 100:this.ok(b);this.sticky(b);break;case 101:this.error(b);this.sticky(b);break;case 102:this.warn(b);this.sticky(b);break;default:this.error(b)}}},html:{error:function(a){return'

        Oops...
        '+b.config.LANG[1]+"
        "+a+"

        "}}};Object.freeze(e);String.format||(String.format=function(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(/{(\d+)}/g,function(a,c){return"undefined"!==typeof b[c]?b[c]:a})});var r=function(){d.info("getEnvironment");var a=window.location.pathname.split("/"), +c=sysPass.Config();c.setAppRoot(window.location.protocol+"//"+window.location.host+function(){for(var b="",c=1;c<=a.length-2;c++)b+="/"+a[c];return b}());var f=b.requests.getRequestOpts();f.url="/index.php?r=bootstrap/getEnvironment";f.method="get";f.useLoading=!1;f.data={isAjax:1};return b.requests.getActionCall(f,function(a){void 0!==a.data&&(c.setLang(a.data.lang),c.setPkiKey(a.data.pki_key),c.setPkiSize(a.data.pki_max_size),c.setCheckUpdates(a.data.check_updates),c.setCheckNotices(a.data.check_notices), +c.setTimezone(a.data.timezone),c.setLocale(a.data.locale),c.setDebugEnabled(a.data.debug),c.setFileMaxSize(a.data.max_file_size),c.setFileAccountAllowedExts(a.data.files_allowed_exts),c.setFileImportAllowedExts(a.data.import_allowed_exts),c.setCookiesEnabled(a.data.cookies_enabled),c.setPlugins(a.data.plugins),c.setLoggedIn(a.data.loggedin),c.setAuthBasicAutologinEnabled(a.data.authbasic_autologin),c.initialize(),b.config=c.getConfig())}).fail(function(){e.error("Error while getting sysPass config
        Please try again or check web server logs")})}, +b={config:sysPass.Config().getConfig(),actions:sysPass.Actions(d),triggers:sysPass.Triggers(d),util:sysPass.Util(d),theme:{},plugins:{},sk:h,msg:e,log:d,encryptFormValue:g},n=function(a){for(var b=[],d,e=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),g=0;g. */ -sysPass.Requests = function (Common) { +sysPass.Requests = function (sysPassApp) { "use strict"; - const log = Common.log; + const log = sysPassApp.log; /** * Historial de consultas AJAX @@ -63,7 +63,7 @@ sysPass.Requests = function (Common) { return _history; }, add: function (opts) { - const hash = (opts.hash === "") ? SparkMD5.hash(JSON.stringify(opts), false) : opts.hash; + const hash = (opts.hash === "") ? sysPassApp.util.hash.md5(JSON.stringify(opts)) : opts.hash; if (_history.length > 0 && _history[_history.length - 1].hash === hash) { return _history; @@ -113,7 +113,7 @@ sysPass.Requests = function (Common) { * @returns {*} */ const getUrl = function (url) { - return (url.indexOf("http") === -1 && url.indexOf("https") === -1) ? Common.config().APP_ROOT + url : url; + return (url.indexOf("http") === -1 && url.indexOf("https") === -1) ? sysPassApp.config.APP_ROOT + url : url; }; /** @@ -138,7 +138,7 @@ sysPass.Requests = function (Common) { timeout: opts.timeout, beforeSend: function () { if (opts.useLoading === true) { - Common.appTheme().loading.show(opts.useFullLoading); + sysPassApp.theme.loading.show(opts.useFullLoading); } }, success: function (response) { @@ -156,29 +156,41 @@ sysPass.Requests = function (Common) { }, error: function (jqXHR, textStatus, errorThrown) { if (typeof callbackError !== "function") { - const txt = Common.config().LANG[1] + "

        " + errorThrown + textStatus + "

        "; + let txt; + + if (sysPassApp.config.LANG[1] !== undefined) { + txt = sysPassApp.config.LANG[1] + "

        " + errorThrown + textStatus + "

        "; + } else { + txt = "An error occurred

        " + errorThrown + " (" + textStatus + ")

        "; + } log.error(txt); if (opts.type === "html") { - $("#content").html(Common.msg.html.error(errorThrown)); + $("#content").html(sysPassApp.msg.html.error(errorThrown)); } - Common.msg.error(txt); + sysPassApp.msg.error(txt); } else { callbackError(); } }, complete: function (response) { if (opts.useLoading === true) { - Common.appTheme().loading.hide(); + sysPassApp.theme.loading.hide(); } - if (opts.type === "json" && response.responseJSON.csrf !== undefined && response.responseJSON.csrf !== "") { - Common.sk.set(response.responseJSON.csrf); + if (opts.type === "json" + && response.responseJSON !== undefined + && response.responseJSON.csrf !== undefined + && response.responseJSON.csrf !== "" + ) { + sysPassApp.sk.set(response.responseJSON.csrf); } - Common.appTheme().ajax.complete(); + if (sysPassApp.theme !== undefined) { + sysPassApp.theme.ajax.complete(); + } } }); }; diff --git a/public/js/app-requests.min.js b/public/js/app-requests.min.js index c565b028..525fa8e0 100644 --- a/public/js/app-requests.min.js +++ b/public/js/app-requests.min.js @@ -1,5 +1,5 @@ -sysPass.Requests=function(c){var d=c.log,b=[],g={type:"json",url:"",method:"post",callback:"",async:!0,data:"",cache:!1,processData:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",timeout:0,addHistory:!1,hash:"",useLoading:!0,useFullLoading:!1};Object.seal(g);var h={get:function(){return b},add:function(a){var e=""===a.hash?SparkMD5.hash(JSON.stringify(a),!1):a.hash;if(0"+m+e+"

        ",d.error(b),"html"===a.type&&$("#content").html(c.msg.html.error(m)),c.msg.error(b)):l()},complete:function(b){!0===a.useLoading&&c.appTheme().loading.hide();"json"===a.type&&void 0!==b.responseJSON.csrf&& -""!==b.responseJSON.csrf&&c.sk.set(b.responseJSON.csrf);c.appTheme().ajax.complete()}})},getActionEvent:function(a,b,c){var e=k(a.url),e=e+("?"+$.param(a.data)),f=new EventSource(e);f.addEventListener("message",function(a){a=JSON.parse(a.data);d.debug(a);1===a.end?(d.info("getActionEvent:Ending"),f.close(),"function"===typeof c&&c(a)):"function"===typeof b&&b(a)});f.addEventListener("error",function(a){d.error("getActionEvent:Error occured");f.close()});return f},getRouteForQuery:function(a,b){return"object"=== -typeof b?{r:a+"/"+b.join("/")}:{r:a+"/"+b}},history:h}}; +sysPass.Requests=function(c){var e=c.log,b=[],h={type:"json",url:"",method:"post",callback:"",async:!0,data:"",cache:!1,processData:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",timeout:0,addHistory:!1,hash:"",useLoading:!0,useFullLoading:!1};Object.seal(h);var k={get:function(){return b},add:function(a){var d=""===a.hash?c.util.hash.md5(JSON.stringify(a)):a.hash;if(0"+g+d+"

        ":"An error occurred

        "+g+" ("+d+")

        ",e.error(b),"html"===a.type&&$("#content").html(c.msg.html.error(g)),c.msg.error(b)):m()},complete:function(b){!0===a.useLoading&& +c.theme.loading.hide();"json"===a.type&&void 0!==b.responseJSON&&void 0!==b.responseJSON.csrf&&""!==b.responseJSON.csrf&&c.sk.set(b.responseJSON.csrf);void 0!==c.theme&&c.theme.ajax.complete()}})},getActionEvent:function(a,b,c){var d=l(a.url),d=d+("?"+$.param(a.data)),f=new EventSource(d);f.addEventListener("message",function(a){a=JSON.parse(a.data);e.debug(a);1===a.end?(e.info("getActionEvent:Ending"),f.close(),"function"===typeof c&&c(a)):"function"===typeof b&&b(a)});f.addEventListener("error", +function(a){e.error("getActionEvent:Error occured");f.close()});return f},getRouteForQuery:function(a,b){return"object"===typeof b?{r:a+"/"+b.join("/")}:{r:a+"/"+b}},history:k}}; diff --git a/public/js/app-triggers.js b/public/js/app-triggers.js index 11d5d038..e637182c 100644 --- a/public/js/app-triggers.js +++ b/public/js/app-triggers.js @@ -21,10 +21,9 @@ * along with sysPass. If not, see . */ -sysPass.Triggers = function (Common) { +sysPass.Triggers = function (log) { "use strict"; - const log = Common.log; const regex = { email: "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" }; @@ -45,7 +44,7 @@ sysPass.Triggers = function (Common) { self_options.create = true; } - options.plugins = $this.hasClass("select-box-deselect") ? {"clear_selection": {title: Common.config().LANG[51]}} : {}; + options.plugins = $this.hasClass("select-box-deselect") ? {"clear_selection": {title: sysPassApp.config.LANG[51]}} : {}; if ($this.data("onchange")) { const onchange = $this.data("onchange").split("/"); @@ -53,9 +52,9 @@ sysPass.Triggers = function (Common) { options.onChange = function (value) { if (value > 0) { if (onchange.length === 2) { - sysPassApp.actions()[onchange[0]][onchange[1]]($this); + sysPassApp.actions[onchange[0]][onchange[1]]($this); } else { - sysPassApp.actions()[onchange[0]]($this); + sysPassApp.actions[onchange[0]]($this); } } }; @@ -105,10 +104,10 @@ sysPass.Triggers = function (Common) { const plugin = $obj.data("plugin"); - if (plugin !== undefined && Common.appPlugins()[plugin] !== undefined) { - actions = Common.appPlugins()[plugin]; + if (plugin !== undefined && sysPassApp.plugins.plugin !== undefined) { + actions = sysPassApp.plugins.plugin; } else { - actions = Common.appActions(); + actions = sysPassApp.actions; } if (onclick.length === 2) { @@ -127,25 +126,25 @@ sysPass.Triggers = function (Common) { log.info("formAction"); const lastHash = $obj.attr("data-hash"); - const currentHash = SparkMD5.hash($obj.serialize(), false); + const currentHash = sysPassApp.util.hash.md5($obj.serialize()); if (lastHash === currentHash) { - Common.msg.ok(Common.config().LANG[55]); + sysPassApp.msg.ok(sysPassApp.config.LANG[55]); return false; } const plugin = $obj.data("plugin"); let actions; - if (plugin !== undefined && Common.appPlugins()[plugin] !== undefined) { - actions = Common.appPlugins()[plugin]; + if (plugin !== undefined && sysPassApp.plugins.plugin !== undefined) { + actions = sysPassApp.plugins.plugin; } else { - actions = Common.appActions(); + actions = sysPassApp.actions; } const onsubmit = $obj.data("onsubmit").split("/"); - $obj.find("input[name='sk']").val(Common.sk.get()); + $obj.find("input[name='sk']").val(sysPassApp.sk.get()); if (onsubmit.length === 2) { actions[onsubmit[0]][onsubmit[1]]($obj); @@ -165,14 +164,12 @@ sysPass.Triggers = function (Common) { ",.btn-action-pager[data-onclick]", function () { handleActionButton($(this)); }).on("click", ".btn-back", function () { - const appRequests = Common.appRequests(); - - if (appRequests.history.length() > 0) { + if (sysPassApp.requests.history.length() > 0) { log.info("back"); - const lastHistory = appRequests.history.del(); + const lastHistory = sysPassApp.requests.history.del(); - appRequests.getActionCall(lastHistory, lastHistory.callback); + sysPassApp.requests.getActionCall(lastHistory, lastHistory.callback); } }).on("submit", ".form-action", function (e) { e.preventDefault(); @@ -183,13 +180,13 @@ sysPass.Triggers = function (Common) { const $helpSrc = $.find("div[for='" + $this.data("help") + "']"); if ($helpSrc.length > 0) { - const title = Common.config().LANG[54] + " - " + $helpSrc[0].getAttribute("title") || Common.config().LANG[54]; + const title = sysPassApp.config.LANG[54] + " - " + $helpSrc[0].getAttribute("title") || sysPassApp.config.LANG[54]; mdlDialog().show({ title: title, text: $helpSrc[0].innerHTML, positive: { - title: Common.config().LANG[43] + title: sysPassApp.config.LANG[43] } }); } @@ -222,25 +219,25 @@ sysPass.Triggers = function (Common) { log.info("views:main"); if (!clipboard.isSupported()) { - Common.msg.info(Common.config().LANG[65]); + sysPassApp.msg.info(sysPassApp.config.LANG[65]); } $(".btn-menu").click(function () { const $this = $(this); if ($this.attr("data-history-reset") === "1") { - Common.appRequests().history.reset(); + sysPassApp.requests.history.reset(); } - Common.appActions().doAction({r: $this.data("route")}, $this.data("view")); + sysPassApp.actions.doAction({r: $this.data("route")}, $this.data("view")); }); // setInterval(function () { - // Common.appActions().notification.getActive(); + // sysPassApp.actions.notification.getActive(); // }, 60000); if ($obj.data("upgraded") === 0) { - Common.appActions().doAction({r: "account/index"}, "search"); + sysPassApp.actions.doAction({r: "account/index"}, "search"); } else { const $content = $("#content"); const page = $content.data('page'); @@ -252,16 +249,16 @@ sysPass.Triggers = function (Common) { } } - if (Common.config().CHECK_UPDATES === true) { - Common.appActions().main.getUpdates(); + if (sysPassApp.config.STATUS.CHECK_UPDATES === true) { + sysPassApp.actions.main.getUpdates(); } - if (Common.config().CHECK_NOTICES === true) { - Common.appActions().main.getNotices(); + if (sysPassApp.config.STATUS.CHECK_NOTICES === true) { + sysPassApp.actions.main.getNotices(); } - if (typeof Common.appTheme().viewsTriggers["main"] === "function") { - Common.appTheme().viewsTriggers.main(); + if (typeof sysPassApp.theme.viewsTriggers.main === "function") { + sysPassApp.theme.viewsTriggers.main(); } }, search: function () { @@ -303,8 +300,8 @@ sysPass.Triggers = function (Common) { } ); - if (typeof Common.appTheme().viewsTriggers.search === "function") { - Common.appTheme().viewsTriggers.search(); + if (typeof sysPassApp.theme.viewsTriggers.search === "function") { + sysPassApp.theme.viewsTriggers.search(); } }, login: function () { @@ -312,24 +309,27 @@ sysPass.Triggers = function (Common) { const $frmLogin = $("#frmLogin"); - if (Common.config().AUTHBASIC_AUTOLOGIN && $frmLogin.find("input[name='loggedOut']").val() === "0") { + if (sysPassApp.config.AUTH.AUTHBASIC_AUTOLOGIN + && $frmLogin.find("input[name='loggedOut']").val() === "0" + ) { log.info("views:login:autologin"); - Common.msg.info(Common.config().LANG[66]); + sysPassApp.msg.info(sysPassApp.config.LANG[66]); - Common.appActions().main.login($frmLogin); + sysPassApp.actions.main.login($frmLogin); } + + $frmLogin.find("input:visible:first").focus(); }, userpassreset: function () { log.info("views:userpassreset"); const $form = $("#frmUserPassReset"); - Common.appTheme().passwordDetect($form); + sysPassApp.theme.passwordDetect($form); }, footer: function () { log.info("views:footer"); - }, common: function ($container) { log.info("views:common"); @@ -339,14 +339,14 @@ sysPass.Triggers = function (Common) { const $sk = $container.find(":input [name='sk']"); if ($sk.length > 0) { - Common.sk.set($sk.val()); + sysPassApp.sk.set($sk.val()); } - if (typeof Common.appTheme().viewsTriggers.common === "function") { - Common.appTheme().viewsTriggers.common($container); + if (typeof sysPassApp.theme.viewsTriggers.common === "function") { + sysPassApp.theme.viewsTriggers.common($container); } - Common.appTriggers().updateFormHash($container); + sysPassApp.triggers.updateFormHash($container); }, datatabs: function () { log.info("views:datatabs"); @@ -367,13 +367,13 @@ sysPass.Triggers = function (Common) { const $dropFiles = $("#drop-import-files"); if ($dropFiles.length > 0) { - const upload = Common.fileUpload($dropFiles); + const upload = sysPassApp.util.fileUpload($dropFiles); - upload.url = Common.appActions().ajaxUrl.entrypoint + "?r=" + $dropFiles.data("action-route"); - upload.allowedExts = Common.config().IMPORT_ALLOWED_EXTS; + upload.url = sysPassApp.actions.ajaxUrl.entrypoint + "?r=" + $dropFiles.data("action-route"); + upload.allowedExts = sysPassApp.config.FILES.IMPORT_ALLOWED_EXTS; upload.beforeSendAction = function () { upload.setRequestData({ - sk: Common.sk.get(), + sk: sysPassApp.sk.get(), csvDelimiter: $("#csvDelimiter").val(), importPwd: $("#importPwd").val(), importMasterPwd: $("#importMasterPwd").val(), @@ -389,19 +389,19 @@ sysPass.Triggers = function (Common) { const $listFiles = $("#list-account-files"); if ($listFiles.length > 0) { - Common.appActions().account.listFiles($listFiles); + sysPassApp.actions.account.listFiles($listFiles); } const $dropFiles = $("#drop-account-files"); if ($dropFiles.length > 0) { - const upload = Common.fileUpload($dropFiles); + const upload = sysPassApp.util.fileUpload($dropFiles); - upload.url = Common.appActions().ajaxUrl.entrypoint + "?r=" + $dropFiles.data("action-route") + "/" + $dropFiles.data("item-id"); - upload.allowedExts = Common.config().FILES_ALLOWED_EXTS; + upload.url = sysPassApp.actions.ajaxUrl.entrypoint + "?r=" + $dropFiles.data("action-route") + "/" + $dropFiles.data("item-id"); + upload.allowedExts = sysPassApp.config.FILES.ACCOUNT_ALLOWED_EXTS; upload.requestDoneAction = function () { - Common.appActions().account.listFiles($listFiles); + sysPassApp.actions.account.listFiles($listFiles); }; } @@ -425,7 +425,7 @@ sysPass.Triggers = function (Common) { } }); - Common.appActions().items.get($selParentAccount); + sysPassApp.actions.items.get($selParentAccount); } $('.select-box-tags').selectize({ @@ -437,7 +437,7 @@ sysPass.Triggers = function (Common) { onInitialize: function () { const input = this.$input[0]; const attribute = document.createAttribute("data-hash"); - attribute.value = SparkMD5.hash(this.getValue().join(), false); + attribute.value = sysPassApp.util.hash.md5(this.getValue().join()); input.setAttributeNode(attribute); @@ -448,7 +448,7 @@ sysPass.Triggers = function (Common) { onChange: function () { const input = this.$input[0]; const attribute = document.createAttribute("data-updated"); - attribute.value = SparkMD5.hash(this.getValue().join(), false) !== input.dataset.hash && "true"; + attribute.value = sysPassApp.util.hash.md5(this.getValue().join()) !== input.dataset.hash && "true"; input.setAttributeNode(attribute); } @@ -461,7 +461,7 @@ sysPass.Triggers = function (Common) { const $form = $("#frmInstall"); - Common.appTheme().passwordDetect($form); + sysPassApp.theme.passwordDetect($form); selectDetect($form); } }; @@ -474,7 +474,7 @@ sysPass.Triggers = function (Common) { $("#content").find("[data-sk]").each(function () { log.info("updateSk"); - $(this).data("sk", Common.sk.get()); + $(this).data("sk", sysPassApp.sk.get()); }); }; @@ -496,7 +496,7 @@ sysPass.Triggers = function (Common) { $form.each(function () { const $this = $(this); - $this.attr("data-hash", SparkMD5.hash($this.serialize(), false)); + $this.attr("data-hash", sysPassApp.util.hash.md5($this.serialize())); }); } }; diff --git a/public/js/app-triggers.min.js b/public/js/app-triggers.min.js index 4d2495bc..51748491 100644 --- a/public/js/app-triggers.min.js +++ b/public/js/app-triggers.min.js @@ -1,18 +1,19 @@ -var $jscomp={scope:{},findInternal:function(b,d,f){b instanceof String&&(b=String(b));for(var g=b.length,a=0;aform").each(function(){var a= -$(this);a.find("button.btn-clear").on("click",function(b){b.preventDefault();a.trigger("reset")})})},config:function(){d.info("views:config");var a=$("#drop-import-files");if(0form").each(function(){var a=$(this);a.find("button.btn-clear").on("click",function(b){b.preventDefault();a.trigger("reset")})})},config:function(){c.info("views:config");var a=$("#drop-import-files");if(0. */ -sysPass.Util = function (Common) { +sysPass.Util = function (log) { "use strict"; + /** + * @author http://stackoverflow.com/users/24950/robert-k + * @link http://stackoverflow.com/questions/5796718/html-entity-decode + */ + const decodeEntities = function () { + // this prevents any overhead from creating the object each time + const element = document.createElement("div"); + + function decodeHTMLEntities(str) { + if (str && typeof str === "string") { + // strip script/html tags + str = str.replace(/]*>([\S\s]*?)<\/script>/gmi, ""); + str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, ""); + element.innerHTML = str; + str = element.textContent; + element.textContent = ""; + } + + return str; + } + + return decodeHTMLEntities; + }; + + /** + * Resizes an image to viewport size + * + * @param $obj + */ + const resizeImage = function ($obj) { + const viewport = { + width: $(window).width() * 0.90, + height: $(window).height() * 0.90 + }; + + const image = { + width: $obj.width(), + height: $obj.height() + }; + + const dimension = { + calc: 0, + main: 0, + secondary: 0, + factor: 0.90, + rel: image.width / image.height + }; + + /** + * Fits the image aspect ratio + * + * It takes into account the maximum dimension in the opposite axis + * + * @param dimension + * @returns {*} + */ + const adjustRel = function (dimension) { + if (dimension.main > dimension.secondary) { + dimension.calc = dimension.main / dimension.rel; + } else if (dimension.main < dimension.secondary) { + dimension.calc = dimension.main * dimension.rel; + } + + if (dimension.calc > dimension.secondary) { + dimension.main *= dimension.factor; + + adjustRel(dimension); + } + + return dimension; + }; + + /** + * Resize from width + */ + const resizeWidth = function () { + dimension.main = viewport.width; + dimension.secondary = viewport.height; + + const adjust = adjustRel(dimension); + + $obj.css({ + "width": adjust.main, + "height": adjust.calc + }); + + image.width = adjust.main; + image.height = adjust.calc; + }; + + /** + * Resize from height + */ + const resizeHeight = function () { + dimension.main = viewport.height; + dimension.secondary = viewport.width; + + const adjust = adjustRel(dimension); + + $obj.css({ + "width": adjust.calc, + "height": adjust.main + }); + + image.width = adjust.calc; + image.height = adjust.main; + }; + + if (image.width > viewport.width) { + resizeWidth(); + } else if (image.height > viewport.height) { + resizeHeight(); + } + + return image; + }; + + /** + * Function to enable file uploading through a drag&drop or form + * @param $obj + * @returns {{requestDoneAction: string, setRequestData: setRequestData, getRequestData: function(): {actionId: *, itemId: *, sk: *}, beforeSendAction: string, url: string, allowedExts: Array}} + */ + const fileUpload = function ($obj) { + + /** + * Initializes the files form in legacy mode + * + * @param display + * @returns {*} + */ + const initForm = function (display) { + const $form = $("#fileUploadForm"); + + if (display === false) { + $form.hide(); + } + + const $input = $form.find("input[type='file']"); + + $input.on("change", function () { + if (typeof options.beforeSendAction === "function") { + options.beforeSendAction(); + } + + handleFiles(this.files); + }); + + return $input; + }; + + const requestData = { + actionId: $obj.data("action-id"), + itemId: $obj.data("item-id"), + sk: sysPassApp.sk.get() + }; + + const options = { + requestDoneAction: "", + setRequestData: function (data) { + $.extend(requestData, data); + }, + getRequestData: function () { + return requestData; + }, + beforeSendAction: "", + url: "", + allowedExts: [] + }; + + /** + * Uploads a file + * @param file + * @returns {boolean} + */ + const sendFile = function (file) { + if (options.url === undefined || options.url === "") { + return false; + } + + // Objeto FormData para crear datos de un formulario + const fd = new FormData(); + fd.append("inFile", file); + fd.append("isAjax", 1); + + requestData.sk = sysPassApp.sk.get(); + + Object.keys(requestData).forEach(function (key) { + fd.append(key, requestData[key]); + }); + + const opts = sysPassApp.requests.getRequestOpts(); + opts.url = options.url; + opts.processData = false; + opts.contentType = false; + opts.data = fd; + + sysPassApp.requests.getActionCall(opts, function (json) { + const status = json.status; + const description = json.description; + + if (status === 0) { + if (typeof options.requestDoneAction === "function") { + options.requestDoneAction(); + } + + sysPassApp.msg.ok(description); + } else if (status === 10) { + sysPassApp.appActions().main.logout(); + } else { + sysPassApp.msg.error(description); + } + }); + + }; + + const checkFileSize = function (size) { + return (size / 1000 > sysPassApp.config.FILES.MAX_SIZE); + }; + + const checkFileExtension = function (name) { + for (let ext in options.allowedExts) { + if (name.indexOf(options.allowedExts[ext]) !== -1) { + return true; + } + } + + return false; + }; + + /** + * Checks the files and upload them + */ + const handleFiles = function (filesArray) { + if (filesArray.length > 5) { + sysPassApp.msg.error(sysPassApp.config.LANG[17] + " (Max: 5)"); + return; + } + + for (let i = 0; i < filesArray.length; i++) { + const file = filesArray[i]; + if (checkFileSize(file.size)) { + sysPassApp.msg.error(sysPassApp.config.LANG[18] + "
        " + file.name + " (Max: " + sysPassApp.config.FILES.MAX_SIZE + ")"); + } else if (!checkFileExtension(file.name.toUpperCase())) { + sysPassApp.msg.error(sysPassApp.config.LANG[19] + "
        " + file.name); + } else { + sendFile(filesArray[i]); + } + } + }; + + /** + * Initializes the Drag&Drop zone + */ + const init = function () { + log.info("fileUpload:init"); + + const fallback = initForm(false); + + $obj.on("dragover dragenter", function (e) { + log.info("fileUpload:drag"); + + e.stopPropagation(); + e.preventDefault(); + }); + + $obj.on("drop", function (e) { + log.info("fileUpload:drop"); + + e.stopPropagation(); + e.preventDefault(); + + if (typeof options.beforeSendAction === "function") { + options.beforeSendAction(); + } + + handleFiles(e.originalEvent.dataTransfer.files); + }); + + $obj.on("click", function () { + fallback.click(); + }); + }; + + + if (window.File && window.FileList && window.FileReader) { + init(); + } else { + initForm(true); + } + + return options; + }; + + /** + * + * @type {{md5: function(*=): String}} + */ + const hash = { + md5: function (data) { + return SparkMD5.hash(data, false); + } + }; + + /** + * Scrolls to the top of the viewport + */ + const scrollUp = function () { + $("html, body").animate({scrollTop: 0}, "slow"); + }; + + // Función para establecer la altura del contenedor ajax + const setContentSize = function () { + const $container = $("#container"); + + if ($container.hasClass("content-no-auto-resize")) { + return; + } + + //console.info($("#content").height()); + + // Calculate total height for full body resize + $container.css("height", $("#content").height() + 200); + }; + + // Función para obtener el tiempo actual en milisegundos + const getTime = function () { + const t = new Date(); + return t.getTime(); + }; + + /** + * + * @type {{config: {passLength: number, minPasswordLength: number, complexity: {chars: boolean, numbers: boolean, symbols: boolean, uppercase: boolean, numlength: number}}, random: random, output: output, checkLevel: checkLevel}} + */ + const password = { + config: { + passLength: 0, + minPasswordLength: 8, + complexity: { + chars: true, + numbers: true, + symbols: true, + uppercase: true, + numlength: 12 + } + }, + /** + * Function to generate random password and call a callback sending the generated string + * and a zxcvbn object + * + * @param callback + */ + random: function (callback) { + log.info("password:random"); + + let i = 0; + let chars = ""; + let password = ""; + + const getRandomChar = function (min, max) { + return chars.charAt(Math.floor((Math.random() * max) + min)); + }; + + if (this.config.complexity.symbols) { + chars += "!\"\\·@|#$~%&/()=?'¿¡^*[]·;,_-{}<>"; + } + + if (this.config.complexity.numbers) { + chars += "1234567890"; + } + + if (this.config.complexity.chars) { + chars += "abcdefghijklmnopqrstuvwxyz"; + + if (this.config.complexity.uppercase) { + chars += String("abcdefghijklmnopqrstuvwxyz").toUpperCase(); + } + } + + for (; i++ < this.config.complexity.numlength;) { + password += getRandomChar(0, chars.length - 1); + } + + this.config.passLength = password.length; + + if (typeof callback === "function") { + callback(password, zxcvbn(password)); + } + }, + output: function (level, $target) { + log.info("password:outputResult"); + + const $passLevel = $("#password-level-" + $target.attr("id")); + const score = level.score; + + $passLevel.removeClass("weak good strong strongest"); + + if (this.config.passLength === 0) { + $passLevel.attr("data-level-msg", ""); + } else if (this.config.passLength < this.config.minPasswordLength) { + $passLevel.attr("data-level-msg", sysPassApp.config.LANG[11]).addClass("weak"); + } else if (score === 0) { + $passLevel.attr("data-level-msg", sysPassApp.config.LANG[9] + " - " + level.feedback.warning).addClass("weak"); + } else if (score === 1 || score === 2) { + $passLevel.attr("data-level-msg", sysPassApp.config.LANG[8] + " - " + level.feedback.warning).addClass("good"); + } else if (score === 3) { + $passLevel.attr("data-level-msg", sysPassApp.config.LANG[7]).addClass("strong"); + } else if (score === 4) { + $passLevel.attr("data-level-msg", sysPassApp.config.LANG[10]).addClass("strongest"); + } + }, + checkLevel: function ($target) { + log.info("password:checkPassLevel"); + + this.config.passLength = $target.val().length; + + password.output(zxcvbn($target.val()), $target); + } + }; + + /** + * Redirect to a given URL + * + * @param url + */ + const redirect = function (url) { + window.location.replace(url); + }; + + /** + * @see https://stackoverflow.com/questions/3231459/create-unique-id-with-javascript + * @returns {string} + */ + const uniqueId = function () { + // always start with a letter (for DOM friendlyness) + let idstr = String.fromCharCode(Math.floor((Math.random() * 25) + 65)); + + do { + // between numbers and characters (48 is 0 and 90 is Z (42-48 = 90) + const ascicode = Math.floor((Math.random() * 42) + 48); + if (ascicode < 58 || ascicode > 64) { + // exclude all chars between : (58) and @ (64) + idstr += String.fromCharCode(ascicode); + } + } while (idstr.length < 32); + + return idstr.toLowerCase(); + }; + + return { + decodeEntities: decodeEntities, + resizeImage: resizeImage, + fileUpload: fileUpload, + scrollUp: scrollUp, + setContentSize: setContentSize, + redirect: redirect, + uniqueId: uniqueId, + password: password, + hash: hash + }; }; \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index 3b179368..f1b77176 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -58,6 +58,7 @@ sysPass.createNS = function (namespace) { return parent; }; +sysPass.createNS("Config"); sysPass.createNS("Main"); sysPass.createNS("Triggers"); sysPass.createNS("Actions"); diff --git a/public/js/app.min.js b/public/js/app.min.js index 0a7fb951..75f737c3 100644 --- a/public/js/app.min.js +++ b/public/js/app.min.js @@ -1 +1 @@ -var sysPass={createNS:function(a){a=a.split(".");var b=sysPass;"sysPass"===a[0]&&(a=a.slice(1));for(var c=0;ccryptPki->encryptRSA($random); @@ -59,7 +61,38 @@ class CryptPKITest extends TestCase } /** - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException + */ + public function testDecryptRSAPassword() + { + $length = (CryptPKI::KEY_SIZE / 8) - 11; + + $random = Util::randomPassword($length); + + $data = $this->cryptPki->encryptRSA($random); + + $this->assertNotEmpty($data); + + $this->assertEquals($random, $this->cryptPki->decryptRSA($data)); + } + + /** + * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException + * @throws \SP\Storage\File\FileException + */ + public function testDecryptRSAWrongLength() + { + $length = ((CryptPKI::KEY_SIZE / 8) - 11) + 1; + + $random = Util::generateRandomBytes($length); + + $data = $this->cryptPki->encryptRSA($random); + + $this->assertEquals($random, $this->cryptPki->decryptRSA($data)); + } + + /** + * @throws \SP\Storage\File\FileException */ public function testGetPublicKey() { @@ -71,7 +104,7 @@ class CryptPKITest extends TestCase } /** - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException */ public function testGetPrivateKey() { @@ -84,11 +117,13 @@ class CryptPKITest extends TestCase /** * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException - * @throws \SP\Core\Exceptions\FileNotFoundException + * @throws \SP\Storage\File\FileException */ public function testEncryptRSA() { - $random = Util::generateRandomBytes(); + $length = (CryptPKI::KEY_SIZE / 8) - 11; + + $random = Util::generateRandomBytes($length); $data = $this->cryptPki->encryptRSA($random); @@ -113,16 +148,16 @@ class CryptPKITest extends TestCase { $this->cryptPki->createKeys(); - $this->assertFileExists($this->cryptPki->getPublicKeyFile()); - $this->assertFileExists($this->cryptPki->getPrivateKeyFile()); + $this->assertFileExists(CryptPKI::PUBLIC_KEY_FILE); + $this->assertFileExists(CryptPKI::PRIVATE_KEY_FILE); } /** - * testCheckKeys + * @throws \SP\Storage\File\FileException */ - public function testCheckKeys() + public function testGetKeySize() { - $this->assertTrue($this->cryptPki->checkKeys()); + $this->assertEquals(CryptPKI::KEY_SIZE, $this->cryptPki->getKeySize()); } /** @@ -142,8 +177,8 @@ class CryptPKITest extends TestCase */ protected function tearDown() { - unlink($this->cryptPki->getPublicKeyFile()); - unlink($this->cryptPki->getPrivateKeyFile()); + unlink(CryptPKI::PUBLIC_KEY_FILE); + unlink(CryptPKI::PRIVATE_KEY_FILE); }