Merge branch 'seeddms-5.0.x' into seeddms-5.1.x

This commit is contained in:
Uwe Steinmann 2016-08-10 17:53:12 +02:00
commit eebb3e996d
35 changed files with 486 additions and 189 deletions

View File

@ -68,6 +68,10 @@
- make UserView look similar to UserList
- log correct ip even after a reverse proxy (Closes #206)
- fix sql error in table creation if sql mode is set to STRICT_TRANS_TABLE
- menu entry 'Clear clipboard' will call ajax function and no longer
redirects to new page
- apply all login restrictions like guest login, restrict to ip address,
disabled account when authenticating by ldap
--------------------------------------------------------------------------------
Changes in version 4.3.27

View File

@ -145,8 +145,8 @@
- URIs are supported, e.g.: ldaps://ldap.host.com
- port: port of the authentification server
- baseDN: top level of the LDAP directory tree
- bindDN: XXX
- bindPw: XXX
- bindDN: use this dn for a first step bind, leave empty for annonymous bind
- bindPw: use this password for a first step bind
- filter: Additional filters which are to be checked
-->
<connector
@ -165,9 +165,10 @@
- host: hostname of the authentification server
- port: port of the authentification server
- baseDN: top level of the LDAP directory tree
- bindDN: use this dn for a first step bind, leave empty for annonymous bind
- bindPw: use this password for a first step bind
- filter: Additional filters which are to be checked
- accountDomainName: sample: example.com
- bindDN: XXX
- bindPw: XXX
-->
<connector
enable = "false"

View File

@ -0,0 +1,53 @@
<?php
/**
* Implementation of user authentication
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Abstract class to authenticate user
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
*/
abstract class SeedDMS_Authentication {
/**
* @var object $dms object of dms
* @access protected
*/
private $dms;
/**
* @var object $settings SeedDMS Settings
* @access protected
*/
private $settings;
function __construct($dms, $settings) { /* {{{ */
$this->dms = $dms;
$this->settings = $settings;
} /* }}} */
/**
* Do Authentication
*
* This function must check the username and login. If authentication succeeds
* the user object otherwise false must be returned. If authentication fails
* the number of failed logins should be incremented and account disabled.
*
* @param string $username
* @param string $password
* @return object|boolean user object if authentication was successful otherwise false
*/
abstract function authenticate($username, $password);
}

View File

@ -0,0 +1,74 @@
<?php
/**
* Implementation of user authentication
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
*/
require_once "inc.ClassAuthentication.php";
/**
* Abstract class to authenticate user against ѕeeddms database
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_DbAuthentication extends SeedDMS_Authentication {
/**
* @var object $dms object of dms
* @access protected
*/
private $dms;
/**
* @var object $settings SeedDMS Settings
* @access protected
*/
private $settings;
function __construct($dms, $settings) { /* {{{ */
$this->dms = $dms;
$this->settings = $settings;
} /* }}} */
/**
* Do Authentication
*
* @param string $username
* @param string $password
* @return object|boolean user object if authentication was successful otherwise false
*/
public function authenticate($username, $password) { /* {{{ */
$settings = $this->settings;
$dms = $this->dms;
// Try to find user with given login.
if($user = $dms->getUserByLogin($username)) {
$userid = $user->getID();
// Check if password matches (if not a guest user)
// Assume that the password has been sent via HTTP POST. It would be careless
// (and dangerous) for passwords to be sent via GET.
if (($userid != $settings->_guestID) && (md5($password) != $user->getPwd()) || ($userid == $settings->_guestID) && $user->getPwd() && (md5($password) != $user->getPwd())) {
/* if counting of login failures is turned on, then increment its value */
if($settings->_loginFailure) {
$failures = $user->addLoginFailure();
if($failures >= $settings->_loginFailure)
$user->setDisabled(true);
}
$user = false;
}
}
return $user;
} /* }}} */
}

View File

@ -0,0 +1,163 @@
<?php
/**
* Implementation of user authentication
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
*/
require_once "inc.ClassAuthentication.php";
/**
* Abstract class to authenticate user against ldap server
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_LdapAuthentication extends SeedDMS_Authentication {
/**
* @var object $dms object of dms
* @access protected
*/
private $dms;
/**
* @var object $settings SeedDMS Settings
* @access protected
*/
private $settings;
function __construct($dms, $settings) { /* {{{ */
$this->dms = $dms;
$this->settings = $settings;
} /* }}} */
/**
* Do ldap authentication
*
* This method supports active directory and open ldap servers. Others may work but
* are not tested.
* The authentication is done in two steps.
* 1. First an anonymous bind is done and the user who wants to login is searched
* for. If it is found the cn of that user will be used for the bind in step 2.
* If the user cannot be found the second step will use a cn: cn=<username>,<basedn>
* 2. A second bind with a password and cn will be executed. This is the actuall
* authentication. If that succeeds the user is logged in. If the user doesn't
* exist in the database, it will be created.
*
* @param string $username
* @param string $password
* @return object|boolean user object if authentication was successful otherwise false
*/
public function authenticate($username, $password) { /* {{{ */
$settings = $this->settings;
$dms = $this->dms;
if (isset($settings->_ldapPort) && is_int($settings->_ldapPort)) {
$ds = ldap_connect($settings->_ldapHost, $settings->_ldapPort);
} else {
$ds = ldap_connect($settings->_ldapHost);
}
if (!is_bool($ds)) {
/* Check if ldap base dn is set, and use ldap server if it is */
if (isset($settings->_ldapBaseDN)) {
$ldapSearchAttribut = "uid=";
$tmpDN = "cn=".$username.",".$settings->_ldapBaseDN;
}
/* Active directory has a different base dn */
if (isset($settings->_ldapType)) {
if ($settings->_ldapType==1) {
$ldapSearchAttribut = "sAMAccountName=";
$tmpDN = $username.'@'.$settings->_ldapAccountDomainName;
// Add the following if authentication with an Active Dir doesn't work
// See https://sourceforge.net/p/seeddms/discussion/general/thread/19c70d8d/
// and http://stackoverflow.com/questions/6222641/how-to-php-ldap-search-to-get-user-ou-if-i-dont-know-the-ou-for-base-dn
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
}
}
// Ensure that the LDAP connection is set to use version 3 protocol.
// Required for most authentication methods, including SASL.
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
// try an authenticated/anonymous bind first.
// If it succeeds, get the DN for the user and use it for an authentication
// with the users password.
$bind = false;
if (isset($settings->_ldapBindDN)) {
$bind = @ldap_bind($ds, $settings->_ldapBindDN, $settings->_ldapBindPw);
} else {
$bind = @ldap_bind($ds);
}
$dn = false;
/* If bind succeed, then get the dn of for the user */
if ($bind) {
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$username.")".$settings->_ldapFilter.")");
} else {
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$username);
}
if (!is_bool($search)) {
$info = ldap_get_entries($ds, $search);
if (!is_bool($info) && $info["count"]>0) {
$dn = $info[0]['dn'];
}
}
}
/* If the previous bind failed, try it with the users creditionals
* by simply setting $dn to a default string
*/
if (is_bool($dn)) {
$dn = $tmpDN;
}
/* No do the actual authentication of the user */
$bind = @ldap_bind($ds, $dn, $password);
$user = $dms->getUserByLogin($username);
if ($bind) {
// Successfully authenticated. Now check to see if the user exists within
// the database. If not, add them in if _restricted is not set,
// but do not add their password.
if (is_bool($user) && !$settings->_restricted) {
// Retrieve the user's LDAP information.
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$username.")".$settings->_ldapFilter.")");
} else {
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$username);
}
if (!is_bool($search)) {
$info = ldap_get_entries($ds, $search);
if (!is_bool($info) && $info["count"]==1 && $info[0]["count"]>0) {
$user = $dms->addUser($username, null, $info[0]['cn'][0], $info[0]['mail'][0], $settings->_language, $settings->_theme, "", 1);
}
}
}
} elseif($user) {
$userid = $user->getID();
if($settings->_loginFailure) {
$failures = $user->addLoginFailure();
if($failures >= $settings->_loginFailure)
$user->setDisabled(true);
}
$user = false;
}
ldap_close($ds);
return $user;
} else {
return false;
}
} /* }}} */
}

View File

@ -247,14 +247,24 @@ class Settings { /* {{{ */
var $_smtpUser = null;
// SMTP : password
var $_smtpPassword = null;
// LDAP
var $_ldapHost = ""; // URIs are supported, e.g.: ldaps://ldap.host.com
var $_ldapPort = 389; // Optional.
// LDAP Host, URIs are supported, e.g.: ldaps://ldap.host.com
var $_ldapHost = "";
// Port of ldap server, optional.
var $_ldapPort = 389;
// Base dn for searching users, if set the user will be search below base dn
var $_ldapBaseDN = "";
// Use this dn for an initial bind for searching the user
var $_ldapBindDN = "";
// Use this password for an initial bind for searching the user
var $_ldapBindPw = "";
// Used only by AD <username>@_ldapAccountDomainName will be used for a bind
// when the user is validated
var $_ldapAccountDomainName = "";
var $_ldapType = 1; // 0 = ldap; 1 = AD
// Type of Ldap server: 0 = ldap; 1 = AD
var $_ldapType = 1;
// Additional filter when searching for the user. If not set, the user will be searched
// below basedn and the search term 'uid=<username>' or 'sAMAccountName=<username>'
// if set the search will be (&(cn=<username>)<filter>)
var $_ldapFilter = "";
var $_converters = array(); // list of commands used to convert files to text for Indexer
var $_extensions = array(); // configuration for extensions

View File

@ -123,6 +123,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'تعريف السمة بالفعل موجود',
'attrdef_info' => '',
'attrdef_in_use' => 'تعريف السمة مشغول حاليا',
@ -415,6 +416,7 @@ URL: [url]',
'error' => 'خطأ',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'لم يتم اختيار مستند',
'error_no_folder_selected' => 'لم يتم اختيار مجلد',
@ -1252,6 +1254,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -114,6 +114,7 @@ $text = array(
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Тази дефиниция на атрибути вече съществува',
'attrdef_info' => '',
'attrdef_in_use' => 'Тази дефиниция на атрибути все още се ползва',
@ -370,6 +371,7 @@ $text = array(
'error' => 'Грешка',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Няма избрани документи',
'error_no_folder_selected' => 'Няма избрани папки',
@ -1117,6 +1119,7 @@ $text = array(
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -119,6 +119,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => '',
'attrdef_info' => '',
'attrdef_in_use' => '',
@ -375,6 +376,7 @@ URL: [url]',
'error' => '',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => '',
'error_no_folder_selected' => '',
@ -1122,6 +1124,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -130,6 +130,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definice atributů již existuje',
'attrdef_info' => '',
'attrdef_in_use' => 'Definice atributů je ještě užívána',
@ -422,6 +423,7 @@ URL: [url]',
'error' => 'Error',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Není vybrán žádný dokument.',
'error_no_folder_selected' => 'Není vybrána žádná složka',
@ -1261,6 +1263,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Přidán nový uživatel',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Schránka vymazána',
'splash_document_added' => 'Dokument přidán',
'splash_document_checkedout' => '',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (2269), dgrutsch (21)
// Translators: Admin (2272), dgrutsch (21)
$text = array(
'2_factor_auth' => '2-Faktor Authentifizierung',
@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => 'Details',
'attrdefgrp_show_list' => 'Liste',
'attrdefgrp_show_search' => 'Suche',
'attrdefgrp_show_searchlist' => 'Suchergebnis',
'attrdef_exists' => 'Attributdefinition existiert bereits',
'attrdef_info' => 'Information',
'attrdef_in_use' => 'Definition des Attributs noch in Gebrauch',
@ -427,6 +428,7 @@ URL: [url]',
'error' => 'Fehler',
'error_add_aro' => 'Fehler beim Hinzufügen des Zugriffsobjekt',
'error_add_permission' => 'Fehler beim Hinzufügen der Berechtigung',
'error_clearcache' => 'Fehler beim Löschen des Cache',
'error_importfs' => 'Fehler beim Importieren aus dem Dateisystem',
'error_no_document_selected' => 'Kein Dokument ausgewählt',
'error_no_folder_selected' => 'Kein Ordner ausgewählt',
@ -1298,6 +1300,7 @@ URL: [url]',
'splash_add_role' => 'Neue Rolle hinzugefügt',
'splash_add_to_transmittal' => 'Zur Dokumentenliste hinzugefügt',
'splash_add_user' => 'Neuen Benutzer hinzugefügt',
'splash_clearcache' => 'Cache geleert',
'splash_cleared_clipboard' => 'Zwischenablage geleert',
'splash_document_added' => 'Dokument hinzugefügt',
'splash_document_checkedout' => 'Dokument ausgecheckt',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (1418), dgrutsch (7), netixw (14)
// Translators: Admin (1421), dgrutsch (7), netixw (14)
$text = array(
'2_factor_auth' => '2-factor authentication',
@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => 'Details',
'attrdefgrp_show_list' => 'List',
'attrdefgrp_show_search' => 'Search',
'attrdefgrp_show_searchlist' => 'Search result',
'attrdef_exists' => 'Attribute definition already exists',
'attrdef_info' => 'Information',
'attrdef_in_use' => 'Attribute definition still in use',
@ -427,6 +428,7 @@ URL: [url]',
'error' => 'Error',
'error_add_aro' => 'Error while adding access request object',
'error_add_permission' => 'Error while add permission',
'error_clearcache' => 'Error while clearing cache',
'error_importfs' => 'Error while importing form file system',
'error_no_document_selected' => 'No document selected',
'error_no_folder_selected' => 'No folder selected',
@ -1299,6 +1301,7 @@ URL: [url]',
'splash_add_role' => 'Added new role',
'splash_add_to_transmittal' => 'Add to transmittal',
'splash_add_user' => 'New user added',
'splash_clearcache' => 'Cache cleared',
'splash_cleared_clipboard' => 'Clipboard cleared',
'splash_document_added' => 'Document added',
'splash_document_checkedout' => 'Document checked out',

View File

@ -130,6 +130,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definición de atributos ya existe',
'attrdef_info' => '',
'attrdef_in_use' => 'Definición de atributo en uso',
@ -422,6 +423,7 @@ URL: [url]',
'error' => 'Error',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Ningún documento seleccionado',
'error_no_folder_selected' => 'Ninguna carpeta seleccionada',
@ -1267,6 +1269,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Nuevo usuario agregado',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Portapapeles limpiado',
'splash_document_added' => 'Documento añadido',
'splash_document_checkedout' => '',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (1038), jeromerobert (50), lonnnew (9)
// Translators: Admin (1046), jeromerobert (50), lonnnew (9)
$text = array(
'2_factor_auth' => '',
@ -130,6 +130,7 @@ URL : [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'La définition d\'attribut existe déjà',
'attrdef_info' => '',
'attrdef_in_use' => 'La définition d\'attribut est en cours d\'utilisation',
@ -422,6 +423,7 @@ URL: [url]',
'error' => 'Erreur',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Aucun document sélectionné',
'error_no_folder_selected' => 'Aucun dossier sélectionné',
@ -430,7 +432,7 @@ URL: [url]',
'error_toogle_permission' => '',
'es_ES' => 'Espagnol',
'event_details' => 'Détails de l\'événement',
'exclude_items' => '',
'exclude_items' => 'Exclure des élements',
'expired' => 'Expiré',
'expires' => 'Expiration',
'expiry_changed_email' => 'Date d\'expiration modifiée',
@ -1243,6 +1245,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Nouvel utilisateur ajouté',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Presse-papier vidé',
'splash_document_added' => 'Document ajouté',
'splash_document_checkedout' => '',
@ -1332,13 +1335,13 @@ URL: [url]',
'timeline_full_add_version' => '',
'timeline_full_status_change' => '',
'timeline_selected_item' => '',
'timeline_skip_add_file' => '',
'timeline_skip_status_change_-1' => '',
'timeline_skip_status_change_-3' => '',
'timeline_skip_status_change_0' => '',
'timeline_skip_status_change_1' => '',
'timeline_skip_status_change_2' => '',
'timeline_skip_status_change_3' => '',
'timeline_skip_add_file' => 'avec attachements',
'timeline_skip_status_change_-1' => 'rejetés',
'timeline_skip_status_change_-3' => 'expirés',
'timeline_skip_status_change_0' => 'en attente de revue',
'timeline_skip_status_change_1' => 'en attente d\'approbation',
'timeline_skip_status_change_2' => 'en mode release',
'timeline_skip_status_change_3' => 'encore dans un workflow',
'timeline_status_change' => 'Version [version] : [status]',
'to' => 'Au',
'toggle_manager' => 'Basculer \'Responsable\'',

View File

@ -135,6 +135,7 @@ Internet poveznica: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definicija atributa već postoji',
'attrdef_info' => '',
'attrdef_in_use' => 'Definicija atributa se već koristi',
@ -427,6 +428,7 @@ Internet poveznica: [url]',
'error' => 'Greška',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Nije odabran dokument',
'error_no_folder_selected' => 'Nije odabrana mapa',
@ -1288,6 +1290,7 @@ Internet poveznica: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Dodan novi korisnik',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Očišćen međuspremnik',
'splash_document_added' => 'Dokument dodan',
'splash_document_checkedout' => 'Dokument odjavljen',

View File

@ -130,6 +130,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Jellemző meghatározás már létezik',
'attrdef_info' => '',
'attrdef_in_use' => 'Jellemző meghatározás még használatban van',
@ -422,6 +423,7 @@ URL: [url]',
'error' => 'Hiba',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Nincs kijelölt dokumentum',
'error_no_folder_selected' => 'Nincs kijelölt mappa',
@ -1266,6 +1268,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Új felhasználó hozzáadva',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Vágólap törölve',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definizione di Attributo già esistente',
'attrdef_info' => '',
'attrdef_in_use' => 'Definizione di Attributo ancora in uso',
@ -428,6 +429,7 @@ URL: [url]',
'error' => 'Errore',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Nessun documento selezionato',
'error_no_folder_selected' => 'Nessuna cartella selezionata',
@ -1290,6 +1292,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Utente aggiunto',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Appunti cancellati',
'splash_document_added' => 'Documento aggiunto',
'splash_document_checkedout' => 'Documento approvato',

View File

@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => '이미 존재하는 속성',
'attrdef_info' => '속성정보',
'attrdef_in_use' => '사용중인 속성 정의',
@ -427,6 +428,7 @@ URL: [url]',
'error' => '오류',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => '선택되지 문서는',
'error_no_folder_selected' => '어떤 폴더를 선택하지',
@ -1281,6 +1283,7 @@ URL : [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '새 사용자 추가',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '클립 보드 비우기',
'splash_document_added' => '문서를 추가',
'splash_document_checkedout' => '문서 체크아웃',

View File

@ -128,6 +128,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Kenmerk definitie bestaat al',
'attrdef_info' => 'Kenmerk info',
'attrdef_in_use' => 'Kenmerk definitie nog in gebruikt',
@ -420,6 +421,7 @@ URL: [url]',
'error' => 'Fout',
'error_add_aro' => 'Verzoek om toegang toegevoegd',
'error_add_permission' => 'Voeg permissie toe',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Geen document geselecteerd',
'error_no_folder_selected' => 'Geen map geselecteerd',
@ -1294,6 +1296,7 @@ URL: [url]',
'splash_add_role' => 'Nieuwe rol toegevoegd',
'splash_add_to_transmittal' => 'Toevoegen aan verzending',
'splash_add_user' => 'Nieuwe gebruiker toegevoegd',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Klembord leeg gemaakt',
'splash_document_added' => 'Nieuw document toegevoegd',
'splash_document_checkedout' => 'Document in gebruik genomen',

View File

@ -123,6 +123,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definicja atrybutu już istnieje',
'attrdef_info' => '',
'attrdef_in_use' => 'Definicja atrybutu nadal jest w użyciu',
@ -415,6 +416,7 @@ URL: [url]',
'error' => 'Błąd',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Brak wybranych dokumentów',
'error_no_folder_selected' => 'Brak wybranych katalogów',
@ -1246,6 +1248,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Dodano nowego użytkownika',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Wyczyszczono schowek',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -130,6 +130,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definição de atributo já existe',
'attrdef_info' => '',
'attrdef_in_use' => 'Definição de atributo ainda em uso',
@ -421,6 +422,7 @@ URL: [url]',
'error' => 'Erro',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Nenhum documento selecionado',
'error_no_folder_selected' => 'Nenhuma pasta selecionada',
@ -1264,6 +1266,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Novo usuário adicionado',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Área de transferência limpada',
'splash_document_added' => 'Documento inserido',
'splash_document_checkedout' => '',

View File

@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Definitie atribut exista deja',
'attrdef_info' => '',
'attrdef_in_use' => 'Definitie atribut inca in utilizare',
@ -427,6 +428,7 @@ URL: [url]',
'error' => 'Eroare',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Nici un document selectat',
'error_no_folder_selected' => 'Nici un folder selectat',
@ -1289,6 +1291,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Utilizator nou adăugat',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Clipboard golit',
'splash_document_added' => 'Document adăugat',
'splash_document_checkedout' => 'Document verificat',

View File

@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Определение атрибута уже существует',
'attrdef_info' => 'Информация',
'attrdef_in_use' => 'Определение этого атрибута используется',
@ -427,6 +428,7 @@ URL: [url]',
'error' => 'Ошибка',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Нет выбранных документов',
'error_no_folder_selected' => 'Нет выбранных каталогов',
@ -1296,6 +1298,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Добавлен новый пользователь',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Буфер обмена очищен',
'splash_document_added' => 'Добавлен документ',
'splash_document_checkedout' => 'Документ отправлен на обработку',

View File

@ -118,6 +118,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => '',
'attrdef_info' => 'Informácia',
'attrdef_in_use' => '',
@ -374,6 +375,7 @@ URL: [url]',
'error' => 'Chyba',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => '',
'error_no_folder_selected' => '',
@ -1121,6 +1123,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -123,6 +123,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Attributdefinitionen finns redan',
'attrdef_info' => '',
'attrdef_in_use' => 'Attributdefinitionen används',
@ -415,6 +416,7 @@ URL: [url]',
'error' => 'Fel',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Inget dokument har valts',
'error_no_folder_selected' => 'Ingen katalog har valts',
@ -1252,6 +1254,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Ny användare tillagt',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Urklipp rensat',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -129,6 +129,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Nitelik tanımı zaten mevcut',
'attrdef_info' => '',
'attrdef_in_use' => 'Nitelik tanımı halen kullanımda',
@ -421,6 +422,7 @@ URL: [url]',
'error' => 'Hata',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Hiçbir doküman seçilmedi',
'error_no_folder_selected' => 'Hiçbir klasör seçilmedi',
@ -1268,6 +1270,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Yeni kullanıcı eklendi',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Pano temizlendi',
'splash_document_added' => 'Doküman eklendi',
'splash_document_checkedout' => '',

View File

@ -135,6 +135,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => 'Визначення атрибуту вже існує',
'attrdef_info' => 'Інформація',
'attrdef_in_use' => 'Визначення цього атрибуту вже використовується',
@ -427,6 +428,7 @@ URL: [url]',
'error' => 'Помилка',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => 'Немає вибраних документів',
'error_no_folder_selected' => 'Немає вибраних каталогів',
@ -1289,6 +1291,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => 'Додано нового користувача',
'splash_clearcache' => '',
'splash_cleared_clipboard' => 'Буфер обміну очищено',
'splash_document_added' => 'Додано документ',
'splash_document_checkedout' => 'Документ відправлено на опрацювання',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (640), fengjohn (5)
// Translators: Admin (642), fengjohn (5)
$text = array(
'2_factor_auth' => '',
@ -118,6 +118,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => '',
'attrdef_info' => '',
'attrdef_in_use' => '属性定义仍在使用中',
@ -257,7 +258,7 @@ URL: [url]',
认你的操作',
'creation_date' => '创建日期',
'cs_CZ' => '捷克语',
'current_password' => '',
'current_password' => '当前密码',
'current_quota' => '',
'current_state' => '',
'current_version' => '当前版本',
@ -376,6 +377,7 @@ URL: [url]',
'error' => '错误',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => '请选择文档',
'error_no_folder_selected' => '请选择文件夹',
@ -592,7 +594,7 @@ URL: [url]',
'new_file_email_body' => '',
'new_file_email_subject' => '',
'new_folder' => '新建文件夹',
'new_password' => '',
'new_password' => '新密码',
'new_subfolder_email' => '创建新文件夹',
'new_subfolder_email_body' => '',
'new_subfolder_email_subject' => '',
@ -1123,6 +1125,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -118,6 +118,7 @@ URL: [url]',
'attrdefgrp_show_detail' => '',
'attrdefgrp_show_list' => '',
'attrdefgrp_show_search' => '',
'attrdefgrp_show_searchlist' => '',
'attrdef_exists' => '',
'attrdef_info' => '',
'attrdef_in_use' => '',
@ -374,6 +375,7 @@ URL: [url]',
'error' => '錯誤',
'error_add_aro' => '',
'error_add_permission' => '',
'error_clearcache' => '',
'error_importfs' => '',
'error_no_document_selected' => '請選擇文檔',
'error_no_folder_selected' => '請選擇資料夾',
@ -1121,6 +1123,7 @@ URL: [url]',
'splash_add_role' => '',
'splash_add_to_transmittal' => '',
'splash_add_user' => '',
'splash_clearcache' => '',
'splash_cleared_clipboard' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',

View File

@ -245,6 +245,14 @@ switch($command) {
}
break; /* }}} */
case 'clearclipboard': /* {{{ */
if($user) {
$session->clearClipboard();
header('Content-Type: application/json');
echo json_encode(array('success'=>true, 'message'=>getMLText('splash_cleared_clipboard')));
}
break; /* }}} */
case 'movefolder': /* {{{ */
if($user) {
if(!checkFormKey('movefolder', 'GET')) {

View File

@ -17,9 +17,11 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
include("../inc/inc.Settings.php");
include("../inc/inc.LogInit.php");
include("../inc/inc.Language.php");
include("../inc/inc.Init.php");
include("../inc/inc.Utils.php");
include("../inc/inc.DBInit.php");
include("../inc/inc.Language.php");
include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php");

View File

@ -37,7 +37,7 @@ else
$basedir = $settings->_contentDir;
$v = new SeedDMS_Version;
$dump_name = $basedir.date('Y-m-d\TH:i:s')."_".$v->_number.".sql";
$dump_name = $basedir.date('Y-m-d\TH-i-s')."_".$v->_number.".sql";
if(!$dms->createDump($dump_name))
UI::exitError(getMLText("admin_tools"),getMLText("error_occured"));

View File

@ -31,12 +31,12 @@ include("../inc/inc.ClassController.php");
include $settings->_rootDir . "languages/" . $settings->_language . "/lang.inc";
function _printMessage($heading, $message) {
function _printMessage($heading, $message) { /* {{{ */
global $dms, $theme;
$view = UI::factory($theme, 'ErrorDlg', array('dms'=>$dms));
$view->exitError($heading, $message, true);
return;
}
} /* }}} */
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$controller = Controller::factory($tmp[1]);
@ -63,6 +63,7 @@ if(isset($_POST['pwd'])) {
}
}
/* The password may only be empty if the guest user tries to log in */
if($settings->_enableGuestLogin && (int) $settings->_guestID) {
$guestUser = $dms->getUser((int) $settings->_guestID);
if ((!isset($pwd) || strlen($pwd)==0) && ($login != $guestUser->getLogin())) {
@ -87,169 +88,63 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) {
}
}
if (is_bool($user)) {
if (isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
if (isset($settings->_ldapPort) && is_int($settings->_ldapPort)) {
$ds = ldap_connect($settings->_ldapHost, $settings->_ldapPort);
} else {
$ds = ldap_connect($settings->_ldapHost);
}
/* Authenticate against LDAP server {{{ */
if (!$user && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
require_once("../inc/inc.ClassLdapAuthentication.php");
$authobj = new SeedDMS_LdapAuthentication($dms, $settings);
$user = $authobj->authenticate($login, $pwd);
} /* }}} */
if (!is_bool($ds)) {
/* Check if ldap base dn is set, and use ldap server if it is */
if (isset($settings->_ldapBaseDN)) {
$ldapSearchAttribut = "uid=";
$tmpDN = "uid=".$login.",".$settings->_ldapBaseDN;
}
/* Authenticate against SeedDMS database {{{ */
else {
require_once("../inc/inc.ClassDbAuthentication.php");
$authobj = new SeedDMS_DbAuthentication($dms, $settings);
$user = $authobj->authenticate($login, $pwd);
} /* }}} */
/* Active directory has a different base dn */
if (isset($settings->_ldapType)) {
if ($settings->_ldapType==1) {
$ldapSearchAttribut = "sAMAccountName=";
$tmpDN = $login.'@'.$settings->_ldapAccountDomainName;
// Add the following if authentication with an Active Dir doesn't work
// See https://sourceforge.net/p/seeddms/discussion/general/thread/19c70d8d/
// and http://stackoverflow.com/questions/6222641/how-to-php-ldap-search-to-get-user-ou-if-i-dont-know-the-ou-for-base-dn
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
}
}
// Ensure that the LDAP connection is set to use version 3 protocol.
// Required for most authentication methods, including SASL.
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
// try an authenticated/anonymous bind first.
// If it succeeds, get the DN for the user and use it for an authentication
// with the users password.
$bind = false;
if (isset($settings->_ldapBindDN)) {
$bind = @ldap_bind($ds, $settings->_ldapBindDN, $settings->_ldapBindPw);
} else {
$bind = @ldap_bind($ds);
}
$dn = false;
/* If bind succeed, then get the dn of for the user */
if ($bind) {
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$login.")".$settings->_ldapFilter.")");
} else {
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$login);
}
if (!is_bool($search)) {
$info = ldap_get_entries($ds, $search);
if (!is_bool($info) && $info["count"]>0) {
$dn = $info[0]['dn'];
}
}
}
/* If the previous bind failed, try it with the users creditionals
* by simply setting $dn to a default string
*/
if (is_bool($dn)) {
$dn = $tmpDN;
}
/* No do the actual authentication of the user */
$bind = @ldap_bind($ds, $dn, $pwd);
if ($bind) {
// Successfully authenticated. Now check to see if the user exists within
// the database. If not, add them in if _restricted is not set,
// but do not add their password.
$user = $dms->getUserByLogin($login);
if (is_bool($user) && !$settings->_restricted) {
// Retrieve the user's LDAP information.
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$login.")".$settings->_ldapFilter.")");
} else {
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$login);
}
if (!is_bool($search)) {
$info = ldap_get_entries($ds, $search);
if (!is_bool($info) && $info["count"]==1 && $info[0]["count"]>0) {
$user = $dms->addUser($login, null, $info[0]['cn'][0], $info[0]['mail'][0], $settings->_language, $settings->_theme, "");
}
}
}
if (!is_bool($user)) {
$userid = $user->getID();
}
}
ldap_close($ds);
}
}
if(!$user) {
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
exit;
}
if (is_bool($user)) {
//
// LDAP Authentication did not succeed or is not configured. Try internal
// authentication system.
//
// Try to find user with given login.
$user = $dms->getUserByLogin($login);
if (!$user) {
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
exit;
}
$userid = $user->getID();
if (($userid == $settings->_guestID) && (!$settings->_enableGuestLogin)) {
_printMessage(getMLText("login_error_title"), getMLText("guest_login_disabled"));
exit;
}
// Check if password matches (if not a guest user)
// Assume that the password has been sent via HTTP POST. It would be careless
// (and dangerous) for passwords to be sent via GET.
if (($userid != $settings->_guestID) && (md5($pwd) != $user->getPwd()) || ($userid == $settings->_guestID) && $user->getPwd() && (md5($pwd) != $user->getPwd())) {
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
/* if counting of login failures is turned on, then increment its value */
if($settings->_loginFailure) {
$failures = $user->addLoginFailure();
if($failures >= $settings->_loginFailure)
$user->setDisabled(true);
}
exit;
}
// Check if account is disabled
if($user->isDisabled()) {
_printMessage(getMLText("login_disabled_title"), getMLText("login_disabled_text"));
exit;
}
// control admin IP address if required
// TODO: extend control to LDAP autentication
if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $settings->_adminIP != "") ){
_printMessage(getMLText("login_error_title"), getMLText("invalid_user_id"));
exit;
}
if($settings->_enable2FactorAuthentication) {
if($secret = $user->getSecret()) {
require "vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuth.php";
$tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS');
if($tfa->verifyCode($secret, $_POST['twofactauth']) !== true) {
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
exit;
}
}
}
/* Clear login failures if login was successful */
$user->clearLoginFailures();
$userid = $user->getID();
if (($userid == $settings->_guestID) && (!$settings->_enableGuestLogin)) {
_printMessage(getMLText("login_error_title"), getMLText("guest_login_disabled"));
exit;
}
// Check if account is disabled
if($user->isDisabled()) {
_printMessage(getMLText("login_disabled_title"), getMLText("login_disabled_text"));
exit;
}
// control admin IP address if required
if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $settings->_adminIP != "") ){
_printMessage(getMLText("login_error_title"), getMLText("invalid_user_id"));
exit;
}
if($settings->_enable2FactorAuthentication) {
if($secret = $user->getSecret()) {
require "vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuth.php";
$tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS');
if($tfa->verifyCode($secret, $_POST['twofactauth']) !== true) {
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
exit;
}
}
}
/* Clear login failures if login was successful */
$user->clearLoginFailures();
// Capture the user's language and theme settings.
if (isset($_REQUEST["lang"]) && strlen($_REQUEST["lang"])>0 && is_numeric(array_search($_REQUEST["lang"],getLanguages())) ) {
$lang = $_REQUEST["lang"];
@ -344,7 +239,4 @@ else {
header("Location: ".$settings->_httpRoot.(isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_siteDefaultPage : "out/out.ViewFolder.php?folderid=".($user->getHomeFolder() ? $user->getHomeFolder() : $settings->_rootFolderID)));
}
//_printMessage(getMLText("login_ok"),
// "<p><a href='".$settings->_httpRoot.(isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_siteDefaultPage : "out/out.ViewFolder.php")."'>".getMLText("continue")."</a></p>");
?>

View File

@ -376,8 +376,28 @@ $(document).ready( function() {
url: url,
dataType: 'json',
success: function(data){
for (var i = 0; i < data.length; i++) {
noty({text: data[i].text, type: data[i].type});
if(data.success) {
if(element.data('param1') == 'command=clearclipboard') {
$("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard')
$("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard')
}
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500,
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500,
});
}
}
});

View File

@ -240,7 +240,8 @@ $(document).ready(function () {
if(isset($this->params['folder']) && $this->params['folder']->getAccessMode($this->params['user']) >= M_READWRITE) {
$content .= " <li><a href=\"../op/op.MoveClipboard.php?targetid=".$this->params['folder']->getID()."&refferer=".urlencode($this->params['refferer'])."\">".getMLText("move_clipboard")."</a></li>\n";
}
$content .= " <li><a href=\"../op/op.ClearClipboard.php?refferer=".urlencode($this->params['refferer'])."\">".getMLText("clear_clipboard")."</a></li>\n";
// $content .= " <li><a href=\"../op/op.ClearClipboard.php?refferer=".urlencode($this->params['refferer'])."\">".getMLText("clear_clipboard")."</a><a class=\"ajax-click\" data-href=\"../op/op.Ajax.php\" data-param1=\"command=clearclipboard\">kkk</a> </li>\n";
$content .= " <li><a class=\"ajax-click\" data-href=\"../op/op.Ajax.php\" data-param1=\"command=clearclipboard\">".getMLText("clear_clipboard")."</a></li>\n";
$content .= " </ul>\n";
$content .= " </li>\n";
$content .= " </ul>\n";