From 5dbbc737e6ef0bf6126c2afec68bdbda28475801 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 23 Nov 2020 16:52:48 -0500 Subject: [PATCH] Whispeak: Add details in message error for auth/enroll - refs BT#17415 --- .../Controller/AuthenticationController.php | 29 ++++++---- plugin/whispeakauth/Request/ApiRequest.php | 54 ++++++++++--------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/plugin/whispeakauth/Controller/AuthenticationController.php b/plugin/whispeakauth/Controller/AuthenticationController.php index 831736ab88..0c8d670b76 100644 --- a/plugin/whispeakauth/Controller/AuthenticationController.php +++ b/plugin/whispeakauth/Controller/AuthenticationController.php @@ -156,9 +156,6 @@ class AuthenticationController extends BaseController $token = \ChamiloSession::read(\WhispeakAuthPlugin::SESSION_SENTENCE_TEXT); - $request = new ApiRequest(); - $success = $request->performAuthentication($token, $user, $audioFilePath); - \ChamiloSession::erase(\WhispeakAuthPlugin::SESSION_SENTENCE_TEXT); /** @var array $lpItemInfo */ @@ -166,7 +163,21 @@ class AuthenticationController extends BaseController /** @var array $quizQuestionInfo */ $quizQuestionInfo = ChamiloSession::read(WhispeakAuthPlugin::SESSION_QUIZ_QUESTION, []); - $message = $this->plugin->get_lang('AuthentifySuccess'); + $success = true; + + $request = new ApiRequest(); + + try { + $request->performAuthentication($token, $user, $audioFilePath); + + $message = $this->plugin->get_lang('AuthentifySuccess'); + } catch (\Exception $exception) { + $message = $this->plugin->get_lang('AuthentifyFailed') + .PHP_EOL + .$exception->getMessage(); + + $success = false; + } if (!$success) { if (!empty($lpItemInfo)) { @@ -191,8 +202,6 @@ class AuthenticationController extends BaseController $this->plugin->addAuthenticationAttempt(LogEvent::STATUS_FAILED, $user->getId()); } - $message = $this->plugin->get_lang('AuthentifyFailed'); - $authTokenRequest = new ApiRequest(); $authTokenResponse = $authTokenRequest->createAuthenticationSessionToken($user); @@ -210,8 +219,8 @@ class AuthenticationController extends BaseController if ($maxAttempts && $failedLogins >= $maxAttempts) { $message .= PHP_EOL .''.$this->plugin->get_lang('MaxAttemptsReached').'' - .PHP_EOL - .'
' + .PHP_EOL.PHP_EOL + .'' .$this->plugin->get_lang('LoginWithUsernameAndPassword') .''; @@ -224,7 +233,7 @@ class AuthenticationController extends BaseController $message .= PHP_EOL.$this->plugin->get_lang('TryAgain'); if ('true' === api_get_setting('allow_lostpassword')) { - $message .= '
' + $message .= PHP_EOL .Display::url( get_lang('LostPassword'), api_get_path(WEB_CODE_PATH).'auth/lostPassword.php', @@ -235,7 +244,7 @@ class AuthenticationController extends BaseController } $result['resultHtml'] = Display::return_message( - $message, + nl2br($message), $success ? 'success' : 'warning', false ); diff --git a/plugin/whispeakauth/Request/ApiRequest.php b/plugin/whispeakauth/Request/ApiRequest.php index 9ce90be4ce..5295135527 100644 --- a/plugin/whispeakauth/Request/ApiRequest.php +++ b/plugin/whispeakauth/Request/ApiRequest.php @@ -116,29 +116,23 @@ class ApiRequest $langIso = api_get_language_isocode($user ? $user->getLanguage() : null); - try { - $this->sendRequest( - 'post', - 'auth', - $token, - $langIso, + $this->sendRequest( + 'post', + 'auth', + $token, + $langIso, + [ [ - [ - 'name' => 'speaker', - 'contents' => $wsid->getValue(), - ], - [ - 'name' => 'file', - 'contents' => fopen($audioFilePath, 'r'), - 'filename' => basename($audioFilePath), - ], - ] - ); - - return true; - } catch (\Exception $e) { - return false; - } + 'name' => 'speaker', + 'contents' => $wsid->getValue(), + ], + [ + 'name' => 'file', + 'contents' => fopen($audioFilePath, 'r'), + 'filename' => basename($audioFilePath), + ], + ] + ); } /** @@ -180,12 +174,20 @@ class ApiRequest $responseBody = $requestException->getResponse()->getBody()->getContents(); $json = json_decode($responseBody, true); - if (empty($json['message'])) { - throw new \Exception($requestException->getMessage()); + $message = ''; + + if (isset($json['asserts'])) { + foreach ($json['asserts'] as $assert) { + if (in_array($assert['value'], ['valid_audio', 'invalid_audio'])) { + $message .= $assert['message'].PHP_EOL; + } + } + } elseif (empty($json['message'])) { + $message = $requestException->getMessage(); + } else { + $message = is_array($json['message']) ? implode(PHP_EOL, $json['message']) : $json['message']; } - $message = is_array($json['message']) ? implode(PHP_EOL, $json['message']) : $json['message']; - throw new \Exception($message); } catch (Exception $exception) { throw new \Exception($exception->getMessage());