fbosito
Forum Replies Created
-
Forum: Plugins
In reply to: [External Login] Compatibilty with MSSQLHi Tom,
if you change the code in login/db.php to the following it will work with the MSSQL Server. Tested on Windows with Microsoft Drivers for PHP for SQL Server (https://docs.microsoft.com/en-us/sql/connect/php/microsoft-php-driver-for-sql-server?view=sql-server-2017)<?php
function exlog_get_external_db_instance_and_fields() {
try {
$connectionOptions = array(
“Database” => exlog_get_option(“external_login_option_db_name”),
“UID” => exlog_get_option(“external_login_option_db_username”),
“PWD” => exlog_get_option(“external_login_option_db_password”),
“APP” => “WordPressSupport”,
“ApplicationIntent” => “ReadOnly”
);$conn = sqlsrv_connect( exlog_get_option(“external_login_option_db_host”), $connectionOptions);
if( $conn === false )
{
error_log(FormatErrors(sqlsrv_errors()));
return false;
}$data = array(
“db_instance” => $conn,
“dbstructure_table” => exlog_get_option(‘exlog_dbstructure_table’),
“dbstructure_username” => exlog_get_option(‘exlog_dbstructure_username’),
“dbstructure_password” => exlog_get_option(‘exlog_dbstructure_password’),
“dbstructure_first_name” => exlog_get_option(‘exlog_dbstructure_first_name’),
“dbstructure_last_name” => exlog_get_option(‘exlog_dbstructure_last_name’),
“dbstructure_role” => exlog_get_option(‘exlog_dbstructure_role’),
“dbstructure_email” => exlog_get_option(‘exlog_dbstructure_email’),
);if (exlog_get_option(‘external_login_option_db_salting_method’) == ‘all’) {
$data[‘dbstructure_salt’] = exlog_get_option(‘exlog_dbstructure_salt’);
}return $data;
}
catch (Exception $ex)
{
error_log(FormatErrors($ex));
return false;
}
};function exlog_build_wp_user_data($db_data, $userData) {
return array(
“username” => $userData->{$db_data[“dbstructure_username”]},
“password” => $userData->{$db_data[“dbstructure_password”]},
“first_name” => $userData->{$db_data[“dbstructure_first_name”]},
“last_name” => $userData->{$db_data[“dbstructure_last_name”]},
“role” => $userData->{$db_data[“dbstructure_role”]},
“email” => $userData->{$db_data[“dbstructure_email”]},
);
}function exlog_auth_query($username, $password) {
try {
$db_data = exlog_get_external_db_instance_and_fields();$query_string =
‘SELECT *’ .
‘ FROM ‘ . esc_sql($db_data[“dbstructure_table”]) .
‘ WHERE ‘ . esc_sql($db_data[“dbstructure_username”]) . ‘=\” . esc_sql($username) . ‘\”;$stmt = sqlsrv_query( $db_data[“db_instance”], $query_string);
if (sqlsrv_has_rows( $stmt ) != true)
{
return array(
“valid” => false
);
}while( $userData = sqlsrv_fetch_object( $stmt))
{
$user_specific_salt = false;if (exlog_get_option(‘external_login_option_db_salting_method’) == ‘all’) {
$user_specific_salt = $userData->{$db_data[“dbstructure_salt”]};
}$valid_credentials = exlog_validate_password($password, $userData->{$db_data[“dbstructure_password”]}, $user_specific_salt);
if ($valid_credentials) {
$wp_user_data = exlog_build_wp_user_data($db_data, $userData);
$wp_user_data[“valid”] = true;
return $wp_user_data;
}
}
return array(
“valid” => false
);
}
catch (Exception $ex)
{
error_log(FormatErrors($ex));
return false;
}
}function exlog_test_query($limit = false) {
$db_data = exlog_get_external_db_instance_and_fields();
try {
$query_string = ”;
if ($limit && is_int($limit)) {
$query_string .= ‘SELECT TOP ‘ . $limit . ‘ *’;
}
else
{
$query_string .= ‘SELECT *’;
}$query_string .= ‘ FROM ‘ . esc_sql($db_data[“dbstructure_table”]);
$stmt = sqlsrv_query( $db_data[“db_instance”], $query_string);
if (sqlsrv_has_rows( $stmt ) != true)
{
error_log(“External Login – No rows returned from test query.”);
return false;
}$users = array();
while( $user_data = sqlsrv_fetch_object( $stmt))
{
array_push($users, exlog_build_wp_user_data($db_data, $user_data));
}
return $users;
}
catch (Exception $ex)
{
error_log(FormatErrors($ex));
return false;
}
}