From 4a9d24b4463bbe6f8efbdc24e9970dce680edb3c Mon Sep 17 00:00:00 2001 From: Sonia Zorba <zorba@oats.inaf.it> Date: Thu, 7 Sep 2017 14:29:18 +0200 Subject: [PATCH] Bugfix on search users query, added audit logging (to be improved), various --- .gitignore | 1 + auth/oauth2/facebook_token.php | 1 + auth/oauth2/google_token.php | 1 + auth/oauth2/linkedin_token.php | 1 + auth/saml2/aai.php | 1 + auth/x509/certlogin.php | 1 + classes/MySQLDAO.php | 4 +++- config-example.php | 28 ++++++++++++---------------- include/front-controller.php | 4 +++- include/init.php | 2 ++ sql/delete-user-procedure.sql | 8 ++++++++ 11 files changed, 34 insertions(+), 18 deletions(-) create mode 100644 sql/delete-user-procedure.sql diff --git a/.gitignore b/.gitignore index 0761b29..dcb5ce1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ composer.lock nbproject logs config.php +test diff --git a/auth/oauth2/facebook_token.php b/auth/oauth2/facebook_token.php index b914131..bd43165 100755 --- a/auth/oauth2/facebook_token.php +++ b/auth/oauth2/facebook_token.php @@ -96,5 +96,6 @@ if ($user === null) { $userHandler->saveUser($user); } +$auditLog->info("LOGIN,Facebook," . $user->id); $callbackHandler->manageLoginRedirect($user, $session); ?> diff --git a/auth/oauth2/google_token.php b/auth/oauth2/google_token.php index a44c19a..8f056d5 100644 --- a/auth/oauth2/google_token.php +++ b/auth/oauth2/google_token.php @@ -90,6 +90,7 @@ if ($client->getAccessToken()) { $userHandler->saveUser($user); } + $auditLog->info("LOGIN,Google," . $user->id); $callbackHandler->manageLoginRedirect($user, $session); die(); diff --git a/auth/oauth2/linkedin_token.php b/auth/oauth2/linkedin_token.php index e2ec275..e38700a 100644 --- a/auth/oauth2/linkedin_token.php +++ b/auth/oauth2/linkedin_token.php @@ -116,6 +116,7 @@ if ($info2['http_code'] === 200) { $userHandler->saveUser($user); } + $auditLog->info("LOGIN,LinkedIn," . $user->id); $callbackHandler->manageLoginRedirect($user, $session); } else { //show information regarding the error diff --git a/auth/saml2/aai.php b/auth/saml2/aai.php index cb93949..59723e0 100644 --- a/auth/saml2/aai.php +++ b/auth/saml2/aai.php @@ -47,6 +47,7 @@ if (isset($_SERVER['Shib-Session-ID'])) { $userHandler->saveUser($user); } + $auditLog->info("LOGIN,eduGAIN," . $user->id); $callbackHandler->manageLoginRedirect($user, $session); } else { http_response_code(500); diff --git a/auth/x509/certlogin.php b/auth/x509/certlogin.php index e0ce9ea..ba9c20e 100644 --- a/auth/x509/certlogin.php +++ b/auth/x509/certlogin.php @@ -77,4 +77,5 @@ if ($session->x509DataToRegister !== null && $session->x509DataToRegister->name } } +$auditLog->info("LOGIN,X.509," . $user->id); $callbackHandler->manageLoginRedirect($user, $session); diff --git a/classes/MySQLDAO.php b/classes/MySQLDAO.php index d93d82d..03b492c 100644 --- a/classes/MySQLDAO.php +++ b/classes/MySQLDAO.php @@ -208,9 +208,11 @@ class MySQLDAO implements DAO { . " i.`id`, `type`, `typed_id`, `email`, `name`, `surname`, `institution`, `eppn`" . " FROM identity i" . " JOIN `user` u on u.id = i.user_id" + . " WHERE i.user_id IN" + . " (SELECT user_id FROM identity" . " WHERE `email` LIKE :email OR `email` LIKE :emailPart" . " OR `name` LIKE :name OR `surname` LIKE :surname" - . " OR CONCAT(`name`,' ',`surname`) LIKE :namesurname"; + . " OR CONCAT(`name`,' ',`surname`) LIKE :namesurname)"; $stmt = $dbh->prepare($query); diff --git a/config-example.php b/config-example.php index d73e7e8..8a66713 100644 --- a/config-example.php +++ b/config-example.php @@ -29,6 +29,7 @@ $PROTOCOL = stripos($_SERVER['SERVER_PROTOCOL'], 'https') ? 'https://' : 'http:/ $BASE_PATH = $PROTOCOL . $_SERVER['HTTP_HOST'] . $CONTEXT_ROOT; $LOG_PATH = ROOT . "/logs/rap-service.log"; +$AUDIT_LOG_PATH = ROOT . "/logs/rap-audit.log"; $LOG_LEVEL = Monolog\Logger::DEBUG; $CALLBACKS = [ @@ -48,25 +49,25 @@ $DATABASE = array( 'dbtype' => 'MySQL', 'hostname' => 'localhost', 'port' => 3306, - 'username' => 'rap', - 'password' => '***REMOVED***', + 'username' => 'XXXXXX', + 'password' => 'XXXXXX', 'dbname' => 'rap' ); $AUTHENTICATION_METHODS = array( 'eduGAIN' => array(), 'Google' => array( - 'id' => "***REMOVED***.apps.googleusercontent.com", - 'secret' => "***REMOVED***", + 'id' => "XXXXXX", + 'secret' => "XXXXXX", 'callback' => $BASE_PATH . "/auth/oauth2/google_token.php"), 'Facebook' => array( - 'id' => "***REMOVED***", - 'secret' => "***REMOVED***", + 'id' => "XXXXXX", + 'secret' => "XXXXXX", 'version' => "v2.2", 'callback' => $BASE_PATH . "/auth/oauth2/facebook_token.php"), 'LinkedIn' => array( - 'id' => '***REMOVED***', - 'secret' => '***REMOVED***', + 'id' => 'XXXXXX', + 'secret' => 'XXXXXX', 'callback' => $BASE_PATH . '/auth/oauth2/linkedin_token.php' ), 'X.509' => array(), @@ -79,12 +80,7 @@ $AUTHENTICATION_METHODS = array( ); $GROUPER = array( - 'wsURL' => 'http://localhost:8087/grouper-ws/', - 'user' => 'GrouperSystem', - 'password' => '***REMOVED***' + 'wsURL' => 'http://hostname/grouper-ws/', + 'user' => 'XXXXXX', + 'password' => 'XXXXXX' ); -/*$GROUPER = array( - 'wsURL' => 'https://sso.ia2.inaf.it/grouper-ws/', - 'user' => 'GrouperSystem', - 'password' => '***REMOVED***321' -);*/ diff --git a/include/front-controller.php b/include/front-controller.php index 5010fcd..202806f 100644 --- a/include/front-controller.php +++ b/include/front-controller.php @@ -99,7 +99,7 @@ Flight::route('GET /confirm-join', function() { Flight::route('POST /confirm-join', function() { - global $dao, $userHandler; + global $dao, $userHandler, $auditLog; $token = Flight::request()->data['token']; @@ -114,6 +114,8 @@ Flight::route('POST /confirm-join', function() { die("Invalid token"); } + $auditLog->info("JOIN," . $userIds[0] . "," . $userIds[1]); + $userHandler->joinUsers($userIds[0], $userIds[1]); $dao->deleteJoinRequest($token); diff --git a/include/init.php b/include/init.php index 28f6587..568565e 100644 --- a/include/init.php +++ b/include/init.php @@ -44,6 +44,8 @@ include ROOT . '/config.php'; date_default_timezone_set("Europe/Rome"); $log = new Monolog\Logger('mainLogger'); $log->pushHandler(new Monolog\Handler\StreamHandler($LOG_PATH, $LOG_LEVEL)); +$auditLog = new Monolog\Logger('auditLogger'); +$auditLog->pushHandler(new Monolog\Handler\StreamHandler($AUDIT_LOG_PATH, $LOG_LEVEL)); switch ($DATABASE['dbtype']) { case 'MySQL': diff --git a/sql/delete-user-procedure.sql b/sql/delete-user-procedure.sql new file mode 100644 index 0000000..836d8c7 --- /dev/null +++ b/sql/delete-user-procedure.sql @@ -0,0 +1,8 @@ +DELIMITER // +CREATE PROCEDURE delete_user (userId INT) +BEGIN + UPDATE user SET primary_identity = NULL WHERE id = userId; + DELETE FROM identity WHERE user_id = userId; + DELETE FROM user WHERE id = userId; +END; // +DELIMITER ; -- GitLab