* [MOD] Improved plugins management

* [MOD] Code refactoring

Signed-off-by: nuxsmin <nuxsmin@syspass.org>
This commit is contained in:
nuxsmin
2018-10-15 02:56:00 +02:00
parent 6b6d4a0f23
commit 7f2dd35059
47 changed files with 1245 additions and 681 deletions

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-12 00:42+0200\n"
"PO-Revision-Date: 2018-10-12 00:42+0200\n"
"POT-Creation-Date: 2018-10-15 02:52+0200\n"
"PO-Revision-Date: 2018-10-15 02:55+0200\n"
"Last-Translator: nuxsmin <nuxsmin@syspass.org>\n"
"Language-Team: nuxsmin@syspass.org\n"
"Language: en_GB\n"
@@ -25,12 +25,12 @@ msgstr ""
"X-Poedit-SearchPath-1: ../../../../lib\n"
"X-Poedit-SearchPath-2: ../../../config\n"
#: ../../../../lib/SP/Bootstrap.php:267
#: ../../../../lib/SP/Bootstrap.php:278
#, php-format
msgid "Versión de PHP requerida >= %s <= %s"
msgstr "Required PHP version >= %s <= %s"
#: ../../../../lib/SP/Bootstrap.php:269
#: ../../../../lib/SP/Bootstrap.php:280
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr "Please update the PHP version to run sysPass"
@@ -53,7 +53,7 @@ msgid "Actual: %s - Necesario: 750"
msgstr "Current: %s - Needed: 750"
#: ../../../../lib/SP/Core/Acl/AccountPermissionException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:132
#: ../../../../lib/SP/Util/ErrorUtil.php:142
#: ../../../modules/web/Controllers/Helpers/Account/AccountPasswordHelper.php:96
msgid "No tiene permisos para acceder a esta cuenta"
msgstr "You don't have permission to access to this account"
@@ -61,12 +61,12 @@ msgstr "You don't have permission to access to this account"
#: ../../../../lib/SP/Core/Acl/AccountPermissionException.php:45
#: ../../../../lib/SP/Core/Acl/UnauthorizedActionException.php:46
#: ../../../../lib/SP/Core/Acl/UnauthorizedPageException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:129
#: ../../../../lib/SP/Util/ErrorUtil.php:133
#: ../../../../lib/SP/Util/ErrorUtil.php:137
#: ../../../../lib/SP/Util/ErrorUtil.php:141
#: ../../../../lib/SP/Util/ErrorUtil.php:149
#: ../../../../lib/SP/Util/ErrorUtil.php:156
#: ../../../../lib/SP/Util/ErrorUtil.php:139
#: ../../../../lib/SP/Util/ErrorUtil.php:143
#: ../../../../lib/SP/Util/ErrorUtil.php:147
#: ../../../../lib/SP/Util/ErrorUtil.php:151
#: ../../../../lib/SP/Util/ErrorUtil.php:159
#: ../../../../lib/SP/Util/ErrorUtil.php:166
#: ../../../modules/web/Controllers/ErrorController.php:124
#: ../../../modules/web/Controllers/UserPassResetController.php:94
#: ../../../modules/web/themes/material-blue/views/upgrade/index.inc:13
@@ -75,7 +75,7 @@ msgstr "Please contact to the administrator"
# Not available
#: ../../../../lib/SP/Core/Acl/Acl.php:294
#: ../../../../lib/SP/Services/Auth/LoginService.php:600
#: ../../../../lib/SP/Services/Auth/LoginService.php:604
msgid "N/D"
msgstr "N/A"
@@ -96,24 +96,24 @@ msgstr "Action"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapMsAds.php:155
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:110
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:142
#: ../../../../lib/SP/Services/Auth/LoginService.php:217
#: ../../../../lib/SP/Services/Auth/LoginService.php:235
#: ../../../../lib/SP/Services/Auth/LoginService.php:386
#: ../../../../lib/SP/Services/Auth/LoginService.php:453
#: ../../../../lib/SP/Services/Auth/LoginService.php:561
#: ../../../../lib/SP/Services/Auth/LoginService.php:604
#: ../../../../lib/SP/Services/Auth/LoginService.php:220
#: ../../../../lib/SP/Services/Auth/LoginService.php:238
#: ../../../../lib/SP/Services/Auth/LoginService.php:390
#: ../../../../lib/SP/Services/Auth/LoginService.php:457
#: ../../../../lib/SP/Services/Auth/LoginService.php:565
#: ../../../../lib/SP/Services/Auth/LoginService.php:608
#: ../../../../lib/SP/Services/Ldap/LdapImportService.php:238
#: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:253
#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:106
#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:107
#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:111
#: ../../../modules/web/Controllers/Helpers/Grid/TrackGrid.php:105
#: ../../../modules/web/Controllers/LoginController.php:102
#: ../../../modules/web/Controllers/LoginController.php:120
#: ../../../modules/web/Controllers/UserController.php:278
#: ../../../modules/web/Controllers/UserController.php:312
#: ../../../modules/web/Controllers/UserController.php:373
#: ../../../modules/web/Controllers/UserController.php:412
#: ../../../modules/web/Controllers/UserPassResetController.php:187
#: ../../../modules/web/Controllers/UserPassResetController.php:190
#: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:55
#: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:61
#: ../../../modules/web/themes/material-blue/views/account/account-history.inc:91
@@ -151,7 +151,7 @@ msgid "Acción no encontrada"
msgstr "Action not found"
#: ../../../../lib/SP/Core/Acl/UnauthorizedActionException.php:46
#: ../../../../lib/SP/Util/ErrorUtil.php:140
#: ../../../../lib/SP/Util/ErrorUtil.php:150
#: ../../../modules/web/Controllers/AccountFileController.php:261
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:59
#: ../../../modules/web/Controllers/AccountManagerController.php:77
@@ -200,8 +200,8 @@ msgstr "Action not found"
#: ../../../modules/web/Controllers/NotificationController.php:288
#: ../../../modules/web/Controllers/NotificationController.php:315
#: ../../../modules/web/Controllers/NotificationController.php:348
#: ../../../modules/web/Controllers/PluginController.php:98
#: ../../../modules/web/Controllers/PluginController.php:117
#: ../../../modules/web/Controllers/PluginController.php:103
#: ../../../modules/web/Controllers/PluginController.php:122
#: ../../../modules/web/Controllers/PublicLinkController.php:71
#: ../../../modules/web/Controllers/PublicLinkController.php:105
#: ../../../modules/web/Controllers/PublicLinkController.php:167
@@ -244,7 +244,7 @@ msgid "No tiene permisos para realizar esta operación"
msgstr "You don't have permission to do this operation"
#: ../../../../lib/SP/Core/Acl/UnauthorizedPageException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:136
#: ../../../../lib/SP/Util/ErrorUtil.php:146
msgid "No tiene permisos para acceder a esta página"
msgstr "You don't have permission to access this page"
@@ -280,14 +280,14 @@ msgstr "Session cannot be initialized"
#: ../../../../lib/SP/Services/Account/AccountService.php:227
#: ../../../../lib/SP/Services/Account/AccountService.php:232
#: ../../../../lib/SP/Services/Api/ApiService.php:129
#: ../../../../lib/SP/Services/Api/ApiService.php:227
#: ../../../../lib/SP/Services/Api/ApiService.php:235
#: ../../../../lib/SP/Services/Auth/LoginService.php:187
#: ../../../../lib/SP/Services/Auth/LoginService.php:351
#: ../../../../lib/SP/Services/Auth/LoginService.php:500
#: ../../../../lib/SP/Services/Auth/LoginService.php:505
#: ../../../../lib/SP/Services/Auth/LoginService.php:537
#: ../../../../lib/SP/Services/Auth/LoginService.php:644
#: ../../../../lib/SP/Services/Api/ApiService.php:229
#: ../../../../lib/SP/Services/Api/ApiService.php:237
#: ../../../../lib/SP/Services/Auth/LoginService.php:190
#: ../../../../lib/SP/Services/Auth/LoginService.php:354
#: ../../../../lib/SP/Services/Auth/LoginService.php:504
#: ../../../../lib/SP/Services/Auth/LoginService.php:509
#: ../../../../lib/SP/Services/Auth/LoginService.php:541
#: ../../../../lib/SP/Services/Auth/LoginService.php:648
#: ../../../../lib/SP/Services/AuthToken/AuthTokenService.php:311
#: ../../../../lib/SP/Services/CustomField/CustomFieldService.php:203
#: ../../../../lib/SP/Services/Export/XmlVerifyService.php:108
@@ -306,7 +306,7 @@ msgstr "Crypto module cannot be loaded"
msgid "Error al generar datos cifrados"
msgstr "Error while creating the encrypted data"
#: ../../../../lib/SP/Core/Events/Event.php:56
#: ../../../../lib/SP/Core/Events/Event.php:57
msgid "Es necesario un objeto"
msgstr "An object is needed"
@@ -320,17 +320,17 @@ msgstr "Invalid icons class"
#: ../../../../lib/SP/DataModel/PublicLinkListData.php:88
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapConnection.php:190
#: ../../../modules/web/Controllers/AccountController.php:227
#: ../../../modules/web/Controllers/AccountController.php:226
msgid "ON"
msgstr "ON"
#: ../../../../lib/SP/DataModel/PublicLinkListData.php:88
#: ../../../modules/web/Controllers/AccountController.php:227
#: ../../../modules/web/Controllers/AccountController.php:226
msgid "OFF"
msgstr "OFF"
#: ../../../../lib/SP/Html/DataGrid/DataGridBase.php:303
#: ../../../../lib/SP/Mvc/View/Template.php:122
#: ../../../../lib/SP/Mvc/View/Template.php:126
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "Unable to retrieve the \"%s\" template: %s"
@@ -352,11 +352,11 @@ msgstr "Encoding error"
msgid "Respuesta XML-RPC inválida"
msgstr "Invalid XML-RPC response"
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:64
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:71
msgid "La sesión no se ha iniciado o ha caducado"
msgstr "Session not started or timed out"
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:114
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:124
msgid "Acción Inválida"
msgstr "Invalid Action"
@@ -398,41 +398,69 @@ msgstr "Invalid filter type"
msgid "Tipo de objeto incorrecto"
msgstr "Wrong object type"
#: ../../../../lib/SP/Mvc/View/Template.php:274
#: ../../../../lib/SP/Mvc/View/Template.php:276
#: ../../../../lib/SP/Mvc/View/Template.php:278
#: ../../../../lib/SP/Mvc/View/Template.php:280
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "Unable to retrieve the \"%s\" variable"
#: ../../../../lib/SP/Mvc/View/Template.php:322
#: ../../../../lib/SP/Mvc/View/Template.php:324
#: ../../../../lib/SP/Mvc/View/Template.php:326
#: ../../../../lib/SP/Mvc/View/Template.php:328
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "Unable to unset the \"%s\" variable"
#: ../../../../lib/SP/Mvc/View/Template.php:341
#: ../../../../lib/SP/Mvc/View/Template.php:345
msgid "La plantilla no contiene archivos"
msgstr "Template does not contain files"
#: ../../../../lib/SP/Plugin/PluginManager.php:113
#: ../../../../lib/SP/Plugin/PluginManager.php:256
#: ../../../../lib/SP/Plugin/PluginManager.php:170
#, php-format
msgid "Versión de plugin no compatible (%s)"
msgstr "Plugin version not compatible (%s)"
#: ../../../../lib/SP/Plugin/PluginManager.php:192
#, php-format
msgid "No es posible cargar el plugin \"%s\""
msgstr "Unable to load the \"%s\" plugin"
#: ../../../../lib/SP/Plugin/PluginManager.php:194
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:101
msgid "Plugin"
msgstr "Plugin"
#: ../../../../lib/SP/Plugin/PluginManager.php:219
#: ../../../../lib/SP/Plugin/PluginManager.php:339
#: ../../../modules/web/Controllers/PluginController.php:213
#: ../../../modules/web/Controllers/PluginController.php:216
msgid "Plugin deshabilitado"
msgstr "Plugin disabled"
#: ../../../../lib/SP/Plugin/PluginManager.php:254
msgid "Plugin disponible"
msgstr "Plugin available"
#: ../../../../lib/SP/Plugin/PluginManager.php:264
msgid "Plugin no disponible"
msgstr "Plugin unavailable"
#: ../../../../lib/SP/Plugin/PluginManager.php:294
msgid "Plugin cargado"
msgstr "Plugin loaded"
#. (itstool) path: action/text
#: ../../../../lib/SP/Plugin/PluginManager.php:245
#: ../../../../lib/SP/Plugin/PluginManager.php:319
#: ../../../config/actions.xml:535
msgid "Nuevo Plugin"
msgstr "New Plugin"
#: ../../../../lib/SP/Plugin/PluginManager.php:246
#: ../../../../lib/SP/Plugin/PluginManager.php:320
#: ../../../modules/api/Controllers/AccountController.php:71
#: ../../../modules/api/Controllers/AccountController.php:103
#: ../../../modules/api/Controllers/AccountController.php:139
#: ../../../modules/api/Controllers/AccountController.php:185
#: ../../../modules/api/Controllers/AccountController.php:235
#: ../../../modules/api/Controllers/AccountController.php:310
#: ../../../modules/api/Controllers/AccountController.php:189
#: ../../../modules/api/Controllers/AccountController.php:240
#: ../../../modules/api/Controllers/AccountController.php:315
#: ../../../modules/api/Controllers/CategoryController.php:63
#: ../../../modules/api/Controllers/CategoryController.php:92
#: ../../../modules/api/Controllers/CategoryController.php:122
@@ -490,7 +518,7 @@ msgid "Método ya inicializado"
msgstr "Method already initialized"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:119
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:125
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:126
msgid "Error al buscar RDN de grupo"
msgstr "Error while searching the group RDN"
@@ -518,13 +546,13 @@ msgstr "Error while searching the group RDN"
msgid "Grupo"
msgstr "Group"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:200
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:204
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:205
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:210
msgid "Error al localizar el usuario en LDAP"
msgstr "Error while searching the user on LDAP"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:249
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:254
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:259
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:265
msgid "Error al buscar objetos en DN base"
msgstr "Error while searching objects in base DN"
@@ -594,7 +622,7 @@ msgid "No es posible inicializar"
msgstr "Unable to initialize"
#: ../../../../lib/SP/Providers/Notification/NotificationHandler.php:124
#: ../../../modules/web/Controllers/AccountController.php:926
#: ../../../modules/web/Controllers/AccountController.php:925
msgid "Solicitud"
msgstr "Request"
@@ -1121,7 +1149,7 @@ msgstr "The account doesn't exist"
#: ../../../../lib/SP/Services/Api/ApiRequest.php:79
#: ../../../../lib/SP/Services/Api/ApiRequest.php:113
#: ../../../../lib/SP/Services/Api/ApiService.php:229
#: ../../../../lib/SP/Services/Api/ApiService.php:231
msgid "Datos inválidos"
msgstr "Invalid data"
@@ -1130,7 +1158,7 @@ msgid "Fomato incorrecto"
msgstr "Invalid format"
#: ../../../../lib/SP/Services/Api/ApiService.php:96
#: ../../../../lib/SP/Services/Auth/LoginService.php:137
#: ../../../../lib/SP/Services/Auth/LoginService.php:138
#: ../../../../lib/SP/Services/UserPassRecover/UserPassRecoverService.php:103
#: ../../../modules/web/Controllers/UserPassResetController.php:124
msgid "Intentos excedidos"
@@ -1145,54 +1173,54 @@ msgstr "Wrong parameters"
msgid "Acceso no permitido"
msgstr "Unauthorized access"
#: ../../../../lib/SP/Services/Auth/LoginService.php:157
#: ../../../../lib/SP/Services/Auth/LoginService.php:456
#: ../../../../lib/SP/Services/Auth/LoginService.php:463
#: ../../../../lib/SP/Services/Auth/LoginService.php:571
#: ../../../../lib/SP/Services/Auth/LoginService.php:576
#: ../../../../lib/SP/Services/Auth/LoginService.php:615
#: ../../../../lib/SP/Services/Auth/LoginService.php:620
#: ../../../../lib/SP/Services/Auth/LoginService.php:160
#: ../../../../lib/SP/Services/Auth/LoginService.php:460
#: ../../../../lib/SP/Services/Auth/LoginService.php:467
#: ../../../../lib/SP/Services/Auth/LoginService.php:575
#: ../../../../lib/SP/Services/Auth/LoginService.php:580
#: ../../../../lib/SP/Services/Auth/LoginService.php:619
#: ../../../../lib/SP/Services/Auth/LoginService.php:624
msgid "Login incorrecto"
msgstr "Wrong login"
#: ../../../../lib/SP/Services/Auth/LoginService.php:216
#: ../../../../lib/SP/Services/Auth/LoginService.php:223
#: ../../../../lib/SP/Services/Auth/LoginService.php:219
#: ../../../../lib/SP/Services/Auth/LoginService.php:226
msgid "Usuario deshabilitado"
msgstr "User disabled"
#: ../../../../lib/SP/Services/Auth/LoginService.php:270
#: ../../../../lib/SP/Services/Auth/LoginService.php:273
msgid "Usando clave temporal"
msgstr "Using temporary password"
#: ../../../../lib/SP/Services/Auth/LoginService.php:282
#: ../../../../lib/SP/Services/Auth/LoginService.php:288
#: ../../../../lib/SP/Services/Auth/LoginService.php:306
#: ../../../../lib/SP/Services/Auth/LoginService.php:312
#: ../../../../lib/SP/Services/Auth/LoginService.php:285
#: ../../../../lib/SP/Services/Auth/LoginService.php:291
#: ../../../../lib/SP/Services/Auth/LoginService.php:309
#: ../../../../lib/SP/Services/Auth/LoginService.php:315
msgid "Clave maestra incorrecta"
msgstr "Wrong master password"
#: ../../../../lib/SP/Services/Auth/LoginService.php:297
#: ../../../../lib/SP/Services/Auth/LoginService.php:321
#: ../../../../lib/SP/Services/Auth/LoginService.php:300
#: ../../../../lib/SP/Services/Auth/LoginService.php:324
#: ../../../../lib/SP/Services/User/UpdatedMasterPassException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:144
#: ../../../../lib/SP/Util/ErrorUtil.php:154
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:68
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:142
#: ../../../modules/web/Controllers/Helpers/Account/AccountPasswordHelper.php:116
msgid "Clave maestra actualizada"
msgstr "Master password updated"
#: ../../../../lib/SP/Services/Auth/LoginService.php:327
#: ../../../../lib/SP/Services/Auth/LoginService.php:330
msgid "Es necesaria su clave anterior"
msgstr "Your previous password is needed"
#: ../../../../lib/SP/Services/Auth/LoginService.php:339
#: ../../../../lib/SP/Services/Auth/LoginService.php:342
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "The Master Password either is not saved or is wrong"
#: ../../../../lib/SP/Services/Auth/LoginService.php:451
#: ../../../../lib/SP/Services/Auth/LoginService.php:514
#: ../../../../lib/SP/Services/Auth/LoginService.php:560
#: ../../../../lib/SP/Services/Auth/LoginService.php:603
#: ../../../../lib/SP/Services/Auth/LoginService.php:455
#: ../../../../lib/SP/Services/Auth/LoginService.php:518
#: ../../../../lib/SP/Services/Auth/LoginService.php:564
#: ../../../../lib/SP/Services/Auth/LoginService.php:607
#: ../../../modules/web/Controllers/AccountFileController.php:235
#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:108
#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:108
@@ -1207,22 +1235,22 @@ msgstr "The Master Password either is not saved or is wrong"
msgid "Tipo"
msgstr "Type"
#: ../../../../lib/SP/Services/Auth/LoginService.php:452
#: ../../../../lib/SP/Services/Auth/LoginService.php:515
#: ../../../../lib/SP/Services/Auth/LoginService.php:456
#: ../../../../lib/SP/Services/Auth/LoginService.php:519
msgid "Servidor LDAP"
msgstr "LDAP Server"
#: ../../../../lib/SP/Services/Auth/LoginService.php:471
#: ../../../../lib/SP/Services/Auth/LoginService.php:476
#: ../../../../lib/SP/Services/Auth/LoginService.php:475
#: ../../../../lib/SP/Services/Auth/LoginService.php:480
msgid "Cuenta expirada"
msgstr "Account expired"
#: ../../../../lib/SP/Services/Auth/LoginService.php:484
#: ../../../../lib/SP/Services/Auth/LoginService.php:489
#: ../../../../lib/SP/Services/Auth/LoginService.php:488
#: ../../../../lib/SP/Services/Auth/LoginService.php:493
msgid "El usuario no tiene grupos asociados"
msgstr "The user has no associated groups"
#: ../../../../lib/SP/Services/Auth/LoginService.php:605
#: ../../../../lib/SP/Services/Auth/LoginService.php:609
#: ../../../modules/web/themes/material-blue/views/config/general-auth.inc:10
msgid "Autentificación"
msgstr "Authentication"
@@ -1503,16 +1531,16 @@ msgstr "Account imported"
#: ../../../modules/api/Controllers/AccountController.php:72
#: ../../../modules/api/Controllers/AccountController.php:104
#: ../../../modules/api/Controllers/AccountController.php:140
#: ../../../modules/api/Controllers/AccountController.php:186
#: ../../../modules/api/Controllers/AccountController.php:236
#: ../../../modules/api/Controllers/AccountController.php:311
#: ../../../modules/web/Controllers/AccountController.php:225
#: ../../../modules/web/Controllers/AccountController.php:720
#: ../../../modules/web/Controllers/AccountController.php:765
#: ../../../modules/web/Controllers/AccountController.php:806
#: ../../../modules/web/Controllers/AccountController.php:845
#: ../../../modules/web/Controllers/AccountController.php:895
#: ../../../modules/web/Controllers/AccountController.php:929
#: ../../../modules/api/Controllers/AccountController.php:190
#: ../../../modules/api/Controllers/AccountController.php:241
#: ../../../modules/api/Controllers/AccountController.php:316
#: ../../../modules/web/Controllers/AccountController.php:224
#: ../../../modules/web/Controllers/AccountController.php:719
#: ../../../modules/web/Controllers/AccountController.php:764
#: ../../../modules/web/Controllers/AccountController.php:805
#: ../../../modules/web/Controllers/AccountController.php:844
#: ../../../modules/web/Controllers/AccountController.php:894
#: ../../../modules/web/Controllers/AccountController.php:928
#: ../../../modules/web/Controllers/AccountFileController.php:234
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:112
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:147
@@ -2119,7 +2147,7 @@ msgid "Enlace"
msgstr "Link"
#: ../../../../lib/SP/Services/User/UpdatedMasterPassException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:145
#: ../../../../lib/SP/Util/ErrorUtil.php:155
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:68
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:142
#: ../../../modules/web/Controllers/Helpers/Account/AccountPasswordHelper.php:116
@@ -2286,12 +2314,12 @@ msgstr "Socket not initialized"
msgid "Error al enviar datos"
msgstr "Error while sending the data"
#: ../../../../lib/SP/Util/ErrorUtil.php:128
#: ../../../../lib/SP/Util/ErrorUtil.php:138
msgid "Opción no disponible"
msgstr "Option unavailable"
#: ../../../../lib/SP/Util/ErrorUtil.php:148
#: ../../../../lib/SP/Util/ErrorUtil.php:155
#: ../../../../lib/SP/Util/ErrorUtil.php:158
#: ../../../../lib/SP/Util/ErrorUtil.php:165
msgid "Se ha producido una excepción"
msgstr "An exception occured"
@@ -2304,40 +2332,40 @@ msgid "Cuenta visualizada"
msgstr "Account displayed"
#: ../../../modules/api/Controllers/AccountController.php:102
#: ../../../modules/web/Controllers/AccountController.php:554
#: ../../../modules/web/Controllers/AccountController.php:610
#: ../../../modules/web/Controllers/AccountController.php:553
#: ../../../modules/web/Controllers/AccountController.php:609
msgid "Clave visualizada"
msgstr "Password viewed"
#: ../../../modules/api/Controllers/AccountController.php:138
#: ../../../modules/api/Controllers/AccountController.php:144
#: ../../../modules/web/Controllers/AccountController.php:804
#: ../../../modules/web/Controllers/AccountController.php:815
#: ../../../modules/web/Controllers/AccountController.php:803
#: ../../../modules/web/Controllers/AccountController.php:814
#: ../../../modules/web/Controllers/UserController.php:411
#: ../../../modules/web/Controllers/UserController.php:415
#: ../../../modules/web/Controllers/UserPassResetController.php:186
#: ../../../modules/web/Controllers/UserPassResetController.php:190
#: ../../../modules/web/Controllers/UserPassResetController.php:189
#: ../../../modules/web/Controllers/UserPassResetController.php:193
msgid "Clave actualizada"
msgstr "Password updated"
#: ../../../modules/api/Controllers/AccountController.php:184
#: ../../../modules/api/Controllers/AccountController.php:190
#: ../../../modules/web/Controllers/AccountController.php:718
#: ../../../modules/web/Controllers/AccountController.php:729
#: ../../../modules/api/Controllers/AccountController.php:188
#: ../../../modules/api/Controllers/AccountController.php:194
#: ../../../modules/web/Controllers/AccountController.php:717
#: ../../../modules/web/Controllers/AccountController.php:728
msgid "Cuenta creada"
msgstr "Account added"
#: ../../../modules/api/Controllers/AccountController.php:234
#: ../../../modules/api/Controllers/AccountController.php:240
#: ../../../modules/web/Controllers/AccountController.php:763
#: ../../../modules/web/Controllers/AccountController.php:774
#: ../../../modules/api/Controllers/AccountController.php:239
#: ../../../modules/api/Controllers/AccountController.php:245
#: ../../../modules/web/Controllers/AccountController.php:762
#: ../../../modules/web/Controllers/AccountController.php:773
msgid "Cuenta actualizada"
msgstr "Account updated"
#: ../../../modules/api/Controllers/AccountController.php:309
#: ../../../modules/api/Controllers/AccountController.php:315
#: ../../../modules/web/Controllers/AccountController.php:893
#: ../../../modules/web/Controllers/AccountController.php:898
#: ../../../modules/api/Controllers/AccountController.php:314
#: ../../../modules/api/Controllers/AccountController.php:320
#: ../../../modules/web/Controllers/AccountController.php:892
#: ../../../modules/web/Controllers/AccountController.php:897
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:110
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:115
#: ../../../modules/web/Controllers/AccountManagerController.php:145
@@ -2709,9 +2737,9 @@ msgstr "Group deleted"
msgid "Es necesario actualizar"
msgstr "Updating needed"
#: ../../../modules/web/Controllers/AccountController.php:149
#: ../../../modules/web/Controllers/AccountController.php:204
#: ../../../modules/web/Controllers/AccountController.php:474
#: ../../../modules/web/Controllers/AccountController.php:148
#: ../../../modules/web/Controllers/AccountController.php:203
#: ../../../modules/web/Controllers/AccountController.php:473
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:60
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:61
#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:159
@@ -2721,21 +2749,21 @@ msgstr "Updating needed"
msgid "Detalles de Cuenta"
msgstr "Account Details"
#: ../../../modules/web/Controllers/AccountController.php:223
#: ../../../modules/web/Controllers/AccountController.php:222
msgid "Enlace visualizado"
msgstr "Link viewed"
#: ../../../modules/web/Controllers/AccountController.php:224
#: ../../../modules/web/Controllers/AccountController.php:555
#: ../../../modules/web/Controllers/AccountController.php:611
#: ../../../modules/web/Controllers/AccountController.php:650
#: ../../../modules/web/Controllers/AccountController.php:684
#: ../../../modules/web/Controllers/AccountController.php:719
#: ../../../modules/web/Controllers/AccountController.php:764
#: ../../../modules/web/Controllers/AccountController.php:805
#: ../../../modules/web/Controllers/AccountController.php:844
#: ../../../modules/web/Controllers/AccountController.php:894
#: ../../../modules/web/Controllers/AccountController.php:928
#: ../../../modules/web/Controllers/AccountController.php:223
#: ../../../modules/web/Controllers/AccountController.php:554
#: ../../../modules/web/Controllers/AccountController.php:610
#: ../../../modules/web/Controllers/AccountController.php:649
#: ../../../modules/web/Controllers/AccountController.php:683
#: ../../../modules/web/Controllers/AccountController.php:718
#: ../../../modules/web/Controllers/AccountController.php:763
#: ../../../modules/web/Controllers/AccountController.php:804
#: ../../../modules/web/Controllers/AccountController.php:843
#: ../../../modules/web/Controllers/AccountController.php:893
#: ../../../modules/web/Controllers/AccountController.php:927
#: ../../../modules/web/Controllers/AccountFileController.php:233
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:111
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:146
@@ -2749,24 +2777,24 @@ msgstr "Link viewed"
msgid "Cuenta"
msgstr "Account"
#: ../../../modules/web/Controllers/AccountController.php:226
#: ../../../modules/web/Controllers/AccountController.php:225
msgid "Agente"
msgstr "Agent"
#: ../../../modules/web/Controllers/AccountController.php:227
#: ../../../modules/web/Controllers/AccountController.php:226
msgid "HTTPS"
msgstr "HTTPS"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/AccountController.php:256
#: ../../../modules/web/Controllers/AccountController.php:300
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:278
#: ../../../modules/web/Controllers/AccountController.php:255
#: ../../../modules/web/Controllers/AccountController.php:299
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:280
#: ../../../config/actions.xml:157
msgid "Nueva Cuenta"
msgstr "New Account"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/AccountController.php:344
#: ../../../modules/web/Controllers/AccountController.php:343
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:176
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:177
#: ../../../modules/web/themes/material-blue/views/account/linkedAccounts.inc:18
@@ -2775,7 +2803,7 @@ msgid "Editar Cuenta"
msgstr "Edit Account"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/AccountController.php:389
#: ../../../modules/web/Controllers/AccountController.php:388
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:334
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:335
#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:176
@@ -2787,26 +2815,26 @@ msgstr "Edit Account"
msgid "Eliminar Cuenta"
msgstr "Remove Account"
#: ../../../modules/web/Controllers/AccountController.php:432
#: ../../../modules/web/Controllers/AccountController.php:431
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:155
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:156
msgid "Modificar Clave de Cuenta"
msgstr "Edit Account Password"
#: ../../../modules/web/Controllers/AccountController.php:649
#: ../../../modules/web/Controllers/AccountController.php:683
#: ../../../modules/web/Controllers/AccountController.php:648
#: ../../../modules/web/Controllers/AccountController.php:682
msgid "Clave copiada"
msgstr "Password copied"
#: ../../../modules/web/Controllers/AccountController.php:843
#: ../../../modules/web/Controllers/AccountController.php:854
#: ../../../modules/web/Controllers/AccountController.php:842
#: ../../../modules/web/Controllers/AccountController.php:853
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:145
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:150
msgid "Cuenta restaurada"
msgstr "Account restored"
#: ../../../modules/web/Controllers/AccountController.php:879
#: ../../../modules/web/Controllers/AccountController.php:882
#: ../../../modules/web/Controllers/AccountController.php:878
#: ../../../modules/web/Controllers/AccountController.php:881
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:99
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:102
#: ../../../modules/web/Controllers/AccountManagerController.php:131
@@ -2814,16 +2842,16 @@ msgstr "Account restored"
msgid "Cuentas eliminadas"
msgstr "Accounts removed"
#: ../../../modules/web/Controllers/AccountController.php:919
#: ../../../modules/web/Controllers/AccountController.php:918
#: ../../../modules/web/Forms/NotificationForm.php:100
msgid "Es necesaria una descripción"
msgstr "A description is needed"
#: ../../../modules/web/Controllers/AccountController.php:927
#: ../../../modules/web/Controllers/AccountController.php:926
msgid "Solicitante"
msgstr "Requester"
#: ../../../modules/web/Controllers/AccountController.php:930
#: ../../../modules/web/Controllers/AccountController.php:929
#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:106
#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:105
#: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:105
@@ -2837,7 +2865,7 @@ msgstr "Requester"
msgid "Descripción"
msgstr "Description"
#: ../../../modules/web/Controllers/AccountController.php:943
#: ../../../modules/web/Controllers/AccountController.php:942
msgid "Solicitud realizada"
msgstr "Request done"
@@ -3066,7 +3094,7 @@ msgid "Ey, esto es una DEMO!!"
msgstr "Ey, this is a DEMO!!"
#: ../../../modules/web/Controllers/ConfigBackupController.php:86
#: ../../../modules/web/Controllers/UserPassResetController.php:173
#: ../../../modules/web/Controllers/UserPassResetController.php:176
#: ../../../modules/web/Forms/AccountForm.php:135
#: ../../../modules/web/Forms/UserForm.php:161
msgid "Las claves no coinciden"
@@ -3951,15 +3979,11 @@ msgid "Eliminar Notificación"
msgstr "Delete Notification"
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:89
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:334
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:336
#: ../../../modules/web/themes/material-blue/views/plugin/index.inc:1
msgid "Plugins"
msgstr "Plugins"
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:101
msgid "Plugin"
msgstr "Plugin"
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:118
msgid "No disponible"
msgstr "Unavailable"
@@ -3973,7 +3997,7 @@ msgstr "Search for Plugin"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:149
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:150
#: ../../../modules/web/Controllers/PluginController.php:120
#: ../../../modules/web/Controllers/PluginController.php:125
#: ../../../config/actions.xml:541
msgid "Ver Plugin"
msgstr "View Plugin"
@@ -4224,13 +4248,13 @@ msgstr "Edit Profile"
msgid "Eliminar Perfil"
msgstr "Delete Profile"
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:265
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:267
#: ../../../modules/web/themes/material-blue/inc/Icons.php:58
msgid "Buscar"
msgstr "Search"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:348
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:350
#: ../../../modules/web/themes/material-blue/inc/Icons.php:61
#: ../../../modules/web/themes/material-blue/views/config/ldap.inc:21
#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:22
@@ -4282,15 +4306,15 @@ msgstr "Value created"
msgid "Valor actualizado"
msgstr "Value updated"
#: ../../../modules/web/Controllers/LoginController.php:101
#: ../../../modules/web/Controllers/LoginController.php:119
msgid "Finalizar sesión"
msgstr "Logout session"
#: ../../../modules/web/Controllers/LoginController.php:103
#: ../../../modules/web/Controllers/LoginController.php:121
msgid "Tiempo inactivo"
msgstr "Inactive time"
#: ../../../modules/web/Controllers/LoginController.php:104
#: ../../../modules/web/Controllers/LoginController.php:122
msgid "Tiempo total"
msgstr "Total time"
@@ -4319,18 +4343,13 @@ msgstr "Notification created"
msgid "Notificación actualizada"
msgstr "Notification updated"
#: ../../../modules/web/Controllers/PluginController.php:181
#: ../../../modules/web/Controllers/PluginController.php:184
#: ../../../modules/web/Controllers/PluginController.php:188
#: ../../../modules/web/Controllers/PluginController.php:191
msgid "Plugin habilitado"
msgstr "Plugin enabled"
#: ../../../modules/web/Controllers/PluginController.php:206
#: ../../../modules/web/Controllers/PluginController.php:209
msgid "Plugin deshabilitado"
msgstr "Plugin disabled"
#: ../../../modules/web/Controllers/PluginController.php:231
#: ../../../modules/web/Controllers/PluginController.php:234
#: ../../../modules/web/Controllers/PluginController.php:238
#: ../../../modules/web/Controllers/PluginController.php:241
msgid "Plugin restablecido"
msgstr "Plugin reset"
@@ -4357,11 +4376,11 @@ msgstr "Link deleted"
msgid "Enlace creado"
msgstr "Link created"
#: ../../../modules/web/Controllers/StatusController.php:94
#: ../../../modules/web/Controllers/StatusController.php:93
msgid "Versión no disponible"
msgstr "Version unavailable"
#: ../../../modules/web/Controllers/StatusController.php:142
#: ../../../modules/web/Controllers/StatusController.php:140
msgid "Notificaciones no disponibles"
msgstr "Notifications not available"
@@ -4467,7 +4486,7 @@ msgstr "Request sent"
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "You will receive an email to complete the request shortly."
#: ../../../modules/web/Controllers/UserPassResetController.php:169
#: ../../../modules/web/Controllers/UserPassResetController.php:172
#: ../../../modules/web/Forms/AuthTokenForm.php:101
#: ../../../modules/web/Forms/UserForm.php:157
msgid "La clave no puede estar en blanco"
@@ -4501,7 +4520,7 @@ msgstr "View Profile"
msgid "Preferencias actualizadas"
msgstr "Preferences updated"
#: ../../../modules/web/Controllers/UserSettingsManagerController.php:89
#: ../../../modules/web/Controllers/UserSettingsManagerController.php:92
msgid "Preferencias"
msgstr "Preferences"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-12 00:42+0200\n"
"PO-Revision-Date: 2018-10-12 00:43+0200\n"
"POT-Creation-Date: 2018-10-15 02:52+0200\n"
"PO-Revision-Date: 2018-10-15 02:53+0200\n"
"Last-Translator: nuxsmin <nuxsmin@syspass.org>\n"
"Language-Team: nuxsmin@syspass.org\n"
"Language: en_US\n"
@@ -25,12 +25,12 @@ msgstr ""
"X-Poedit-SearchPath-1: ../../../../lib\n"
"X-Poedit-SearchPath-2: ../../../config\n"
#: ../../../../lib/SP/Bootstrap.php:267
#: ../../../../lib/SP/Bootstrap.php:278
#, php-format
msgid "Versión de PHP requerida >= %s <= %s"
msgstr "Required PHP version >= %s <= %s"
#: ../../../../lib/SP/Bootstrap.php:269
#: ../../../../lib/SP/Bootstrap.php:280
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr "Please update the PHP version to run sysPass"
@@ -53,7 +53,7 @@ msgid "Actual: %s - Necesario: 750"
msgstr "Current: %s - Needed: 750"
#: ../../../../lib/SP/Core/Acl/AccountPermissionException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:132
#: ../../../../lib/SP/Util/ErrorUtil.php:142
#: ../../../modules/web/Controllers/Helpers/Account/AccountPasswordHelper.php:96
msgid "No tiene permisos para acceder a esta cuenta"
msgstr "You don't have permission to access to this account"
@@ -61,12 +61,12 @@ msgstr "You don't have permission to access to this account"
#: ../../../../lib/SP/Core/Acl/AccountPermissionException.php:45
#: ../../../../lib/SP/Core/Acl/UnauthorizedActionException.php:46
#: ../../../../lib/SP/Core/Acl/UnauthorizedPageException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:129
#: ../../../../lib/SP/Util/ErrorUtil.php:133
#: ../../../../lib/SP/Util/ErrorUtil.php:137
#: ../../../../lib/SP/Util/ErrorUtil.php:141
#: ../../../../lib/SP/Util/ErrorUtil.php:149
#: ../../../../lib/SP/Util/ErrorUtil.php:156
#: ../../../../lib/SP/Util/ErrorUtil.php:139
#: ../../../../lib/SP/Util/ErrorUtil.php:143
#: ../../../../lib/SP/Util/ErrorUtil.php:147
#: ../../../../lib/SP/Util/ErrorUtil.php:151
#: ../../../../lib/SP/Util/ErrorUtil.php:159
#: ../../../../lib/SP/Util/ErrorUtil.php:166
#: ../../../modules/web/Controllers/ErrorController.php:124
#: ../../../modules/web/Controllers/UserPassResetController.php:94
#: ../../../modules/web/themes/material-blue/views/upgrade/index.inc:13
@@ -75,7 +75,7 @@ msgstr "Please contact to the administrator"
# Not available
#: ../../../../lib/SP/Core/Acl/Acl.php:294
#: ../../../../lib/SP/Services/Auth/LoginService.php:600
#: ../../../../lib/SP/Services/Auth/LoginService.php:604
msgid "N/D"
msgstr "N/A"
@@ -96,24 +96,24 @@ msgstr "Action"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapMsAds.php:155
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:110
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:142
#: ../../../../lib/SP/Services/Auth/LoginService.php:217
#: ../../../../lib/SP/Services/Auth/LoginService.php:235
#: ../../../../lib/SP/Services/Auth/LoginService.php:386
#: ../../../../lib/SP/Services/Auth/LoginService.php:453
#: ../../../../lib/SP/Services/Auth/LoginService.php:561
#: ../../../../lib/SP/Services/Auth/LoginService.php:604
#: ../../../../lib/SP/Services/Auth/LoginService.php:220
#: ../../../../lib/SP/Services/Auth/LoginService.php:238
#: ../../../../lib/SP/Services/Auth/LoginService.php:390
#: ../../../../lib/SP/Services/Auth/LoginService.php:457
#: ../../../../lib/SP/Services/Auth/LoginService.php:565
#: ../../../../lib/SP/Services/Auth/LoginService.php:608
#: ../../../../lib/SP/Services/Ldap/LdapImportService.php:238
#: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:253
#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:106
#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:107
#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:111
#: ../../../modules/web/Controllers/Helpers/Grid/TrackGrid.php:105
#: ../../../modules/web/Controllers/LoginController.php:102
#: ../../../modules/web/Controllers/LoginController.php:120
#: ../../../modules/web/Controllers/UserController.php:278
#: ../../../modules/web/Controllers/UserController.php:312
#: ../../../modules/web/Controllers/UserController.php:373
#: ../../../modules/web/Controllers/UserController.php:412
#: ../../../modules/web/Controllers/UserPassResetController.php:187
#: ../../../modules/web/Controllers/UserPassResetController.php:190
#: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:55
#: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:61
#: ../../../modules/web/themes/material-blue/views/account/account-history.inc:91
@@ -151,7 +151,7 @@ msgid "Acción no encontrada"
msgstr "Action not found"
#: ../../../../lib/SP/Core/Acl/UnauthorizedActionException.php:46
#: ../../../../lib/SP/Util/ErrorUtil.php:140
#: ../../../../lib/SP/Util/ErrorUtil.php:150
#: ../../../modules/web/Controllers/AccountFileController.php:261
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:59
#: ../../../modules/web/Controllers/AccountManagerController.php:77
@@ -200,8 +200,8 @@ msgstr "Action not found"
#: ../../../modules/web/Controllers/NotificationController.php:288
#: ../../../modules/web/Controllers/NotificationController.php:315
#: ../../../modules/web/Controllers/NotificationController.php:348
#: ../../../modules/web/Controllers/PluginController.php:98
#: ../../../modules/web/Controllers/PluginController.php:117
#: ../../../modules/web/Controllers/PluginController.php:103
#: ../../../modules/web/Controllers/PluginController.php:122
#: ../../../modules/web/Controllers/PublicLinkController.php:71
#: ../../../modules/web/Controllers/PublicLinkController.php:105
#: ../../../modules/web/Controllers/PublicLinkController.php:167
@@ -244,7 +244,7 @@ msgid "No tiene permisos para realizar esta operación"
msgstr "You don't have permission to do this operation"
#: ../../../../lib/SP/Core/Acl/UnauthorizedPageException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:136
#: ../../../../lib/SP/Util/ErrorUtil.php:146
msgid "No tiene permisos para acceder a esta página"
msgstr "You don't have permission to access this page"
@@ -280,14 +280,14 @@ msgstr "Session cannot be initialized"
#: ../../../../lib/SP/Services/Account/AccountService.php:227
#: ../../../../lib/SP/Services/Account/AccountService.php:232
#: ../../../../lib/SP/Services/Api/ApiService.php:129
#: ../../../../lib/SP/Services/Api/ApiService.php:227
#: ../../../../lib/SP/Services/Api/ApiService.php:235
#: ../../../../lib/SP/Services/Auth/LoginService.php:187
#: ../../../../lib/SP/Services/Auth/LoginService.php:351
#: ../../../../lib/SP/Services/Auth/LoginService.php:500
#: ../../../../lib/SP/Services/Auth/LoginService.php:505
#: ../../../../lib/SP/Services/Auth/LoginService.php:537
#: ../../../../lib/SP/Services/Auth/LoginService.php:644
#: ../../../../lib/SP/Services/Api/ApiService.php:229
#: ../../../../lib/SP/Services/Api/ApiService.php:237
#: ../../../../lib/SP/Services/Auth/LoginService.php:190
#: ../../../../lib/SP/Services/Auth/LoginService.php:354
#: ../../../../lib/SP/Services/Auth/LoginService.php:504
#: ../../../../lib/SP/Services/Auth/LoginService.php:509
#: ../../../../lib/SP/Services/Auth/LoginService.php:541
#: ../../../../lib/SP/Services/Auth/LoginService.php:648
#: ../../../../lib/SP/Services/AuthToken/AuthTokenService.php:311
#: ../../../../lib/SP/Services/CustomField/CustomFieldService.php:203
#: ../../../../lib/SP/Services/Export/XmlVerifyService.php:108
@@ -306,7 +306,7 @@ msgstr "Crypto module cannot be loaded"
msgid "Error al generar datos cifrados"
msgstr "Error while creating the encrypted data"
#: ../../../../lib/SP/Core/Events/Event.php:56
#: ../../../../lib/SP/Core/Events/Event.php:57
msgid "Es necesario un objeto"
msgstr "An object is needed"
@@ -320,17 +320,17 @@ msgstr "Invalid icons class"
#: ../../../../lib/SP/DataModel/PublicLinkListData.php:88
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapConnection.php:190
#: ../../../modules/web/Controllers/AccountController.php:227
#: ../../../modules/web/Controllers/AccountController.php:226
msgid "ON"
msgstr "ON"
#: ../../../../lib/SP/DataModel/PublicLinkListData.php:88
#: ../../../modules/web/Controllers/AccountController.php:227
#: ../../../modules/web/Controllers/AccountController.php:226
msgid "OFF"
msgstr "OFF"
#: ../../../../lib/SP/Html/DataGrid/DataGridBase.php:303
#: ../../../../lib/SP/Mvc/View/Template.php:122
#: ../../../../lib/SP/Mvc/View/Template.php:126
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "Unable to retrieve the \"%s\" template: %s"
@@ -352,11 +352,11 @@ msgstr "Encoding error"
msgid "Respuesta XML-RPC inválida"
msgstr "Invalid XML-RPC response"
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:64
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:71
msgid "La sesión no se ha iniciado o ha caducado"
msgstr "Session not started or timed out"
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:114
#: ../../../../lib/SP/Mvc/Controller/ControllerTrait.php:124
msgid "Acción Inválida"
msgstr "Invalid Action"
@@ -398,41 +398,69 @@ msgstr "Invalid filter type"
msgid "Tipo de objeto incorrecto"
msgstr "Wrong object type"
#: ../../../../lib/SP/Mvc/View/Template.php:274
#: ../../../../lib/SP/Mvc/View/Template.php:276
#: ../../../../lib/SP/Mvc/View/Template.php:278
#: ../../../../lib/SP/Mvc/View/Template.php:280
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "Unable to retrieve the \"%s\" variable"
#: ../../../../lib/SP/Mvc/View/Template.php:322
#: ../../../../lib/SP/Mvc/View/Template.php:324
#: ../../../../lib/SP/Mvc/View/Template.php:326
#: ../../../../lib/SP/Mvc/View/Template.php:328
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "Unable to unset the \"%s\" variable"
#: ../../../../lib/SP/Mvc/View/Template.php:341
#: ../../../../lib/SP/Mvc/View/Template.php:345
msgid "La plantilla no contiene archivos"
msgstr "Template does not contain files"
#: ../../../../lib/SP/Plugin/PluginManager.php:113
#: ../../../../lib/SP/Plugin/PluginManager.php:256
#: ../../../../lib/SP/Plugin/PluginManager.php:170
#, php-format
msgid "Versión de plugin no compatible (%s)"
msgstr "Plugin version not compatible (%s)"
#: ../../../../lib/SP/Plugin/PluginManager.php:192
#, php-format
msgid "No es posible cargar el plugin \"%s\""
msgstr "Unable to load the \"%s\" plugin"
#: ../../../../lib/SP/Plugin/PluginManager.php:194
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:101
msgid "Plugin"
msgstr "Plugin"
#: ../../../../lib/SP/Plugin/PluginManager.php:219
#: ../../../../lib/SP/Plugin/PluginManager.php:339
#: ../../../modules/web/Controllers/PluginController.php:213
#: ../../../modules/web/Controllers/PluginController.php:216
msgid "Plugin deshabilitado"
msgstr "Plugin disabled"
#: ../../../../lib/SP/Plugin/PluginManager.php:254
msgid "Plugin disponible"
msgstr "Plugin available"
#: ../../../../lib/SP/Plugin/PluginManager.php:264
msgid "Plugin no disponible"
msgstr "Plugin unavailable"
#: ../../../../lib/SP/Plugin/PluginManager.php:294
msgid "Plugin cargado"
msgstr "Plugin loaded"
#. (itstool) path: action/text
#: ../../../../lib/SP/Plugin/PluginManager.php:245
#: ../../../../lib/SP/Plugin/PluginManager.php:319
#: ../../../config/actions.xml:535
msgid "Nuevo Plugin"
msgstr "New Plugin"
#: ../../../../lib/SP/Plugin/PluginManager.php:246
#: ../../../../lib/SP/Plugin/PluginManager.php:320
#: ../../../modules/api/Controllers/AccountController.php:71
#: ../../../modules/api/Controllers/AccountController.php:103
#: ../../../modules/api/Controllers/AccountController.php:139
#: ../../../modules/api/Controllers/AccountController.php:185
#: ../../../modules/api/Controllers/AccountController.php:235
#: ../../../modules/api/Controllers/AccountController.php:310
#: ../../../modules/api/Controllers/AccountController.php:189
#: ../../../modules/api/Controllers/AccountController.php:240
#: ../../../modules/api/Controllers/AccountController.php:315
#: ../../../modules/api/Controllers/CategoryController.php:63
#: ../../../modules/api/Controllers/CategoryController.php:92
#: ../../../modules/api/Controllers/CategoryController.php:122
@@ -490,7 +518,7 @@ msgid "Método ya inicializado"
msgstr "Method already initialized"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:119
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:125
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:126
msgid "Error al buscar RDN de grupo"
msgstr "Error while searching the group RDN"
@@ -518,13 +546,13 @@ msgstr "Error while searching the group RDN"
msgid "Grupo"
msgstr "Group"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:200
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:204
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:205
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:210
msgid "Error al localizar el usuario en LDAP"
msgstr "Error while searching the user on LDAP"
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:249
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:254
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:259
#: ../../../../lib/SP/Providers/Auth/Ldap/LdapActions.php:265
msgid "Error al buscar objetos en DN base"
msgstr "Error while searching objects in base DN"
@@ -594,7 +622,7 @@ msgid "No es posible inicializar"
msgstr "Unable to initialize"
#: ../../../../lib/SP/Providers/Notification/NotificationHandler.php:124
#: ../../../modules/web/Controllers/AccountController.php:926
#: ../../../modules/web/Controllers/AccountController.php:925
msgid "Solicitud"
msgstr "Request"
@@ -1121,7 +1149,7 @@ msgstr "The account doesn't exist"
#: ../../../../lib/SP/Services/Api/ApiRequest.php:79
#: ../../../../lib/SP/Services/Api/ApiRequest.php:113
#: ../../../../lib/SP/Services/Api/ApiService.php:229
#: ../../../../lib/SP/Services/Api/ApiService.php:231
msgid "Datos inválidos"
msgstr "Invalid data"
@@ -1130,7 +1158,7 @@ msgid "Fomato incorrecto"
msgstr "Invalid format"
#: ../../../../lib/SP/Services/Api/ApiService.php:96
#: ../../../../lib/SP/Services/Auth/LoginService.php:137
#: ../../../../lib/SP/Services/Auth/LoginService.php:138
#: ../../../../lib/SP/Services/UserPassRecover/UserPassRecoverService.php:103
#: ../../../modules/web/Controllers/UserPassResetController.php:124
msgid "Intentos excedidos"
@@ -1145,54 +1173,54 @@ msgstr "Wrong parameters"
msgid "Acceso no permitido"
msgstr "Unauthorized access"
#: ../../../../lib/SP/Services/Auth/LoginService.php:157
#: ../../../../lib/SP/Services/Auth/LoginService.php:456
#: ../../../../lib/SP/Services/Auth/LoginService.php:463
#: ../../../../lib/SP/Services/Auth/LoginService.php:571
#: ../../../../lib/SP/Services/Auth/LoginService.php:576
#: ../../../../lib/SP/Services/Auth/LoginService.php:615
#: ../../../../lib/SP/Services/Auth/LoginService.php:620
#: ../../../../lib/SP/Services/Auth/LoginService.php:160
#: ../../../../lib/SP/Services/Auth/LoginService.php:460
#: ../../../../lib/SP/Services/Auth/LoginService.php:467
#: ../../../../lib/SP/Services/Auth/LoginService.php:575
#: ../../../../lib/SP/Services/Auth/LoginService.php:580
#: ../../../../lib/SP/Services/Auth/LoginService.php:619
#: ../../../../lib/SP/Services/Auth/LoginService.php:624
msgid "Login incorrecto"
msgstr "Wrong login"
#: ../../../../lib/SP/Services/Auth/LoginService.php:216
#: ../../../../lib/SP/Services/Auth/LoginService.php:223
#: ../../../../lib/SP/Services/Auth/LoginService.php:219
#: ../../../../lib/SP/Services/Auth/LoginService.php:226
msgid "Usuario deshabilitado"
msgstr "User disabled"
#: ../../../../lib/SP/Services/Auth/LoginService.php:270
#: ../../../../lib/SP/Services/Auth/LoginService.php:273
msgid "Usando clave temporal"
msgstr "Using temporary password"
#: ../../../../lib/SP/Services/Auth/LoginService.php:282
#: ../../../../lib/SP/Services/Auth/LoginService.php:288
#: ../../../../lib/SP/Services/Auth/LoginService.php:306
#: ../../../../lib/SP/Services/Auth/LoginService.php:312
#: ../../../../lib/SP/Services/Auth/LoginService.php:285
#: ../../../../lib/SP/Services/Auth/LoginService.php:291
#: ../../../../lib/SP/Services/Auth/LoginService.php:309
#: ../../../../lib/SP/Services/Auth/LoginService.php:315
msgid "Clave maestra incorrecta"
msgstr "Wrong master password"
#: ../../../../lib/SP/Services/Auth/LoginService.php:297
#: ../../../../lib/SP/Services/Auth/LoginService.php:321
#: ../../../../lib/SP/Services/Auth/LoginService.php:300
#: ../../../../lib/SP/Services/Auth/LoginService.php:324
#: ../../../../lib/SP/Services/User/UpdatedMasterPassException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:144
#: ../../../../lib/SP/Util/ErrorUtil.php:154
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:68
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:142
#: ../../../modules/web/Controllers/Helpers/Account/AccountPasswordHelper.php:116
msgid "Clave maestra actualizada"
msgstr "Master password updated"
#: ../../../../lib/SP/Services/Auth/LoginService.php:327
#: ../../../../lib/SP/Services/Auth/LoginService.php:330
msgid "Es necesaria su clave anterior"
msgstr "Your previous password is needed"
#: ../../../../lib/SP/Services/Auth/LoginService.php:339
#: ../../../../lib/SP/Services/Auth/LoginService.php:342
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "The Master Password either is not saved or is wrong"
#: ../../../../lib/SP/Services/Auth/LoginService.php:451
#: ../../../../lib/SP/Services/Auth/LoginService.php:514
#: ../../../../lib/SP/Services/Auth/LoginService.php:560
#: ../../../../lib/SP/Services/Auth/LoginService.php:603
#: ../../../../lib/SP/Services/Auth/LoginService.php:455
#: ../../../../lib/SP/Services/Auth/LoginService.php:518
#: ../../../../lib/SP/Services/Auth/LoginService.php:564
#: ../../../../lib/SP/Services/Auth/LoginService.php:607
#: ../../../modules/web/Controllers/AccountFileController.php:235
#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:108
#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:108
@@ -1207,22 +1235,22 @@ msgstr "The Master Password either is not saved or is wrong"
msgid "Tipo"
msgstr "Type"
#: ../../../../lib/SP/Services/Auth/LoginService.php:452
#: ../../../../lib/SP/Services/Auth/LoginService.php:515
#: ../../../../lib/SP/Services/Auth/LoginService.php:456
#: ../../../../lib/SP/Services/Auth/LoginService.php:519
msgid "Servidor LDAP"
msgstr "LDAP Server"
#: ../../../../lib/SP/Services/Auth/LoginService.php:471
#: ../../../../lib/SP/Services/Auth/LoginService.php:476
#: ../../../../lib/SP/Services/Auth/LoginService.php:475
#: ../../../../lib/SP/Services/Auth/LoginService.php:480
msgid "Cuenta expirada"
msgstr "Account expired"
#: ../../../../lib/SP/Services/Auth/LoginService.php:484
#: ../../../../lib/SP/Services/Auth/LoginService.php:489
#: ../../../../lib/SP/Services/Auth/LoginService.php:488
#: ../../../../lib/SP/Services/Auth/LoginService.php:493
msgid "El usuario no tiene grupos asociados"
msgstr "The user has no associated groups"
#: ../../../../lib/SP/Services/Auth/LoginService.php:605
#: ../../../../lib/SP/Services/Auth/LoginService.php:609
#: ../../../modules/web/themes/material-blue/views/config/general-auth.inc:10
msgid "Autentificación"
msgstr "Authentication"
@@ -1503,16 +1531,16 @@ msgstr "Account imported"
#: ../../../modules/api/Controllers/AccountController.php:72
#: ../../../modules/api/Controllers/AccountController.php:104
#: ../../../modules/api/Controllers/AccountController.php:140
#: ../../../modules/api/Controllers/AccountController.php:186
#: ../../../modules/api/Controllers/AccountController.php:236
#: ../../../modules/api/Controllers/AccountController.php:311
#: ../../../modules/web/Controllers/AccountController.php:225
#: ../../../modules/web/Controllers/AccountController.php:720
#: ../../../modules/web/Controllers/AccountController.php:765
#: ../../../modules/web/Controllers/AccountController.php:806
#: ../../../modules/web/Controllers/AccountController.php:845
#: ../../../modules/web/Controllers/AccountController.php:895
#: ../../../modules/web/Controllers/AccountController.php:929
#: ../../../modules/api/Controllers/AccountController.php:190
#: ../../../modules/api/Controllers/AccountController.php:241
#: ../../../modules/api/Controllers/AccountController.php:316
#: ../../../modules/web/Controllers/AccountController.php:224
#: ../../../modules/web/Controllers/AccountController.php:719
#: ../../../modules/web/Controllers/AccountController.php:764
#: ../../../modules/web/Controllers/AccountController.php:805
#: ../../../modules/web/Controllers/AccountController.php:844
#: ../../../modules/web/Controllers/AccountController.php:894
#: ../../../modules/web/Controllers/AccountController.php:928
#: ../../../modules/web/Controllers/AccountFileController.php:234
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:112
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:147
@@ -2119,7 +2147,7 @@ msgid "Enlace"
msgstr "Link"
#: ../../../../lib/SP/Services/User/UpdatedMasterPassException.php:45
#: ../../../../lib/SP/Util/ErrorUtil.php:145
#: ../../../../lib/SP/Util/ErrorUtil.php:155
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:68
#: ../../../modules/web/Controllers/ConfigEncryptionController.php:142
#: ../../../modules/web/Controllers/Helpers/Account/AccountPasswordHelper.php:116
@@ -2286,12 +2314,12 @@ msgstr "Socket not initialized"
msgid "Error al enviar datos"
msgstr "Error while sending the data"
#: ../../../../lib/SP/Util/ErrorUtil.php:128
#: ../../../../lib/SP/Util/ErrorUtil.php:138
msgid "Opción no disponible"
msgstr "Option unavailable"
#: ../../../../lib/SP/Util/ErrorUtil.php:148
#: ../../../../lib/SP/Util/ErrorUtil.php:155
#: ../../../../lib/SP/Util/ErrorUtil.php:158
#: ../../../../lib/SP/Util/ErrorUtil.php:165
msgid "Se ha producido una excepción"
msgstr "An exception occured"
@@ -2304,40 +2332,40 @@ msgid "Cuenta visualizada"
msgstr "Account displayed"
#: ../../../modules/api/Controllers/AccountController.php:102
#: ../../../modules/web/Controllers/AccountController.php:554
#: ../../../modules/web/Controllers/AccountController.php:610
#: ../../../modules/web/Controllers/AccountController.php:553
#: ../../../modules/web/Controllers/AccountController.php:609
msgid "Clave visualizada"
msgstr "Password viewed"
#: ../../../modules/api/Controllers/AccountController.php:138
#: ../../../modules/api/Controllers/AccountController.php:144
#: ../../../modules/web/Controllers/AccountController.php:804
#: ../../../modules/web/Controllers/AccountController.php:815
#: ../../../modules/web/Controllers/AccountController.php:803
#: ../../../modules/web/Controllers/AccountController.php:814
#: ../../../modules/web/Controllers/UserController.php:411
#: ../../../modules/web/Controllers/UserController.php:415
#: ../../../modules/web/Controllers/UserPassResetController.php:186
#: ../../../modules/web/Controllers/UserPassResetController.php:190
#: ../../../modules/web/Controllers/UserPassResetController.php:189
#: ../../../modules/web/Controllers/UserPassResetController.php:193
msgid "Clave actualizada"
msgstr "Password updated"
#: ../../../modules/api/Controllers/AccountController.php:184
#: ../../../modules/api/Controllers/AccountController.php:190
#: ../../../modules/web/Controllers/AccountController.php:718
#: ../../../modules/web/Controllers/AccountController.php:729
#: ../../../modules/api/Controllers/AccountController.php:188
#: ../../../modules/api/Controllers/AccountController.php:194
#: ../../../modules/web/Controllers/AccountController.php:717
#: ../../../modules/web/Controllers/AccountController.php:728
msgid "Cuenta creada"
msgstr "Account added"
#: ../../../modules/api/Controllers/AccountController.php:234
#: ../../../modules/api/Controllers/AccountController.php:240
#: ../../../modules/web/Controllers/AccountController.php:763
#: ../../../modules/web/Controllers/AccountController.php:774
#: ../../../modules/api/Controllers/AccountController.php:239
#: ../../../modules/api/Controllers/AccountController.php:245
#: ../../../modules/web/Controllers/AccountController.php:762
#: ../../../modules/web/Controllers/AccountController.php:773
msgid "Cuenta actualizada"
msgstr "Account updated"
#: ../../../modules/api/Controllers/AccountController.php:309
#: ../../../modules/api/Controllers/AccountController.php:315
#: ../../../modules/web/Controllers/AccountController.php:893
#: ../../../modules/web/Controllers/AccountController.php:898
#: ../../../modules/api/Controllers/AccountController.php:314
#: ../../../modules/api/Controllers/AccountController.php:320
#: ../../../modules/web/Controllers/AccountController.php:892
#: ../../../modules/web/Controllers/AccountController.php:897
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:110
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:115
#: ../../../modules/web/Controllers/AccountManagerController.php:145
@@ -2709,9 +2737,9 @@ msgstr "Group deleted"
msgid "Es necesario actualizar"
msgstr "Updating needed"
#: ../../../modules/web/Controllers/AccountController.php:149
#: ../../../modules/web/Controllers/AccountController.php:204
#: ../../../modules/web/Controllers/AccountController.php:474
#: ../../../modules/web/Controllers/AccountController.php:148
#: ../../../modules/web/Controllers/AccountController.php:203
#: ../../../modules/web/Controllers/AccountController.php:473
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:60
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:61
#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:159
@@ -2721,21 +2749,21 @@ msgstr "Updating needed"
msgid "Detalles de Cuenta"
msgstr "Account Details"
#: ../../../modules/web/Controllers/AccountController.php:223
#: ../../../modules/web/Controllers/AccountController.php:222
msgid "Enlace visualizado"
msgstr "Link viewed"
#: ../../../modules/web/Controllers/AccountController.php:224
#: ../../../modules/web/Controllers/AccountController.php:555
#: ../../../modules/web/Controllers/AccountController.php:611
#: ../../../modules/web/Controllers/AccountController.php:650
#: ../../../modules/web/Controllers/AccountController.php:684
#: ../../../modules/web/Controllers/AccountController.php:719
#: ../../../modules/web/Controllers/AccountController.php:764
#: ../../../modules/web/Controllers/AccountController.php:805
#: ../../../modules/web/Controllers/AccountController.php:844
#: ../../../modules/web/Controllers/AccountController.php:894
#: ../../../modules/web/Controllers/AccountController.php:928
#: ../../../modules/web/Controllers/AccountController.php:223
#: ../../../modules/web/Controllers/AccountController.php:554
#: ../../../modules/web/Controllers/AccountController.php:610
#: ../../../modules/web/Controllers/AccountController.php:649
#: ../../../modules/web/Controllers/AccountController.php:683
#: ../../../modules/web/Controllers/AccountController.php:718
#: ../../../modules/web/Controllers/AccountController.php:763
#: ../../../modules/web/Controllers/AccountController.php:804
#: ../../../modules/web/Controllers/AccountController.php:843
#: ../../../modules/web/Controllers/AccountController.php:893
#: ../../../modules/web/Controllers/AccountController.php:927
#: ../../../modules/web/Controllers/AccountFileController.php:233
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:111
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:146
@@ -2749,24 +2777,24 @@ msgstr "Link viewed"
msgid "Cuenta"
msgstr "Account"
#: ../../../modules/web/Controllers/AccountController.php:226
#: ../../../modules/web/Controllers/AccountController.php:225
msgid "Agente"
msgstr "Agent"
#: ../../../modules/web/Controllers/AccountController.php:227
#: ../../../modules/web/Controllers/AccountController.php:226
msgid "HTTPS"
msgstr "HTTPS"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/AccountController.php:256
#: ../../../modules/web/Controllers/AccountController.php:300
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:278
#: ../../../modules/web/Controllers/AccountController.php:255
#: ../../../modules/web/Controllers/AccountController.php:299
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:280
#: ../../../config/actions.xml:157
msgid "Nueva Cuenta"
msgstr "New Account"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/AccountController.php:344
#: ../../../modules/web/Controllers/AccountController.php:343
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:176
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:177
#: ../../../modules/web/themes/material-blue/views/account/linkedAccounts.inc:18
@@ -2775,7 +2803,7 @@ msgid "Editar Cuenta"
msgstr "Edit Account"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/AccountController.php:389
#: ../../../modules/web/Controllers/AccountController.php:388
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:334
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:335
#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:176
@@ -2787,26 +2815,26 @@ msgstr "Edit Account"
msgid "Eliminar Cuenta"
msgstr "Remove Account"
#: ../../../modules/web/Controllers/AccountController.php:432
#: ../../../modules/web/Controllers/AccountController.php:431
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:155
#: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:156
msgid "Modificar Clave de Cuenta"
msgstr "Edit Account Password"
#: ../../../modules/web/Controllers/AccountController.php:649
#: ../../../modules/web/Controllers/AccountController.php:683
#: ../../../modules/web/Controllers/AccountController.php:648
#: ../../../modules/web/Controllers/AccountController.php:682
msgid "Clave copiada"
msgstr "Password copied"
#: ../../../modules/web/Controllers/AccountController.php:843
#: ../../../modules/web/Controllers/AccountController.php:854
#: ../../../modules/web/Controllers/AccountController.php:842
#: ../../../modules/web/Controllers/AccountController.php:853
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:145
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:150
msgid "Cuenta restaurada"
msgstr "Account restored"
#: ../../../modules/web/Controllers/AccountController.php:879
#: ../../../modules/web/Controllers/AccountController.php:882
#: ../../../modules/web/Controllers/AccountController.php:878
#: ../../../modules/web/Controllers/AccountController.php:881
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:99
#: ../../../modules/web/Controllers/AccountHistoryManagerController.php:102
#: ../../../modules/web/Controllers/AccountManagerController.php:131
@@ -2814,16 +2842,16 @@ msgstr "Account restored"
msgid "Cuentas eliminadas"
msgstr "Accounts removed"
#: ../../../modules/web/Controllers/AccountController.php:919
#: ../../../modules/web/Controllers/AccountController.php:918
#: ../../../modules/web/Forms/NotificationForm.php:100
msgid "Es necesaria una descripción"
msgstr "A description is needed"
#: ../../../modules/web/Controllers/AccountController.php:927
#: ../../../modules/web/Controllers/AccountController.php:926
msgid "Solicitante"
msgstr "Requester"
#: ../../../modules/web/Controllers/AccountController.php:930
#: ../../../modules/web/Controllers/AccountController.php:929
#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:106
#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:105
#: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:105
@@ -2837,7 +2865,7 @@ msgstr "Requester"
msgid "Descripción"
msgstr "Description"
#: ../../../modules/web/Controllers/AccountController.php:943
#: ../../../modules/web/Controllers/AccountController.php:942
msgid "Solicitud realizada"
msgstr "Request done"
@@ -3066,7 +3094,7 @@ msgid "Ey, esto es una DEMO!!"
msgstr "Ey, this is a DEMO!!"
#: ../../../modules/web/Controllers/ConfigBackupController.php:86
#: ../../../modules/web/Controllers/UserPassResetController.php:173
#: ../../../modules/web/Controllers/UserPassResetController.php:176
#: ../../../modules/web/Forms/AccountForm.php:135
#: ../../../modules/web/Forms/UserForm.php:161
msgid "Las claves no coinciden"
@@ -3951,15 +3979,11 @@ msgid "Eliminar Notificación"
msgstr "Delete Notification"
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:89
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:334
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:336
#: ../../../modules/web/themes/material-blue/views/plugin/index.inc:1
msgid "Plugins"
msgstr "Plugins"
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:101
msgid "Plugin"
msgstr "Plugin"
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:118
msgid "No disponible"
msgstr "Unavailable"
@@ -3973,7 +3997,7 @@ msgstr "Search for Plugin"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:149
#: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:150
#: ../../../modules/web/Controllers/PluginController.php:120
#: ../../../modules/web/Controllers/PluginController.php:125
#: ../../../config/actions.xml:541
msgid "Ver Plugin"
msgstr "View Plugin"
@@ -4224,13 +4248,13 @@ msgstr "Edit Profile"
msgid "Eliminar Perfil"
msgstr "Delete Profile"
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:265
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:267
#: ../../../modules/web/themes/material-blue/inc/Icons.php:58
msgid "Buscar"
msgstr "Search"
#. (itstool) path: action/text
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:348
#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:350
#: ../../../modules/web/themes/material-blue/inc/Icons.php:61
#: ../../../modules/web/themes/material-blue/views/config/ldap.inc:21
#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:22
@@ -4282,15 +4306,15 @@ msgstr "Value created"
msgid "Valor actualizado"
msgstr "Value updated"
#: ../../../modules/web/Controllers/LoginController.php:101
#: ../../../modules/web/Controllers/LoginController.php:119
msgid "Finalizar sesión"
msgstr "Logout session"
#: ../../../modules/web/Controllers/LoginController.php:103
#: ../../../modules/web/Controllers/LoginController.php:121
msgid "Tiempo inactivo"
msgstr "Inactive time"
#: ../../../modules/web/Controllers/LoginController.php:104
#: ../../../modules/web/Controllers/LoginController.php:122
msgid "Tiempo total"
msgstr "Total time"
@@ -4319,18 +4343,13 @@ msgstr "Notification created"
msgid "Notificación actualizada"
msgstr "Notification updated"
#: ../../../modules/web/Controllers/PluginController.php:181
#: ../../../modules/web/Controllers/PluginController.php:184
#: ../../../modules/web/Controllers/PluginController.php:188
#: ../../../modules/web/Controllers/PluginController.php:191
msgid "Plugin habilitado"
msgstr "Plugin enabled"
#: ../../../modules/web/Controllers/PluginController.php:206
#: ../../../modules/web/Controllers/PluginController.php:209
msgid "Plugin deshabilitado"
msgstr "Plugin disabled"
#: ../../../modules/web/Controllers/PluginController.php:231
#: ../../../modules/web/Controllers/PluginController.php:234
#: ../../../modules/web/Controllers/PluginController.php:238
#: ../../../modules/web/Controllers/PluginController.php:241
msgid "Plugin restablecido"
msgstr "Plugin reset"
@@ -4357,11 +4376,11 @@ msgstr "Link deleted"
msgid "Enlace creado"
msgstr "Link created"
#: ../../../modules/web/Controllers/StatusController.php:94
#: ../../../modules/web/Controllers/StatusController.php:93
msgid "Versión no disponible"
msgstr "Version unavailable"
#: ../../../modules/web/Controllers/StatusController.php:142
#: ../../../modules/web/Controllers/StatusController.php:140
msgid "Notificaciones no disponibles"
msgstr "Notifications not available"
@@ -4467,7 +4486,7 @@ msgstr "Request sent"
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "You will receive an email to complete the request shortly."
#: ../../../modules/web/Controllers/UserPassResetController.php:169
#: ../../../modules/web/Controllers/UserPassResetController.php:172
#: ../../../modules/web/Forms/AuthTokenForm.php:101
#: ../../../modules/web/Forms/UserForm.php:157
msgid "La clave no puede estar en blanco"
@@ -4501,7 +4520,7 @@ msgstr "View Profile"
msgid "Preferencias actualizadas"
msgstr "Preferences updated"
#: ../../../modules/web/Controllers/UserSettingsManagerController.php:89
#: ../../../modules/web/Controllers/UserSettingsManagerController.php:92
msgid "Preferencias"
msgstr "Preferences"

View File

@@ -43,6 +43,10 @@ final class BootstrapController extends SimpleControllerBase
/**
* Returns environment data
*
* @return bool
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
public function getEnvironmentAction()
{
@@ -103,6 +107,8 @@ final class BootstrapController extends SimpleControllerBase
/**
* @return bool
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
private function getAuthBasicAutologinEnabled()
{
@@ -112,6 +118,8 @@ final class BootstrapController extends SimpleControllerBase
/**
* @return string
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
private function getPublicKey()
{

View File

@@ -28,7 +28,9 @@ defined('APP_ROOT') || die();
use DI\Container;
use Psr\Container\ContainerInterface;
use SP\Core\Crypt\Hash;
use SP\Core\Exceptions\FileNotFoundException;
use SP\Core\Exceptions\SPException;
use SP\DataModel\ProfileData;
use SP\Modules\Web\Controllers\Helpers\LayoutHelper;
use SP\Modules\Web\Controllers\Traits\WebControllerTrait;
@@ -200,14 +202,16 @@ abstract class ControllerBase
/**
* Comprobar si el usuario está logado.
*
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @param bool $requireAuthCompleted
*
* @throws AuthException
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
protected function checkLoggedIn()
protected function checkLoggedIn($requireAuthCompleted = true)
{
if ($this->session->isLoggedIn()
&& $this->session->getAuthCompleted() === true
&& $this->session->getAuthCompleted() === $requireAuthCompleted
) {
$browser = $this->dic->get(Browser::class);
@@ -219,11 +223,37 @@ abstract class ControllerBase
}
}
$this->checkLoggedInSession($this->session, $this->request, function ($redirect) {
$this->router->response()
->redirect($redirect)
->send(true);
});
$this->checkLoggedInSession(
$this->session,
$this->request,
function ($redirect) {
$this->router->response()
->redirect($redirect)
->send(true);
},
$requireAuthCompleted
);
}
/**
* prepareSignedUriOnView
*
* Prepares view's variables to pass in a signed URI
*/
final protected function prepareSignedUriOnView()
{
$from = $this->request->analyzeString('from');
if ($from) {
try {
$this->request->verifySignature($this->configData->getPasswordSalt());
$this->view->assign('from', $from);
$this->view->assign('from_hash', Hash::signMessage($from, $this->configData->getPasswordSalt()));
} catch (SPException $e) {
processException($e);
}
}
}
/**

View File

@@ -191,7 +191,9 @@ final class LayoutHelper extends HelperBase
// Cargar los recursos de los plugins
foreach ($this->dic->get(PluginManager::class)->getLoadedPlugins() as $plugin) {
$base = str_replace(BASE_PATH, '', $plugin->getBase());
$base = str_replace(APP_ROOT, '', $plugin->getBase());
$base .= DIRECTORY_SEPARATOR . 'public';
$jsResources = $plugin->getJsResources();
$cssResources = $plugin->getCssResources();

View File

@@ -41,7 +41,9 @@ final class IndexController extends ControllerBase
*/
public function indexAction()
{
if (!$this->session->isLoggedIn()) {
if ($this->session->isLoggedIn() === false
|| $this->session->getAuthCompleted() === false
) {
$this->router->response()
->redirect('index.php?r=login');
} else {

View File

@@ -25,11 +25,10 @@
namespace SP\Modules\Web\Controllers;
use SP\Core\Context\SessionContext;
use SP\Core\Crypt\Hash;
use SP\Core\Events\Event;
use SP\Core\Events\EventMessage;
use SP\Core\Exceptions\SPException;
use SP\Core\SessionUtil;
use SP\Http\Uri;
use SP\Modules\Web\Controllers\Helpers\LayoutHelper;
use SP\Modules\Web\Controllers\Traits\JsonTrait;
use SP\Services\Auth\LoginService;
@@ -54,30 +53,34 @@ final class LoginController extends ControllerBase
try {
$loginService = $this->dic->get(LoginService::class);
$from = $this->request->analyzeString('from');
if ($from) {
try {
$this->request->verifySignature($this->configData->getPasswordSalt(), 'from');
$loginService->setFrom($from);
} catch (SPException $e) {
processException($e);
}
}
$from = $this->getSignedUriFromRequest();
$loginService->setFrom($from);
$loginResponmse = $loginService->doLogin();
$forward = $this->request->getForwardedFor();
$this->checkForwarded();
if ($forward !== null) {
$this->eventDispatcher->notifyEvent('login.info',
new Event($this, EventMessage::factory()
->addDetail('Forwarded', $this->configData->isDemoEnabled() ? '***' : implode(',', $forward)))
);
}
$redirector = function ($route) use ($from) {
$uri = new Uri('index.php');
$uri->addParam('r', $route);
return $this->returnJsonResponseData(['url' => $loginResponmse->getRedirect()]);
if ($from !== null) {
return $uri->addParam('from', $from)
->getUriSigned($this->configData->getPasswordSalt());
}
return $uri->getUri();
};
$this->eventDispatcher->notifyEvent('login.finish',
new Event($this,
EventMessage::factory()
->addData('redirect', $redirector))
);
return $this->returnJsonResponseData([
'url' => $this->session->getTrasientKey('redirect') ?: $loginResponmse->getRedirect()
]);
} catch (\Exception $e) {
processException($e);
@@ -87,12 +90,27 @@ final class LoginController extends ControllerBase
}
}
/**
* checkForwarded
*/
private function checkForwarded()
{
$forward = $this->request->getForwardedFor();
if ($forward !== null) {
$this->eventDispatcher->notifyEvent('login.info',
new Event($this, EventMessage::factory()
->addDetail('Forwarded', $this->configData->isDemoEnabled() ? '***' : implode(',', $forward)))
);
}
}
/**
* Logout action
*/
public function logoutAction()
{
if ($this->session->isLoggedIn()) {
if ($this->session->isLoggedIn() === true) {
$inactiveTime = abs(round((time() - $this->session->getLastActivity()) / 60, 2));
$totalTime = abs(round((time() - $this->session->getStartActivity()) / 60, 2));
@@ -125,30 +143,13 @@ final class LoginController extends ControllerBase
*/
public function indexAction()
{
if ($this->session->isLoggedIn() === true) {
$this->router->response()
->redirect('index.php?r=index')
->send(true);
}
$this->dic->get(LayoutHelper::class)
->getCustomLayout('index', 'login');
$this->view->assign('mailEnabled', $this->configData->isMailEnabled());
// $this->view->assign('updated', SessionFactory::getAppUpdated());
$from = $this->request->analyzeString('from');
if ($from) {
try {
$this->request->verifySignature($this->configData->getPasswordSalt());
$this->view->assign('from', $from);
$this->view->assign('from_hash', Hash::signMessage($from, $this->configData->getPasswordSalt()));
} catch (SPException $e) {
processException($e);
}
}
$this->prepareSignedUriOnView();
$this->view();
}

View File

@@ -74,6 +74,8 @@ final class PluginController extends ControllerBase
* getSearchGrid
*
* @return $this
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
@@ -89,6 +91,9 @@ final class PluginController extends ControllerBase
/**
* Search action
*
* @return bool
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
@@ -138,6 +143,8 @@ final class PluginController extends ControllerBase
*
* @param $pluginId
*
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Repositories\NoSuchItemException

View File

@@ -126,6 +126,8 @@ final class ResourceController extends SimpleControllerBase
/**
* @throws SPException
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
protected function initialize()
{

View File

@@ -25,7 +25,7 @@
namespace SP\Modules\Web\Controllers;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\GuzzleException;
use SP\Core\AppInfoInterface;
use SP\Core\Exceptions\CheckException;
use SP\Http\JsonResponse;
@@ -47,7 +47,6 @@ final class StatusController extends SimpleControllerBase
* @return bool
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function checkReleaseAction()
{
@@ -92,7 +91,7 @@ final class StatusController extends SimpleControllerBase
}
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Versión no disponible'));
} catch (ClientException $e) {
} catch (GuzzleException $e) {
processException($e);
return $this->returnJsonResponseException($e);
@@ -107,7 +106,6 @@ final class StatusController extends SimpleControllerBase
* @return bool
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function checkNoticesAction()
{
@@ -140,7 +138,7 @@ final class StatusController extends SimpleControllerBase
}
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Notificaciones no disponibles'));
} catch (ClientException $e) {
} catch (GuzzleException $e) {
processException($e);
return $this->returnJsonResponseException($e);

View File

@@ -32,6 +32,7 @@ use SP\Core\Acl\Acl;
use SP\Core\Context\ContextInterface;
use SP\Core\Context\SessionContext;
use SP\Core\Events\EventDispatcher;
use SP\Core\Exceptions\SPException;
use SP\Core\PhpExtensionChecker;
use SP\Core\UI\Theme;
use SP\Http\Request;
@@ -90,6 +91,37 @@ trait WebControllerTrait
* @var PhpExtensionChecker
*/
protected $extensionChecker;
/**
* @var bool
*/
private $setup = false;
/**
* Returns the signed URI component after validating its signature.
* This component is used for deep linking
*
* @return null|string
*/
final protected function getSignedUriFromRequest()
{
if (!$this->setup) {
return null;
}
$from = $this->request->analyzeString('from');
if ($from) {
try {
$this->request->verifySignature($this->configData->getPasswordSalt(), 'from');
} catch (SPException $e) {
processException($e);
$from = null;
}
}
return $from;
}
/**
* @param ContainerInterface $dic
@@ -107,5 +139,7 @@ trait WebControllerTrait
$this->request = $dic->get(Request::class);
$this->acl = $dic->get(Acl::class);
$this->extensionChecker = $dic->get(PhpExtensionChecker::class);
$this->setup = true;
}
}

View File

@@ -139,6 +139,9 @@ final class UserPassResetController extends ControllerBase
/**
* @param null $hash
*
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
public function resetAction($hash = null)
{

View File

@@ -26,17 +26,20 @@ namespace SP\Modules\Web\Controllers;
use SP\Core\Acl\Acl;
use SP\Core\Events\Event;
use SP\Core\Events\EventDispatcherInterface;
use SP\Core\Language;
use SP\Modules\Web\Controllers\Helpers\TabsHelper;
use SP\Mvc\Controller\ExtensibleTabControllerInterface;
use SP\Mvc\View\Components\DataTab;
use SP\Mvc\View\Components\SelectItemAdapter;
use SP\Mvc\View\Template;
/**
* Class UserSettingsManagerController
*
* @package web\Controllers
*/
final class UserSettingsManagerController extends ControllerBase
final class UserSettingsManagerController extends ControllerBase implements ExtensibleTabControllerInterface
{
/**
* @var TabsHelper
@@ -89,6 +92,38 @@ final class UserSettingsManagerController extends ControllerBase
return new DataTab(__('Preferencias'), $template);
}
/**
* @param DataTab $tab
*/
public function addTab(DataTab $tab)
{
$this->tabsHelper->addTab($tab);
}
/**
* @return Template
*/
public function getView(): Template
{
return $this->view;
}
/**
* @return void
*/
public function displayView()
{
$this->view();
}
/**
* @return EventDispatcherInterface
*/
public function getEventDispatcher(): EventDispatcherInterface
{
return $this->eventDispatcher;
}
/**
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface

View File

@@ -183,7 +183,10 @@ final class Init extends ModuleBase
}
// Checks if the database is set up
if (!DatabaseUtil::checkDatabaseExist($this->container->get(Database::class)->getDbHandler(), $this->configData->getDbName())) {
if (!DatabaseUtil::checkDatabaseExist(
$this->container->get(Database::class)->getDbHandler(),
$this->configData->getDbName())
) {
$this->router->response()
->redirect('index.php?r=error/databaseError')
->send();

View File

@@ -1,5 +1,5 @@
{
"name": "nuxsmin/syspass",
"name": "syspass/syspass",
"description": "PHP web based Password Manager for business and personal use.",
"homepage": "https://syspass.org",
"minimum-stability": "stable",
@@ -32,7 +32,8 @@
"ext-pdo": "*",
"ext-dom": "*",
"ext-gd": "*",
"ext-json": "*"
"ext-json": "*",
"ext-gettext": "*"
},
"require-dev": {
"phpunit/phpunit": "^6",

View File

@@ -40,6 +40,7 @@ use SP\Core\PhpExtensionChecker;
use SP\Http\Request;
use SP\Modules\Api\Init as InitApi;
use SP\Modules\Web\Init as InitWeb;
use SP\Plugin\PluginManager;
use SP\Services\Api\ApiRequest;
use SP\Services\Api\JsonRpcResponse;
use SP\Services\Upgrade\UpgradeConfigService;
@@ -202,9 +203,14 @@ final class Bootstrap
$controllerClass = 'SP\\Modules\\' . ucfirst(APP_MODULE) . '\\Controllers\\' . ucfirst($controller) . 'Controller';
$this->initializePluginClasses();
if (!method_exists($controllerClass, $method)) {
logger($controllerClass . '::' . $method);
/** @var Response $response */
$response->code(404);
throw new RuntimeException($oops);
}
@@ -223,6 +229,11 @@ final class Bootstrap
} catch (\Exception $e) {
processException($e);
/** @var Response $response */
if ($response->status()->getCode() !== 404) {
$response->code(503);
}
return __($e->getMessage());
}
}
@@ -410,6 +421,18 @@ final class Bootstrap
}
}
/**
* initializePluginClasses
*/
protected function initializePluginClasses()
{
$loader = require APP_ROOT . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
foreach (PluginManager::getPlugins() as $name => $base) {
$loader->addPsr4($base['namespace'], $base['dir']);
}
}
/**
* @return ContainerInterface
*/

View File

@@ -188,4 +188,21 @@ interface ContextInterface
* @param string $password
*/
public function setTemporaryMasterPass(string $password);
/**
* @param string $pluginName
* @param string $key
* @param mixed $value
*
* @return mixed
*/
public function setPluginKey(string $pluginName, string $key, $value);
/**
* @param string $pluginName
* @param string $key
*
* @return mixed
*/
public function getPluginKey(string $pluginName, string $key);
}

View File

@@ -39,7 +39,7 @@ use SP\Services\User\UserLoginResponse;
final class SessionContext extends ContextBase
{
const MAX_SID_TIME = 120;
private static $isReset = false;
private static $isLocked = false;
@@ -549,4 +549,39 @@ final class SessionContext extends ContextBase
$this->setContextReference($_SESSION);
}
/**
* @param string $ctxKeyName
* @param string $key
* @param mixed $value
*
* @return mixed
*/
public function setPluginKey(string $ctxKeyName, string $key, $value)
{
/** @var ContextCollection $ctxKey */
$ctxKey = $this->getContextKey($ctxKeyName, new ContextCollection());
$this->setContextKey($ctxKeyName, $ctxKey->set($key, $value));
return $value;
}
/**
* @param string $ctxKeyName
* @param string $key
*
* @return mixed
*/
public function getPluginKey(string $ctxKeyName, string $key)
{
/** @var ContextCollection $ctxKey */
$ctxKey = $this->getContextKey($ctxKeyName);
if ($ctxKey !== null) {
return $ctxKey->get($key);
}
return null;
}
}

View File

@@ -269,4 +269,37 @@ final class StatelessContext extends ContextBase
{
$this->setTrasientKey('_tempmasterpass', $password);
}
/**
* @param string $pluginName
* @param string $key
* @param mixed $value
*
* @return mixed
*/
public function setPluginKey(string $pluginName, string $key, $value)
{
$ctxKey = $this->getContextKey('plugins');
$ctxKey[$pluginName][$key] = $value;
return $value;
}
/**
* @param string $pluginName
* @param string $key
*
* @return mixed
*/
public function getPluginKey(string $pluginName, string $key)
{
$ctxKey = $this->getContextKey('plugins');
if (isset($ctxKey[$pluginName][$key])) {
return $ctxKey[$pluginName][$key];
}
return null;
}
}

View File

@@ -25,6 +25,7 @@
namespace SP\Core\Events;
use InvalidArgumentException;
use SP\Core\Exceptions\InvalidClassException;
/**
* Class Event
@@ -61,10 +62,24 @@ final class Event
}
/**
* @param null $type
*
* @return object
* @throws InvalidClassException
*/
public function getSource()
public function getSource($type = null)
{
if ($type !== null
&& ($source = get_class($this->source)) !== $type
&& !is_subclass_of($this->source, $type)
) {
throw new InvalidClassException(
'Source type mismatch',
InvalidClassException::ERROR,
sprintf('Source: %s - Expected: %s', $source, $type)
);
}
return $this->source;
}

View File

@@ -111,12 +111,16 @@ abstract class EventDispatcherBase implements EventDispatcherInterface
public function notifyEvent($eventType, Event $event)
{
foreach ($this->observers as $observer) {
$events = $observer->getEventsString();
if (method_exists($observer, 'getEventsString')) {
$events = $observer->getEventsString();
if (!empty($events)
&& ($events === '*' || preg_match('/' . $events . '/i', $eventType))
) {
// FIXME: update receivers Event
if (!empty($events)
&& ($events === '*' || preg_match('/' . $events . '/i', $eventType))
) {
// FIXME: update receivers Event
$observer->updateEvent($eventType, $event);
}
} else {
$observer->updateEvent($eventType, $event);
}
}

View File

@@ -220,7 +220,7 @@ final class Minify
$this->addFile($filename, $minify);
}
} else {
throw new \RuntimeException('Invalid string format');
$this->addFile($files, $minify);
}
return $this;

View File

@@ -374,8 +374,11 @@ final class Request
public function verifySignature(string $key, string $param = null)
{
$result = false;
$hash = $this->params->get('h');
if (($hash = $this->params->get('h')) !== null) {
if ($hash !== null) {
// Strips out the hash param from the URI to get the
// route which will be checked against the computed HMAC
if ($param === null) {
$uri = str_replace('&h=' . $hash, '', $this->request->uri());
$uri = substr($uri, strpos($uri, '?') + 1);

View File

@@ -25,6 +25,7 @@
namespace SP\Mvc\Controller;
use SP\Core\Context\ContextInterface;
use SP\Core\Context\SessionContext;
use SP\Core\Exceptions\SPException;
use SP\Http\Json;
use SP\Http\JsonResponse;
@@ -53,13 +54,19 @@ trait ControllerTrait
/**
* Comprobar si la sesión está activa
*
* @param ContextInterface $context
* @param Request $request
* @param \Closure $onRedirect
* @param SessionContext $context
* @param Request $request
* @param \Closure $onRedirect
* @param bool $requireAuthCompleted
*/
protected function checkLoggedInSession(ContextInterface $context, Request $request, \Closure $onRedirect)
protected function checkLoggedInSession(SessionContext $context,
Request $request,
\Closure $onRedirect,
$requireAuthCompleted = true)
{
if (!$context->isLoggedIn()) {
if ($context->isLoggedIn() === false
|| $context->getAuthCompleted() !== $requireAuthCompleted
) {
if ($request->isJson()) {
$jsonResponse = new JsonResponse(__u('La sesión no se ha iniciado o ha caducado'));
$jsonResponse->setStatus(10);
@@ -69,6 +76,9 @@ trait ControllerTrait
Util::logout();
} else {
try {
// Analyzes if there is any direct route within the URL
// then it computes the route HMAC to build a signed URI
// which would be used during logging in
$route = $request->analyzeString('r');
$hash = $request->analyzeString('h');

View File

@@ -0,0 +1,52 @@
<?php
/**
* 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 <http://www.gnu.org/licenses/>.
*/
namespace SP\Mvc\Controller;
use SP\Core\Events\EventDispatcherInterface;
use SP\Mvc\View\Template;
/**
* Interface ExtensibleController
*
* @package SP\Mvc\Controller
*/
interface ExtensibleControllerInterface
{
/**
* @return Template
*/
public function getView(): Template;
/**
* @return void
*/
public function displayView();
/**
* @return EventDispatcherInterface
*/
public function getEventDispatcher(): EventDispatcherInterface;
}

View File

@@ -0,0 +1,40 @@
<?php
/**
* 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 <http://www.gnu.org/licenses/>.
*/
namespace SP\Mvc\Controller;
use SP\Mvc\View\Components\DataTab;
/**
* Interface ExtensibleTabController
*
* @package SP\Mvc\Controller
*/
interface ExtensibleTabControllerInterface extends ExtensibleControllerInterface
{
/**
* @param DataTab $tab
*/
public function addTab(DataTab $tab);
}

View File

@@ -112,10 +112,14 @@ final class Template
*/
private function checkTemplate($template, $base = null)
{
if (null === $base && null === $this->base) {
$base = null !== $base ? $base : (null !== $this->base ? $this->base : null);
if ($base === null) {
$templateFile = $this->theme->getViewsPath() . DIRECTORY_SEPARATOR . $template . self::TEMPLATE_EXTENSION;
} elseif (is_dir($base)) {
$templateFile = $base . DIRECTORY_SEPARATOR . $template . self::TEMPLATE_EXTENSION;
} else {
$templateFile = $this->theme->getViewsPath() . DIRECTORY_SEPARATOR . (null === $base ? $this->base : $base) . DIRECTORY_SEPARATOR . $template . self::TEMPLATE_EXTENSION;
$templateFile = $this->theme->getViewsPath() . DIRECTORY_SEPARATOR . $base . DIRECTORY_SEPARATOR . $template . self::TEMPLATE_EXTENSION;
}
if (!is_readable($templateFile)) {
@@ -338,7 +342,7 @@ final class Template
public function render()
{
if (count($this->templates) === 0) {
throw new FileNotFoundException(__u('La plantilla no contiene archivos'));
throw new FileNotFoundException(__('La plantilla no contiene archivos'));
}
extract($this->vars, EXTR_SKIP);

View File

@@ -2,8 +2,8 @@
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
@@ -24,6 +24,9 @@
namespace SP\Plugin;
use Psr\Container\ContainerInterface;
use SP\Services\Plugin\PluginService;
/**
* Class PluginBase
*
@@ -51,13 +54,20 @@ abstract class PluginBase implements PluginInterface
* @var int
*/
protected $enabled;
/**
* @var PluginService
*/
private $pluginService;
/**
* PluginBase constructor.
*
* @param ContainerInterface $dic
*/
public final function __construct()
public final function __construct(ContainerInterface $dic)
{
$this->init();
$this->pluginService = $dic->get(PluginService::class);
$this->init($dic);
}
/**
@@ -76,14 +86,6 @@ abstract class PluginBase implements PluginInterface
$this->type = $type;
}
/**
* @return string
*/
public function getBase()
{
return $this->base;
}
/**
* @return string
*/
@@ -100,14 +102,6 @@ abstract class PluginBase implements PluginInterface
return $this->data;
}
/**
* @param mixed $data
*/
public function setData($data)
{
$this->data = $data;
}
/**
* @return int
*/
@@ -124,6 +118,19 @@ abstract class PluginBase implements PluginInterface
$this->enabled = (int)$enabled;
}
/**
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Repositories\NoSuchItemException
*/
final public function saveData()
{
$pluginData = $this->pluginService->getByName($this->getName());
$pluginData->setData(serialize($this->data));
return $this->pluginService->update($pluginData);
}
/**
* Establecer las locales del plugin
*/
@@ -135,4 +142,12 @@ abstract class PluginBase implements PluginInterface
bindtextdomain($name, $locales);
bind_textdomain_codeset($name, 'UTF-8');
}
/**
* @return string
*/
public function getBase()
{
return $this->base;
}
}

View File

@@ -24,6 +24,7 @@
namespace SP\Plugin;
use Psr\Container\ContainerInterface;
use SP\Core\Events\Event;
use SplObserver;
@@ -36,8 +37,10 @@ interface PluginEventReceiver extends SplObserver
{
/**
* Inicialización del observador
*
* @param ContainerInterface $dic
*/
public function init();
public function init(ContainerInterface $dic);
/**
* Evento de actualización

View File

@@ -24,6 +24,8 @@
namespace SP\Plugin;
use SP\DataModel\PluginData;
/**
* Interface PluginInterface
*
@@ -86,9 +88,9 @@ interface PluginInterface extends PluginEventReceiver
public function getData();
/**
* @param mixed $data
* @param PluginData $pluginData
*/
public function setData($data);
public function onLoadData(PluginData $pluginData);
/**
* @return int

View File

@@ -25,12 +25,16 @@
namespace SP\Plugin;
use ReflectionClass;
use SP\Bootstrap;
use SP\Core\Context\ContextInterface;
use SP\Core\Events\Event;
use SP\Core\Events\EventDispatcher;
use SP\Core\Events\EventMessage;
use SP\Core\Exceptions\ConstraintException;
use SP\Core\Exceptions\QueryException;
use SP\DataModel\PluginData;
use SP\Repositories\NoSuchItemException;
use SP\Services\Install\Installer;
use SP\Services\Plugin\PluginService;
/**
@@ -40,6 +44,10 @@ use SP\Services\Plugin\PluginService;
*/
final class PluginManager
{
/**
* @var array
*/
private static $pluginsAvailable;
/**
* @var array Plugins habilitados
*/
@@ -77,6 +85,39 @@ final class PluginManager
$this->pluginService = $pluginService;
$this->context = $context;
$this->eventDispatcher = $eventDispatcher;
self::$pluginsAvailable = self::getPlugins();
}
/**
* Devuelve la lista de Plugins disponibles em el directorio
*
* @return array
*/
public static function getPlugins()
{
$dir = dir(PLUGINS_PATH);
$plugins = [];
if ($dir) {
while (false !== ($entry = $dir->read())) {
$pluginDir = PLUGINS_PATH . DIRECTORY_SEPARATOR . $entry;
$pluginFile = $pluginDir . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Plugin.php';
if (strpos($entry, '.') === false
&& is_dir($pluginDir)
&& file_exists($pluginFile)
) {
logger(sprintf('Plugin found: %s', $pluginDir));
$plugins[$entry] = require $pluginDir . DIRECTORY_SEPARATOR . 'base.php';
}
}
$dir->close();
}
return $plugins;
}
/**
@@ -88,35 +129,200 @@ final class PluginManager
*/
public function getPluginInfo($name)
{
$name = ucfirst($name);
if (isset(self::$pluginsAvailable[$name])) {
return $this->loadPluginClass(
$name,
self::$pluginsAvailable[$name]['namespace']
);
}
$pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin';
return null;
}
/**
* Cargar un plugin
*
* @param string $name Nombre del plugin
* @param string $namespace
*
* @return PluginInterface
*/
public function loadPluginClass(string $name, string $namespace)
{
$name = ucfirst($name);
if (isset($this->loadedPlugins[$name])) {
return $this->loadedPlugins[$name];
}
try {
$reflectionClass = new \ReflectionClass($pluginClass);
$class = $namespace . 'Plugin';
$reflectionClass = new ReflectionClass($class);
/** @var PluginBase $plugin */
$plugin = $reflectionClass->newInstance();
/** @var PluginInterface $plugin */
$plugin = $reflectionClass->newInstance(Bootstrap::getContainer());
$this->loadedPlugins[$name] = $plugin;
// Do not load plugin's data if not compatible.
// Just return the plugin instance before disabling it
if (self::checkCompatibility($plugin) === false) {
$this->eventDispatcher->notifyEvent('plugin.load.error',
new Event($this, EventMessage::factory()
->addDescription(sprintf(__('Versión de plugin no compatible (%s)'), implode('.', $plugin->getVersion()))))
);
return $plugin;
} catch (\ReflectionException $e) {
$this->disabledPlugins[] = $name;
return $plugin;
}
$pluginData = $this->pluginService->getByName($name);
if ($pluginData->getEnabled() === 1) {
$plugin->onLoadData($pluginData);
return $plugin;
} else {
$this->disabledPlugins[] = $name;
}
} catch (\Exception $e) {
processException($e);
$this->eventDispatcher->notifyEvent('exception',
new Event($e, EventMessage::factory()
->addDescription(sprintf(__('No es posible cargar el plugin "%s"'), $name)))
->addDescription(sprintf(__('No es posible cargar el plugin "%s"'), $name))
->addDescription($e->getMessage())
->addDetail(__u('Plugin'), $name))
);
}
return null;
}
/**
* @param PluginInterface $plugin
*
* @return bool
* @throws ConstraintException
* @throws NoSuchItemException
* @throws QueryException
*/
public function checkCompatibility(PluginInterface $plugin)
{
$pluginVersion = implode('.', $plugin->getCompatibleVersion());
$appVersion = implode('.', array_slice(Installer::VERSION, 0, 2));
if (version_compare($pluginVersion, $appVersion) === -1) {
$this->pluginService->toggleEnabledByName($plugin->getName(), false);
$this->eventDispatcher->notifyEvent('edit.plugin.disable',
new Event($this, EventMessage::factory()
->addDetail(__u('Plugin deshabilitado'), $plugin->getName()))
);
return false;
}
return true;
}
/**
* Loads the available and enabled plugins
*
* @throws ConstraintException
* @throws QueryException
* @throws \SP\Core\Exceptions\SPException
*/
public function loadPlugins()
{
$available = array_keys(self::$pluginsAvailable);
$processed = [];
// Process registered plugins in the database
foreach ($this->pluginService->getAll() as $plugin) {
$in = in_array($plugin->getName(), $available, true);
if ($in === true) {
if ($plugin->getEnabled() === 1) {
$this->load($plugin->getName());
}
if ($plugin->getAvailable() === 0) {
$this->pluginService->toggleAvailable($plugin->getId(), true);
$this->eventDispatcher->notifyEvent('edit.plugin.available',
new Event($this, EventMessage::factory()
->addDetail(__u('Plugin disponible'), $plugin->getName()))
);
$this->load($plugin->getName());
}
} else {
$this->pluginService->toggleAvailable($plugin->getId(), false);
$this->eventDispatcher->notifyEvent('edit.plugin.unavailable',
new Event($this, EventMessage::factory()
->addDetail(__u('Plugin no disponible'), $plugin->getName()))
);
}
$processed[] = $plugin->getName();
}
// Search for available plugins and not registered in the database
foreach (array_diff($available, $processed) as $plugin) {
$this->registerPlugin($plugin);
$this->load($plugin);
}
}
/**
* @param string $pluginName
*/
private function load(string $pluginName)
{
$plugin = $this->loadPluginClass(
$pluginName,
self::$pluginsAvailable[$pluginName]['namespace']
);
if ($plugin !== null) {
logger(sprintf('Plugin loaded: %s', $pluginName));
$this->eventDispatcher->notifyEvent('plugin.load',
new Event($this, EventMessage::factory()
->addDetail(__u('Plugin cargado'), $pluginName))
);
$this->loadedPlugins[$pluginName] = $plugin;
$this->eventDispatcher->attach($plugin);
}
}
/**
* @param string $name
*
* @throws ConstraintException
* @throws QueryException
*/
private function registerPlugin(string $name)
{
$pluginData = new PluginData();
$pluginData->setName($name);
$pluginData->setEnabled(false);
$this->pluginService->create($pluginData);
$this->eventDispatcher->notifyEvent('create.plugin',
new Event($this, EventMessage::factory()
->addDescription(__u('Nuevo Plugin'))
->addDetail(__u('Nombre'), $name)
));
$this->disabledPlugins[] = $name;
}
/**
* Comprobar disponibilidad de plugins habilitados
*
@@ -127,6 +333,11 @@ final class PluginManager
foreach ($this->getEnabledPlugins() as $plugin) {
if (!in_array($plugin, $this->loadedPlugins)) {
$this->pluginService->toggleAvailableByName($plugin, false);
$this->eventDispatcher->notifyEvent('edit.plugin.unavailable',
new Event($this, EventMessage::factory()
->addDetail(__u('Plugin deshabilitado'), $plugin->getName()))
);
}
}
}
@@ -153,113 +364,6 @@ final class PluginManager
return $this->enabledPlugins;
}
/**
* Cargar los Plugins disponibles
*/
public function loadPlugins()
{
$classLoader = new \SplClassLoader('Plugins', PLUGINS_PATH);
$classLoader->register();
foreach ($this->getPlugins() as $name) {
if (($plugin = $this->loadPlugin($name)) !== null) {
logger('Plugin loaded: ' . $name);
$this->eventDispatcher->attach($plugin);
}
}
}
/**
* Devuelve la lista de Plugins disponibles em el directorio
*
* @return array
*/
public function getPlugins()
{
$pluginDirH = opendir(PLUGINS_PATH);
$plugins = [];
if ($pluginDirH) {
while (false !== ($entry = readdir($pluginDirH))) {
$pluginDir = PLUGINS_PATH . DIRECTORY_SEPARATOR . $entry;
if (strpos($entry, '.') === false
&& is_dir($pluginDir)
&& file_exists($pluginDir . DIRECTORY_SEPARATOR . $entry . 'Plugin.php')
) {
$plugins[] = $entry;
}
}
closedir($pluginDirH);
}
return $plugins;
}
/**
* Cargar un plugin
*
* @param string $name Nombre del plugin
*
* @return PluginInterface
*/
public function loadPlugin($name)
{
$name = ucfirst($name);
if (isset($this->loadedPlugins[$name])) {
return $this->loadedPlugins[$name];
}
try {
$pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin';
$reflectionClass = new ReflectionClass($pluginClass);
/** @var PluginInterface $plugin */
$plugin = $reflectionClass->newInstance();
try {
$pluginData = $this->pluginService->getByName($plugin);
if ($pluginData->getEnabled() === 1) {
if (!empty($pluginData->getData())) {
$pluginData->setData(unserialize($pluginData->getData()));
}
return $plugin;
} else {
$this->disabledPlugins[] = $name;
}
} catch (NoSuchItemException $noSuchItemException) {
$pluginData = new PluginData();
$pluginData->setName($name);
$pluginData->setEnabled(0);
$this->pluginService->create($pluginData);
$this->eventDispatcher->notifyEvent('create.plugin',
new Event($this, EventMessage::factory()
->addDescription(__u('Nuevo Plugin'))
->addDetail(__u('Nombre'), $name)
));
$this->disabledPlugins[] = $name;
}
} catch (\Exception $e) {
processException($e);
$this->eventDispatcher->notifyEvent('exception',
new Event($e, EventMessage::factory()
->addDescription(sprintf(__('No es posible cargar el plugin "%s"'), $name)))
);
}
return null;
}
/**
* Devolver los plugins cargados
*

View File

@@ -66,6 +66,7 @@ final class DatabaseLogHandler extends Provider implements EventReceiver
* </p>
*
* @return void
* @throws \SP\Core\Exceptions\InvalidClassException
* @since 5.1.0
*/
public function update(SplSubject $subject)
@@ -78,6 +79,8 @@ final class DatabaseLogHandler extends Provider implements EventReceiver
*
* @param string $eventType Nombre del evento
* @param Event $event Objeto del evento
*
* @throws \SP\Core\Exceptions\InvalidClassException
*/
public function updateEvent($eventType, Event $event)
{

View File

@@ -56,6 +56,7 @@ interface LogInterface
'show.authToken',
'clear.eventlog',
'clear.track',
'unlock.track'
'unlock.track',
'plugin.load.error'
];
}

View File

@@ -386,7 +386,8 @@ final class LoginService extends Service
}
$this->eventDispatcher->notifyEvent('login.session.load',
new Event($this, EventMessage::factory()->addDetail(__u('Usuario'), $userLoginResponse->getLogin()))
new Event($this, EventMessage::factory()
->addDetail(__u('Usuario'), $userLoginResponse->getLogin()))
);
}

View File

@@ -54,36 +54,22 @@ final class ErrorUtil
* @param \SP\Mvc\View\Template $view
* @param \Exception $e
* @param string $replace Template replacement
* @param bool $render
*/
public static function showExceptionInView(Template $view, \Exception $e, $replace = null)
{
switch (get_class($e)) {
case UpdatedMasterPassException::class:
self::showErrorInView($view, self::ERR_UPDATE_MPASS, $replace);
break;
case UnauthorizedPageException::class:
self::showErrorInView($view, self::ERR_PAGE_NO_PERMISSION, $replace);
break;
case AccountPermissionException::class:
self::showErrorInView($view, self::ERR_ACCOUNT_NO_PERMISSION, $replace);
break;
default;
self::showErrorInView($view, self::ERR_EXCEPTION, $replace);
}
}
/**
* Establecer la plantilla de error con el código indicado.
*
* @param \SP\Mvc\View\Template $view
* @param int $type int con el tipo de error
* @param string $replace Template replacement
*/
public static function showErrorInView(Template $view, $type, $replace = null)
public static function showExceptionInView(Template $view,
\Exception $e,
$replace = null,
$render = true)
{
if ($replace === null) {
$view->resetTemplates();
$view->resetContentTemplates();
if ($view->hashContentTemplates()) {
$view->resetContentTemplates();
$view->addContentTemplate('error', Template::PARTIALS_DIR);
} else {
$view->addTemplate('error', Template::PARTIALS_DIR);
}
} else {
if ($view->hashContentTemplates()) {
$view->removeContentTemplate($replace);
@@ -94,6 +80,30 @@ final class ErrorUtil
}
}
switch (get_class($e)) {
case UpdatedMasterPassException::class:
self::showErrorInView($view, self::ERR_UPDATE_MPASS, $render);
break;
case UnauthorizedPageException::class:
self::showErrorInView($view, self::ERR_PAGE_NO_PERMISSION, $render);
break;
case AccountPermissionException::class:
self::showErrorInView($view, self::ERR_ACCOUNT_NO_PERMISSION, $render);
break;
default;
self::showErrorInView($view, self::ERR_EXCEPTION, $render);
}
}
/**
* Establecer la plantilla de error con el código indicado.
*
* @param \SP\Mvc\View\Template $view
* @param int $type int con el tipo de error
* @param bool $render
*/
public static function showErrorInView(Template $view, $type, $render = true)
{
$error = self::getErrorTypes($type);
$view->append('errors',
@@ -103,15 +113,15 @@ final class ErrorUtil
'hint' => $error['hint']
]);
try {
echo $view->render();
} catch (FileNotFoundException $e) {
processException($e);
if ($render) {
try {
echo $view->render();
} catch (FileNotFoundException $e) {
processException($e);
echo $e->getMessage();
echo $e->getMessage();
}
}
die();
}
/**

View File

@@ -209,38 +209,45 @@ final class Util
/**
* Cast an object to another class, keeping the properties, but changing the methods
*
* @param string $dstClass Class name
* @param string $dstClass Destination class name
* @param string|object $serialized
* @param string $srcClass Nombre de la clase serializada
* @param string $srcClass Old class name for removing from private methods
*
* @return mixed
* @link http://blog.jasny.net/articles/a-dark-corner-of-php-class-casting/
*/
public static function unserialize($dstClass, $serialized, $srcClass = null)
{
if (!is_object($serialized)) {
preg_match('/^O:\d+:"(?P<class>[^"]++)"/', $serialized, $matches);
$match = preg_match_all('/O:\d+:"(?P<class>[^"]++)"/', $serialized, $matches);
if (class_exists($matches['class'])
&& $matches['class'] === $dstClass
) {
return unserialize($serialized);
$process = false;
if ($match) {
foreach ($matches['class'] as $class) {
if (!class_exists($class)
|| $class !== $dstClass
) {
$process = true;
}
}
if ($process === false) {
return unserialize($serialized);
}
}
// Si se indica la clase origen, se elimina el nombre
// de la clase en los métodos privados
if ($srcClass !== null) {
$serializedOut = preg_replace_callback(
'/:\d+:"\x00' . preg_quote($srcClass, '/') . '\x00(\w+)"/',
function ($matches) {
return ':' . strlen($matches[1]) . ':"' . $matches[1] . '"';
},
$serialized);
// Serialized data needs to be processed to change the class name
if ($process === true) {
// If source class is set, it will try to clean up the class name from private methods
if ($srcClass !== null) {
$serialized = preg_replace_callback(
'/:\d+:"\x00' . preg_quote($srcClass, '/') . '\x00(\w+)"/',
function ($matches) {
return ':' . strlen($matches[1]) . ':"' . $matches[1] . '"';
},
$serialized);
}
return self::castToClass($serializedOut, $dstClass);
}
if ($matches['class'] !== $dstClass) {
return self::castToClass($serialized, $dstClass);
}
}
@@ -251,20 +258,18 @@ final class Util
/**
* Cast an object to another class
*
* @param $object
* @param $cast
* @param $class
*
* @return mixed
*/
public static function castToClass($object, $class)
public static function castToClass($cast, $class)
{
// should avoid '__PHP_Incomplete_Class'?
// TODO: should avoid '__PHP_Incomplete_Class'?
if (is_object($object)) {
return unserialize(preg_replace('/^O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', serialize($object)));
}
$cast = is_object($cast) ? serialize($cast) : $cast;
return unserialize(preg_replace('/^O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', $object));
return unserialize(preg_replace('/O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', $cast));
}
/**

View File

@@ -1351,11 +1351,28 @@ sysPass.Actions = function (log) {
toggle: function ($obj) {
log.info("plugin:enable");
tabs.save($obj, function () {
// Recargar para cargar/descargar el plugin
setTimeout(function () {
sysPassApp.util.redirect("index.php");
}, 2000);
tabs.state.update($obj);
const itemId = $obj.data("item-id");
const opts = sysPassApp.requests.getRequestOpts();
opts.url = ajaxUrl.entrypoint;
opts.method = "get";
opts.data = {
r: $obj.data("action-route") + "/" + itemId,
sk: sysPassApp.sk.get(),
isAjax: 1
};
sysPassApp.requests.getActionCall(opts, function (json) {
sysPassApp.msg.out(json);
if (json.status === 0) {
// Recargar para cargar/descargar el plugin
setTimeout(function () {
sysPassApp.util.redirect("index.php");
}, 2000);
}
});
},
reset: function ($obj) {

View File

@@ -42,14 +42,15 @@ var b=sysPassApp.requests.getRequestOpts();b.url=e.entrypoint+"/?r="+a.data("act
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='<div id="alert"><p id="alert-text">'+sysPassApp.config.LANG[48]+"</p></div>";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)}}})},delete:function(a){d.info("link:delete");var b='<div id="alert"><p id="alert-text">'+
sysPassApp.config.LANG[12]+"</p></div>";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=a.data("item-id");var c=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint+"?r="+a.data("action-route")+"/"+b;sysPassApp.requests.getActionCall(c,function(b){sysPassApp.msg.out(b);0===b.status&&f({r:a.data("action-next")+
"/"+a.data("account-id")})})}}})},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(b){sysPassApp.msg.out(b);0===b.status&&((b=a.data("action-next"))?f({r:b+"/"+a.data("account-id")}):f({r:g.state.tab.route,tabIndex:g.state.tab.index}))})}},eventlog:{clear:function(a){var b='<div id="alert"><p id="alert-text">'+
sysPassApp.config.LANG[20]+"</p></div>";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)}}})}},ajaxUrl:e,plugin:{toggle:function(a){d.info("plugin:enable");g.save(a,function(){setTimeout(function(){sysPassApp.util.redirect("index.php")},2E3)})},reset:function(a){d.info("plugin:reset");var b='<div id="alert"><p id="alert-text">'+
sysPassApp.config.LANG[58]+"</p></div>";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=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.method="get";c.data={r:a.data("action-route")+(0===b.length?"/"+a.data("item-id"):""),items:b,sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(c,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):h(a.data.html)})}},items:{get:function(a){d.info("items:get");var b=a[0].selectize;
b.clearOptions();b.load(function(c){var d=sysPassApp.requests.getRequestOpts();d.url=e.entrypoint;d.method="get";d.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:a.data("sk")};sysPassApp.requests.getActionCall(d,function(d){c(d.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,c=b.getValue();b.clearOptions();b.load(function(d){var f=sysPassApp.requests.getRequestOpts();
f.url=e.entrypoint;f.method="get";f.data={r:a.data("item-route"),sk:sysPassApp.sk.get()};sysPassApp.requests.getActionCall(f,function(a){d(a);b.setValue(c,!0)})})}},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&&
h(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='<div id="alert"><p id="alert-text">'+sysPassApp.config.LANG[57]+"</p></div>";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)})}}})}},track:{unlock:function(a){d.info("track:unlock");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);g.refresh(a)})},clear:function(a){d.info("track:clear");var b='<div id="alert"><p id="alert-text">'+sysPassApp.config.LANG[71]+"</p></div>";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)}}})}}}};
sysPassApp.config.LANG[20]+"</p></div>";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)}}})}},ajaxUrl:e,plugin:{toggle:function(a){d.info("plugin:enable");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(a){sysPassApp.msg.out(a);0===a.status&&setTimeout(function(){sysPassApp.util.redirect("index.php")},2E3)})},reset:function(a){d.info("plugin:reset");var b='<div id="alert"><p id="alert-text">'+sysPassApp.config.LANG[58]+"</p></div>";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=sysPassApp.requests.getRequestOpts();c.url=e.entrypoint;c.method="get";c.data={r:a.data("action-route")+(0===b.length?"/"+a.data("item-id"):""),items:b,sk:sysPassApp.sk.get(),isAjax:1};sysPassApp.requests.getActionCall(c,
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):h(a.data.html)})}},items:{get:function(a){d.info("items:get");var b=a[0].selectize;b.clearOptions();b.load(function(c){var d=sysPassApp.requests.getRequestOpts();d.url=e.entrypoint;d.method="get";d.data={r:a.data("action-route")+"/"+a.data("item-id"),sk:a.data("sk")};sysPassApp.requests.getActionCall(d,function(d){c(d.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,c=b.getValue();b.clearOptions();b.load(function(d){var f=sysPassApp.requests.getRequestOpts();f.url=e.entrypoint;f.method="get";f.data={r:a.data("item-route"),sk:sysPassApp.sk.get()};sysPassApp.requests.getActionCall(f,function(a){d(a);b.setValue(c,!0)})})}},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&&h(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='<div id="alert"><p id="alert-text">'+sysPassApp.config.LANG[57]+
"</p></div>";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)})}}})}},track:{unlock:function(a){d.info("track:unlock");
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);g.refresh(a)})},clear:function(a){d.info("track:clear");var b='<div id="alert"><p id="alert-text">'+sysPassApp.config.LANG[71]+"</p></div>";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)}}})}}}};

View File

@@ -31,8 +31,8 @@ sysPass.Main = function () {
log.info("checkPluginUpdates");
for (const plugin in oPublic.plugins) {
if (typeof oPublic.plugins.plugin.checkVersion === "function") {
oPublic.plugins.plugin.checkVersion().then(function (json) {
if (typeof oPublic.plugins[plugin].checkVersion === "function") {
oPublic.plugins[plugin].checkVersion().then(function (json) {
if (json.status === 0 && json.data.plugin !== undefined) {
msg.info(String.format(oPublic.config.LANG[67], json.data.plugin, json.data.remoteVersion));
}
@@ -52,11 +52,13 @@ sysPass.Main = function () {
for (let i = 0; i < oPublic.config.PLUGINS.length; i++) {
const plugin = oPublic.config.PLUGINS[i];
if (typeof sysPass.Plugin[plugin] === "function") {
plugins.plugin = sysPass.Plugin[plugin]();
if (typeof sysPass.Plugins[plugin] === "function") {
plugins[plugin] = sysPass.Plugins[plugin](oPublic);
}
}
log.info(plugins);
return plugins;
};

View File

@@ -1,4 +1,4 @@
sysPass.Main=function(){var k=function(){d.info("checkPluginUpdates");for(var a in b.plugins)"function"===typeof b.plugins.plugin.checkVersion&&b.plugins.plugin.checkVersion().then(function(a){0===a.status&&void 0!==a.data.plugin&&e.info(String.format(b.config.LANG[67],a.data.plugin,a.data.remoteVersion))})},l=function(){d.info("bindPassEncrypt");$("body").on("blur",":input[type=password]",function(a){a=$(this);if(!a.hasClass("passwordfield__no-pki"))try{g(a)}catch(c){d.error(c),e.error(c)}}).on("keypress",
sysPass.Main=function(){var k=function(){d.info("checkPluginUpdates");for(var a in b.plugins)"function"===typeof b.plugins[a].checkVersion&&b.plugins[a].checkVersion().then(function(a){0===a.status&&void 0!==a.data.plugin&&e.info(String.format(b.config.LANG[67],a.data.plugin,a.data.remoteVersion))})},l=function(){d.info("bindPassEncrypt");$("body").on("blur",":input[type=password]",function(a){a=$(this);if(!a.hasClass("passwordfield__no-pki"))try{g(a)}catch(c){d.error(c),e.error(c)}}).on("keypress",
":input[type=password]",function(a){if(13===a.keyCode){a.preventDefault();a=$(this);try{g(a)}catch(c){d.error(c),e.error(c)}a.closest("form").submit()}})},m=function(){d.info("initializeClipboard");if(clipboard.isSupported())$("body").on("click",".clip-pass-button",function(){var a=sysPassApp.actions.account.copyPass($(this)).done(function(a){if(0!==a.status)return e.out(a),!1;h.set(a.csrf)});!1!==a&&clipboard.copy(a.responseJSON.data.accpass).then(function(){e.ok(b.config.LANG[45])},function(a){e.error(b.config.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){e.error(b.config.LANG[46])})}).on("click",".clip-pass-icon",function(){clipboard.copy(sysPass.Util.decodeEntities($(this.dataset.clipboardTarget).val())).then(function(){e.ok(b.config.LANG[45])},function(a){e.error(b.config.LANG[46])})}).on("click",".clip-pass-field",function(){clipboard.copy(sysPass.Util.decodeEntities(document.getElementById(this.dataset.clipboardTarget).dataset.pass)).then(function(){e.ok(b.config.LANG[45])},
function(a){e.error(b.config.LANG[46])})});else d.warn(b.config.LANG[65])},g=function(a){d.info("encryptFormValue");var c=a.val();if(""!==c&&parseInt(a.attr("data-length"))!==c.length){if(c.length>b.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:"",
@@ -9,4 +9,4 @@ case 100:this.ok(b);this.sticky(b);break;case 101:this.error(b);this.sticky(b);b
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<br/>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<e.length;g++)d=e[g].split("="),b.push(d[0]),b[d[0]]=d[1];return void 0!==a&&void 0!==b[a]?b[a]:b};return function(){d.info("init");"function"===typeof sysPass.Theme&&(b.theme=sysPass.Theme(d));b.requests=sysPass.Requests(b);
r().then(function(){if(!p()&&(b.config.PKI.AVAILABLE&&l(),!1===b.config.BROWSER.COOKIES_ENABLED&&e.sticky(b.config.LANG[64]),m(),q(),0<b.config.PLUGINS.length)){d.info(b.config.PLUGINS);d.info("initPlugins");for(var a={},c=0;c<b.config.PLUGINS.length;c++){var f=b.config.PLUGINS[c];"function"===typeof sysPass.Plugin[f]&&(a.plugin=sysPass.Plugin[f]())}b.plugins=a;!0===b.config.AUTH.LOGGEDIN&&!0===b.config.STATUS.CHECK_UPDATES&&k()}Object.freeze(b)});return b}()};
r().then(function(){if(!p()&&(b.config.PKI.AVAILABLE&&l(),!1===b.config.BROWSER.COOKIES_ENABLED&&e.sticky(b.config.LANG[64]),m(),q(),0<b.config.PLUGINS.length)){d.info(b.config.PLUGINS);d.info("initPlugins");for(var a={},c=0;c<b.config.PLUGINS.length;c++){var f=b.config.PLUGINS[c];"function"===typeof sysPass.Plugins[f]&&(a[f]=sysPass.Plugins[f](b))}d.info(a);b.plugins=a;!0===b.config.AUTH.LOGGEDIN&&!0===b.config.STATUS.CHECK_UPDATES&&k()}Object.freeze(b)});return b}()};

View File

@@ -113,8 +113,8 @@ sysPass.Triggers = function (log) {
const plugin = $obj.data("plugin");
if (plugin !== undefined && sysPassApp.plugins.plugin !== undefined) {
actions = sysPassApp.plugins.plugin;
if (plugin !== undefined && sysPassApp.plugins[plugin] !== undefined) {
actions = sysPassApp.plugins[plugin];
} else {
actions = sysPassApp.actions;
}
@@ -145,8 +145,8 @@ sysPass.Triggers = function (log) {
const plugin = $obj.data("plugin");
let actions;
if (plugin !== undefined && sysPassApp.plugins.plugin !== undefined) {
actions = sysPassApp.plugins.plugin;
if (plugin !== undefined && sysPassApp.plugins[plugin] !== undefined) {
actions = sysPassApp.plugins[plugin];
} else {
actions = sysPassApp.actions;
}

View File

@@ -1,19 +1,19 @@
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(c,e,d){c instanceof String&&(c=String(c));for(var f=c.length,a=0;a<f;a++){var b=c[a];if(e.call(d,b,a,c))return{i:a,v:b}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(c,e,d){c!=Array.prototype&&c!=Object.prototype&&(c[e]=d.value)};
$jscomp.getGlobal=function(c){return"undefined"!=typeof window&&window===c?c:"undefined"!=typeof global&&null!=global?global:c};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(c,e,d,f){if(e){d=$jscomp.global;c=c.split(".");for(f=0;f<c.length-1;f++){var a=c[f];a in d||(d[a]={});d=d[a]}c=c[c.length-1];f=d[c];e=e(f);e!=f&&null!=e&&$jscomp.defineProperty(d,c,{configurable:!0,writable:!0,value:e})}};
$jscomp.polyfill("Array.prototype.find",function(c){return c?c:function(c,d){return $jscomp.findInternal(this,c,d).v}},"es6","es3");
sysPass.Triggers=function(c){var e=function(a){var b={valueField:"id",labelField:"name",searchField:["name"],onInitialize:function(){var a=$(this.$wrapper[0]),b=$(this.$input[0]).siblings(".btn-add-select");1===b.length&&a.append(b)}};a.find(".select-box").each(function(a){var c=$(this);a={};!0===c.data("create")&&(a.create=!0);b.plugins=c.hasClass("select-box-deselect")?{clear_selection:{title:sysPassApp.config.LANG[51]}}:{};if(c.data("onchange")){var g=c.data("onchange").split("/");b.onChange=function(a){if(0<
a)if(2===g.length)sysPassApp.actions[g[0]][g[1]](c);else sysPassApp.actions[g[0]](c)}}c.selectize($.extend(a,b))});a.find("#allowed_exts").selectize({create:function(a){return{value:a.toUpperCase(),text:a.toUpperCase()}},createFilter:/^[a-z0-9]{1,4}$/i,plugins:["remove_button"]});a.find("#wikifilter").selectize({create:!0,createFilter:/^[a-z0-9:._-]+$/i,plugins:["remove_button"]});a.find(".select-items-tag").selectize({create:function(a){return{value:a.toLowerCase(),text:a.toLowerCase()}},createFilter:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,
plugins:["remove_button"]})},d={main:function(a){c.info("views:main");clipboard.isSupported()||sysPassApp.msg.info(sysPassApp.config.LANG[65]);$(".btn-menu").click(function(){var a=$(this);"1"===a.attr("data-history-reset")&&sysPassApp.requests.history.reset();sysPassApp.actions.doAction({r:a.data("route")},a.data("view"))});if(0===a.data("upgraded"))sysPassApp.actions.doAction({r:"account/index"},"search");else{a=$("#content");var b=a.data("page");d.common(a);if(""!==b&&"function"===typeof d[b])d[b]()}!0===
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(c,f,e){c instanceof String&&(c=String(c));for(var g=c.length,a=0;a<g;a++){var b=c[a];if(f.call(e,b,a,c))return{i:a,v:b}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(c,f,e){c!=Array.prototype&&c!=Object.prototype&&(c[f]=e.value)};
$jscomp.getGlobal=function(c){return"undefined"!=typeof window&&window===c?c:"undefined"!=typeof global&&null!=global?global:c};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(c,f,e,g){if(f){e=$jscomp.global;c=c.split(".");for(g=0;g<c.length-1;g++){var a=c[g];a in e||(e[a]={});e=e[a]}c=c[c.length-1];g=e[c];f=f(g);f!=g&&null!=f&&$jscomp.defineProperty(e,c,{configurable:!0,writable:!0,value:f})}};
$jscomp.polyfill("Array.prototype.find",function(c){return c?c:function(c,e){return $jscomp.findInternal(this,c,e).v}},"es6","es3");
sysPass.Triggers=function(c){var f=function(a){var b={valueField:"id",labelField:"name",searchField:["name"],onInitialize:function(){var a=$(this.$wrapper[0]),b=$(this.$input[0]).siblings(".btn-add-select");1===b.length&&a.append(b)}};a.find(".select-box").each(function(a){var c=$(this);a={};!0===c.data("create")&&(a.create=!0);b.plugins=c.hasClass("select-box-deselect")?{clear_selection:{title:sysPassApp.config.LANG[51]}}:{};if(c.data("onchange")){var d=c.data("onchange").split("/");b.onChange=function(a){if(0<
a)if(2===d.length)sysPassApp.actions[d[0]][d[1]](c);else sysPassApp.actions[d[0]](c)}}c.selectize($.extend(a,b))});a.find("#allowed_exts").selectize({create:function(a){return{value:a.toUpperCase(),text:a.toUpperCase()}},createFilter:/^[a-z0-9]{1,4}$/i,plugins:["remove_button"]});a.find("#wikifilter").selectize({create:!0,createFilter:/^[a-z0-9:._-]+$/i,plugins:["remove_button"]});a.find(".select-items-tag").selectize({create:function(a){return{value:a.toLowerCase(),text:a.toLowerCase()}},createFilter:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,
plugins:["remove_button"]})},e={main:function(a){c.info("views:main");clipboard.isSupported()||sysPassApp.msg.info(sysPassApp.config.LANG[65]);$(".btn-menu").click(function(){var a=$(this);"1"===a.attr("data-history-reset")&&sysPassApp.requests.history.reset();sysPassApp.actions.doAction({r:a.data("route")},a.data("view"))});if(0===a.data("upgraded"))sysPassApp.actions.doAction({r:"account/index"},"search");else{a=$("#content");var b=a.data("page");e.common(a);if(""!==b&&"function"===typeof e[b])e[b]()}!0===
sysPassApp.config.STATUS.CHECK_UPDATES&&sysPassApp.actions.main.getUpdates();!0===sysPassApp.config.STATUS.CHECK_NOTICES&&sysPassApp.actions.main.getNotices();"function"===typeof sysPassApp.theme.viewsTriggers.main&&sysPassApp.theme.viewsTriggers.main()},search:function(){c.info("views:search");var a=$("#frmSearch");0!==a.length&&(a.find("input[name='search']").on("keyup",function(b){b.preventDefault();13!==b.which&&13!==b.keyCode||a.submit()}),a.find("select, #rpp").on("change",function(){a.submit()}),
a.find("button.btn-clear").on("click",function(b){b.preventDefault();a.find('input[name="searchfav"]').val(0);a[0].reset()}),a.find("input:text:visible:first").focus(),$("#globalSearch").click(function(){var b=1==$(this).prop("checked")?1:0;a.find("input[name='gsearch']").val(b);a.submit()}),"function"===typeof sysPassApp.theme.viewsTriggers.search&&sysPassApp.theme.viewsTriggers.search())},login:function(){c.info("views:login");var a=$("#frmLogin");sysPassApp.config.AUTH.AUTHBASIC_AUTOLOGIN&&"0"===
a.find("input[name='loggedOut']").val()&&(c.info("views:login:autologin"),sysPassApp.msg.info(sysPassApp.config.LANG[66]),sysPassApp.actions.main.login(a));a.find("input:visible:first").focus()},userpassreset:function(){c.info("views:userpassreset");var a=$("#frmUserPassReset");sysPassApp.theme.passwordDetect(a)},footer:function(){c.info("views:footer")},common:function(a){c.info("views:common");e(a);var b=a.find(":input [name='sk']");0<b.length&&sysPassApp.sk.set(b.val());"function"===typeof sysPassApp.theme.viewsTriggers.common&&
sysPassApp.theme.viewsTriggers.common(a);f();sysPassApp.triggers.updateFormHash(a)},datatabs:function(){c.info("views:datatabs");$(".datagrid-action-search>form").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<a.length){var b=sysPassApp.util.fileUpload(a);b.url=sysPassApp.actions.ajaxUrl.entrypoint+"?r="+a.data("action-route");b.allowedExts=sysPassApp.config.FILES.IMPORT_ALLOWED_EXTS;
b.beforeSendAction=function(){b.setRequestData({sk:sysPassApp.sk.get(),csvDelimiter:$("#csvDelimiter").val(),importPwd:$("#importPwd").val(),importMasterPwd:$("#importMasterPwd").val(),import_defaultuser:$("#import_defaultuser").val(),import_defaultgroup:$("#import_defaultgroup").val()})}}},account:function(){c.info("views:account");var a=$("#list-account-files");0<a.length&&sysPassApp.actions.account.listFiles(a);var b=$("#drop-account-files");if(0<b.length){var g=sysPassApp.util.fileUpload(b);g.url=
sysPassApp.actions.ajaxUrl.entrypoint+"?r="+b.data("action-route")+"/"+b.data("item-id");g.allowedExts=sysPassApp.config.FILES.ACCOUNT_ALLOWED_EXTS;g.requestDoneAction=function(){sysPassApp.actions.account.listFiles(a)}}b=$("#parent_account_id");0<b.length&&(b.on("change",function(){var a=$(this),b=$("#accountpass,#accountpassR");0<a[0].value?b.each(function(){$(this).prop("disabled","true");$(this).prop("required","false")}):b.each(function(){$(this).prop("disabled","");$(this).prop("required","true")})}),
sysPassApp.actions.items.get(b));$("input:text:visible:first").focus()},install:function(){c.info("views:install");var a=$("#frmInstall");sysPassApp.theme.passwordDetect(a);e(a)}},f=function(){c.info("initializeTags");$(".select-box-tags").selectize({persist:!1,valueField:"id",labelField:"name",searchField:["name"],plugins:["remove_button"],onInitialize:function(){var a=$(this.$wrapper[0]),b=$(this.$input[0]);b.attr("data-hash",sysPassApp.util.hash.md5(this.getValue().join()));var c=b.data("currentItemId");
void 0!==c&&this.removeOption(c,!0);c=b.siblings(".btn-add-select");1===c.length&&a.append(c);b=b.siblings(".select-icon");1===b.length&&a.prepend(b)},onChange:function(){var a=$(this.$input[0]),b=sysPassApp.util.hash.md5(this.getValue().join())!==a.data("hash");a.attr("data-updated",b)}})};return{views:d,selectDetect:e,updateSk:function(){$("#content").find("[data-sk]").each(function(){c.info("updateSk");$(this).data("sk",sysPassApp.sk.get())})},updateFormHash:function(a){c.info("updateFormHash");
a.find("input[name='loggedOut']").val()&&(c.info("views:login:autologin"),sysPassApp.msg.info(sysPassApp.config.LANG[66]),sysPassApp.actions.main.login(a));a.find("input:visible:first").focus()},userpassreset:function(){c.info("views:userpassreset");var a=$("#frmUserPassReset");sysPassApp.theme.passwordDetect(a)},footer:function(){c.info("views:footer")},common:function(a){c.info("views:common");f(a);var b=a.find(":input [name='sk']");0<b.length&&sysPassApp.sk.set(b.val());"function"===typeof sysPassApp.theme.viewsTriggers.common&&
sysPassApp.theme.viewsTriggers.common(a);g();sysPassApp.triggers.updateFormHash(a)},datatabs:function(){c.info("views:datatabs");$(".datagrid-action-search>form").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<a.length){var b=sysPassApp.util.fileUpload(a);b.url=sysPassApp.actions.ajaxUrl.entrypoint+"?r="+a.data("action-route");b.allowedExts=sysPassApp.config.FILES.IMPORT_ALLOWED_EXTS;
b.beforeSendAction=function(){b.setRequestData({sk:sysPassApp.sk.get(),csvDelimiter:$("#csvDelimiter").val(),importPwd:$("#importPwd").val(),importMasterPwd:$("#importMasterPwd").val(),import_defaultuser:$("#import_defaultuser").val(),import_defaultgroup:$("#import_defaultgroup").val()})}}},account:function(){c.info("views:account");var a=$("#list-account-files");0<a.length&&sysPassApp.actions.account.listFiles(a);var b=$("#drop-account-files");if(0<b.length){var d=sysPassApp.util.fileUpload(b);d.url=
sysPassApp.actions.ajaxUrl.entrypoint+"?r="+b.data("action-route")+"/"+b.data("item-id");d.allowedExts=sysPassApp.config.FILES.ACCOUNT_ALLOWED_EXTS;d.requestDoneAction=function(){sysPassApp.actions.account.listFiles(a)}}b=$("#parent_account_id");0<b.length&&(b.on("change",function(){var a=$(this),b=$("#accountpass,#accountpassR");0<a[0].value?b.each(function(){$(this).prop("disabled","true");$(this).prop("required","false")}):b.each(function(){$(this).prop("disabled","");$(this).prop("required","true")})}),
sysPassApp.actions.items.get(b));$("input:text:visible:first").focus()},install:function(){c.info("views:install");var a=$("#frmInstall");sysPassApp.theme.passwordDetect(a);f(a)}},g=function(){c.info("initializeTags");$(".select-box-tags").selectize({persist:!1,valueField:"id",labelField:"name",searchField:["name"],plugins:["remove_button"],onInitialize:function(){var a=$(this.$wrapper[0]),b=$(this.$input[0]);b.attr("data-hash",sysPassApp.util.hash.md5(this.getValue().join()));var c=b.data("currentItemId");
void 0!==c&&this.removeOption(c,!0);c=b.siblings(".btn-add-select");1===c.length&&a.append(c);b=b.siblings(".select-icon");1===b.length&&a.prepend(b)},onChange:function(){var a=$(this.$input[0]),b=sysPassApp.util.hash.md5(this.getValue().join())!==a.data("hash");a.attr("data-updated",b)}})};return{views:e,selectDetect:f,updateSk:function(){$("#content").find("[data-sk]").each(function(){c.info("updateSk");$(this).data("sk",sysPassApp.sk.get())})},updateFormHash:function(a){c.info("updateFormHash");
a=void 0!==a?a.find(".form-action[data-hash]"):$(".form-action[data-hash]");0<a.length&&a.each(function(){var a=$(this);a.attr("data-hash",sysPassApp.util.hash.md5(a.serialize()))})},bodyHooks:function(){c.info("bodyHooks");$("body").on("click","button.btn-action[data-onclick][type='button'],li.btn-action[data-onclick],span.btn-action[data-onclick],i.btn-action[data-onclick],a.btn-action[data-onclick],.btn-action-pager[data-onclick]",function(){var a=$(this);c.info("handleActionButton: "+a.attr("id"));
var b=a.data("onclick").split("/");var d=void 0!==a.data("plugin")&&void 0!==sysPassApp.plugins.plugin?sysPassApp.plugins.plugin:sysPassApp.actions;if(2===b.length)d[b[0]][b[1]](a);else d[b[0]](a)}).on("click",".btn-back",function(){if(0<sysPassApp.requests.history.length()){c.info("back");var a=sysPassApp.requests.history.del();sysPassApp.requests.getActionCall(a,a.callback)}}).on("submit",".form-action",function(a){a.preventDefault();a=$(this);c.info("formAction");var b=a.attr("data-hash"),d=sysPassApp.util.hash.md5(a.serialize());
if(b===d)sysPassApp.msg.ok(sysPassApp.config.LANG[55]);else if(b=void 0!==a.data("plugin")&&void 0!==sysPassApp.plugins.plugin?sysPassApp.plugins.plugin:sysPassApp.actions,d=a.data("onsubmit").split("/"),a.find("input[name='sk']").val(sysPassApp.sk.get()),2===d.length)b[d[0]][d[1]](a);else b[d[0]](a)}).on("click",".btn-help[data-help]",function(){var a=$(this);a=$.find("div[for='"+a.data("help")+"']");if(0<a.length){var b=sysPassApp.config.LANG[54]+" - "+a[0].getAttribute("title")||sysPassApp.config.LANG[54];
var b=a.data("onclick").split("/");var d=a.data("plugin");d=void 0!==d&&void 0!==sysPassApp.plugins[d]?sysPassApp.plugins[d]:sysPassApp.actions;if(2===b.length)d[b[0]][b[1]](a);else d[b[0]](a)}).on("click",".btn-back",function(){if(0<sysPassApp.requests.history.length()){c.info("back");var a=sysPassApp.requests.history.del();sysPassApp.requests.getActionCall(a,a.callback)}}).on("submit",".form-action",function(a){a.preventDefault();a=$(this);c.info("formAction");var b=a.attr("data-hash"),d=sysPassApp.util.hash.md5(a.serialize());
if(b===d)sysPassApp.msg.ok(sysPassApp.config.LANG[55]);else if(b=a.data("plugin"),b=void 0!==b&&void 0!==sysPassApp.plugins[b]?sysPassApp.plugins[b]:sysPassApp.actions,d=a.data("onsubmit").split("/"),a.find("input[name='sk']").val(sysPassApp.sk.get()),2===d.length)b[d[0]][d[1]](a);else b[d[0]](a)}).on("click",".btn-help[data-help]",function(){var a=$(this);a=$.find("div[for='"+a.data("help")+"']");if(0<a.length){var b=sysPassApp.config.LANG[54]+" - "+a[0].getAttribute("title")||sysPassApp.config.LANG[54];
mdlDialog().show({title:b,text:a[0].innerHTML,positive:{title:sysPassApp.config.LANG[43]}})}}).on("reset",".form-action",function(a){a.preventDefault();c.info("reset");a=$(this);a.find("input:text, input:password, input:file, textarea").val("").parent("div").removeClass("is-dirty");a.find("input:radio, input:checkbox").prop("checked",!1).prop("selected",!1);a.find("input[name='start'], input[name='skey'], input[name='sorder']").val(0);a.find("select").each(function(){$(this)[0].selectize.clear(!0)});
a.submit()}).on("click",".btn-popup-close",function(a){$.magnificPopup.close()})}}};

View File

@@ -64,7 +64,7 @@ sysPass.createNS("Triggers");
sysPass.createNS("Actions");
sysPass.createNS("Requests");
sysPass.createNS("Theme");
sysPass.createNS("Plugin");
sysPass.createNS("Plugins");
sysPass.createNS("Util");
// Objeto con las funciones públicas de sysPass

View File

@@ -1 +1 @@
var sysPass={createNS:function(a){a=a.split(".");var b=sysPass;"sysPass"===a[0]&&(a=a.slice(1));for(var c=0;c<a.length;c++){var d=a[c];"undefined"===typeof b[d]&&(b[d]={});b=b[d]}return b}};sysPass.createNS("Config");sysPass.createNS("Main");sysPass.createNS("Triggers");sysPass.createNS("Actions");sysPass.createNS("Requests");sysPass.createNS("Theme");sysPass.createNS("Plugin");sysPass.createNS("Util");var sysPassApp={};$(document).on("DOMContentLoaded",function(a){sysPassApp=sysPass.Main()});
var sysPass={createNS:function(a){a=a.split(".");var b=sysPass;"sysPass"===a[0]&&(a=a.slice(1));for(var c=0;c<a.length;c++){var d=a[c];"undefined"===typeof b[d]&&(b[d]={});b=b[d]}return b}};sysPass.createNS("Config");sysPass.createNS("Main");sysPass.createNS("Triggers");sysPass.createNS("Actions");sysPass.createNS("Requests");sysPass.createNS("Theme");sysPass.createNS("Plugins");sysPass.createNS("Util");var sysPassApp={};$(document).on("DOMContentLoaded",function(a){sysPassApp=sysPass.Main()});

View File

@@ -9,11 +9,11 @@
<authBasicAutoLoginEnabled>1</authBasicAutoLoginEnabled>
<authBasicDomain></authBasicDomain>
<authBasicEnabled>1</authBasicEnabled>
<backup_hash>aaeac4305c3720ad2583da0b48fe9e8772baf830</backup_hash>
<backup_hash>469d8c9e4929938ef00640f07de42d56e3b9b29b</backup_hash>
<checkUpdates>0</checkUpdates>
<checknotices>0</checknotices>
<configDate>1539293913</configDate>
<configHash>f53ab0a1ef713674d6398b4e188e098b4090166c</configHash>
<configDate>1539562721</configDate>
<configHash>70ced48a5cd70bf112f386361d4c10ac603132fe</configHash>
<configSaver></configSaver>
<configVersion></configVersion>
<databaseVersion></databaseVersion>
@@ -32,7 +32,7 @@
<dokuwikiUrlBase></dokuwikiUrlBase>
<dokuwikiUser></dokuwikiUser>
<encryptSession>0</encryptSession>
<export_hash>6f2ae342398f2315be1702fa560634b8f1a3e408</export_hash>
<export_hash>0dcdb304c5e122e25fbbb97f5b9de17f87195c62</export_hash>
<filesAllowedExts>
<item type="filesAllowedExts">PDF</item>
<item type="filesAllowedExts">JPG</item>