diff --git a/main.inc.php b/main.inc.php new file mode 100644 index 0000000..0e11945 --- /dev/null +++ b/main.inc.php @@ -0,0 +1,115 @@ +<?php +/* +Plugin Name: Ldap_Login +Version: 1.2 +Description: Allow piwigo authentication along an ldap +Plugin URI: http://piwigo.org/ext/extension_view.php?eid=650 +Author: 22decembre +Author URI: http://www.22decembre.eu +*/ +if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); + +// +-----------------------------------------------------------------------+ +// | Define plugin constants | +// +-----------------------------------------------------------------------+ +define('LDAP_LOGIN_ID', basename(dirname(__FILE__))); +define('LDAP_LOGIN_PATH' , PHPWG_PLUGINS_PATH . LDAP_LOGIN_ID . '/'); +define('LDAP_LOGIN_ADMIN', get_root_url() . 'admin.php?page=plugin-' . LDAP_LOGIN_ID); +define('LDAP_LOGIN_VERSION', '1.2'); + +include_once(LDAP_LOGIN_PATH.'/class.ldap.php'); + +// +-----------------------------------------------------------------------+ +// | Event handlers | +// +-----------------------------------------------------------------------+ + +add_event_handler('init', 'ld_init'); + +add_event_handler('try_log_user','login', 0, 4); + +add_event_handler('get_admin_plugin_menu_links', array(&$ldap, 'ldap_admin_menu')); + +// +-----------------------------------------------------------------------+ +// | Admin menu loading | +// +-----------------------------------------------------------------------+ + +$ldap = new Ldap(); +$ldap->load_config(); +set_plugin_data($plugin['id'], $ldap); +unset($ldap); + +// +-----------------------------------------------------------------------+ +// | functions | +// +-----------------------------------------------------------------------+ + +function random_password( $length = 8 ) { + $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+;:,.?"; + $password = substr( str_shuffle( $chars ), 0, $length ); + return $password; +} + +function ld_init(){ + load_language('plugin.lang', LDAP_LOGIN_PATH); +} + + +function login($success, $username, $password, $remember_me){ + + global $conf; + + $obj = new Ldap(); + $obj->load_config(); + $obj->ldap_conn() or die("Unable to connect LDAP server : ".$ldap->getErrorString()); + + //if (!$obj->ldap_bind_as($username,$password)){ // bind with userdn + if (!$obj->ldap_search_dn($username) || !$obj->ldap_bind_as($obj->ldap_search_dn($username),$password)){ // bind with userdn + trigger_notify('login_failure', stripslashes($username)); + return false; // wrong password + } + + // search user in piwigo database + $query = 'SELECT '.$conf['user_fields']['id'].' AS id FROM '.USERS_TABLE.' WHERE '.$conf['user_fields']['username'].' = \''.pwg_db_real_escape_string($username).'\' ;'; + + $row = pwg_db_fetch_assoc(pwg_query($query)); + + // if query is not empty, it means everything is ok and we can continue, auth is done ! + if (!empty($row['id'])) { + log_user($row['id'], $remember_me); + trigger_notify('login_success', stripslashes($username)); + return true; + } + + // if query is empty but ldap auth is done we can create a piwigo user if it's said so ! + else { + // this is where we check we are allowed to create new users upon that. + if ($obj->config['allow_newusers']) { + + // we got the email address + if ($obj->ldap_mail($username)) { + $mail = $obj->ldap_mail($username); + } + else { + $mail = NULL; + } + + // we actually register the new user + $new_id = register_user($username,random_password(8),$mail); + + // now we fetch again his id in the piwigo db, and we get them, as we just created him ! + //$query = 'SELECT '.$conf['user_fields']['id'].' AS id FROM '.USERS_TABLE.' WHERE '.$conf['user_fields']['username'].' = \''.pwg_db_real_escape_string($username).'\' ;'; + //$row = pwg_db_fetch_assoc(pwg_query($query)); + + log_user($new_id, False); + trigger_notify('login_success', stripslashes($username)); + redirect('profile.php'); + return true; + } + // else : this is the normal behavior ! user is not created. + else { + trigger_notify('login_failure', stripslashes($username)); + return false; + } + } +} + +?>