diff --git a/app/Http/Controllers/Api/V1/MicroSoftTeamController.php b/app/Http/Controllers/Api/V1/MicroSoftTeamController.php index bbebdf5b1..911b00989 100644 --- a/app/Http/Controllers/Api/V1/MicroSoftTeamController.php +++ b/app/Http/Controllers/Api/V1/MicroSoftTeamController.php @@ -131,13 +131,12 @@ public function getAccessToken(Request $request) */ public function getAccessTokenViaCode(GetTokenViaCode $request) { - $accessToken = $this->microsoftTeamRepository->getTokenViaCode($request); - - if ($accessToken && array_key_exists('access_token', $accessToken)) { - $request['token'] = $accessToken['access_token']; - $getSubmission = $this->microsoftTeamRepository->getSubmission($request); + $accessToken = $this->microsoftTeamRepository->getTokenViaCode($request); - if ($getSubmission && array_key_exists('status', $getSubmission)) { + if ($accessToken && array_key_exists('access_token', $accessToken)) { + $request['token'] = $accessToken['access_token']; + $getSubmission = $this->microsoftTeamRepository->getSubmission($request); + return response([ 'status_code' => 200, 'message' => 'Token fetched successfully.', @@ -146,17 +145,11 @@ public function getAccessTokenViaCode(GetTokenViaCode $request) 'refresh_token' => $accessToken['refresh_token'] ], 200); } - return response([ 'status_code' => 424, - 'errors' => $getSubmission['error'], - ], 500); - } - return response([ - 'status_code' => 424, - 'errors' => $accessToken['error'], - 'message' => $accessToken['error_description'] - ], 500); + 'errors' => $accessToken['error'], + 'message' => $accessToken['error_description'] + ], 500); } /** @@ -268,16 +261,16 @@ public function getUserPofile(GetUserProfileRequest $request) if ($accessToken && array_key_exists('access_token', $accessToken)) { $getProfile = $this->microsoftTeamRepository->getUserProfile($accessToken['access_token']); - return response([ - 'profile' => $getProfile, - ], 200); - } else { - return response([ - 'status_code' => 424, - 'errors' => $accessToken['error'], - 'message' => $accessToken['error_description'] - ], 500); + if ($getProfile && array_key_exists('displayName', $getProfile)) { + return response([ + 'profile' => $getProfile, + ], 200); + } } + + return response([ + 'profile' => 'Something went wrong with the login code or token, unable to fetch user profile', + ], 400); } /** diff --git a/app/Http/Requests/V1/GetTokenViaCode.php b/app/Http/Requests/V1/GetTokenViaCode.php index c253691d4..24cd51363 100644 --- a/app/Http/Requests/V1/GetTokenViaCode.php +++ b/app/Http/Requests/V1/GetTokenViaCode.php @@ -25,8 +25,6 @@ public function rules() { return [ 'code' => 'required', - 'clientId' => 'required', - 'secretId' => 'required', 'classId' => 'required', 'assignmentId' => 'required', 'submissionId' => 'required', diff --git a/app/Http/Requests/V1/GetUserProfileRequest.php b/app/Http/Requests/V1/GetUserProfileRequest.php new file mode 100644 index 000000000..abc3f41ab --- /dev/null +++ b/app/Http/Requests/V1/GetUserProfileRequest.php @@ -0,0 +1,30 @@ + + */ + public function rules() + { + return [ + 'code' => 'required' + ]; + } +} diff --git a/app/Http/Requests/V1/SubmitAssignmentMst.php b/app/Http/Requests/V1/SubmitAssignmentMst.php new file mode 100644 index 000000000..e324d3b56 --- /dev/null +++ b/app/Http/Requests/V1/SubmitAssignmentMst.php @@ -0,0 +1,33 @@ + + */ + public function rules() + { + return [ + 'classId' => 'required', + 'assignmentId' => 'required', + 'submissionId' => 'required', + 'token' => 'required' + ]; + } +} diff --git a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php index 614d28ca2..9bad5d59e 100644 --- a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php +++ b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php @@ -7,6 +7,7 @@ use App\Repositories\BaseRepository; use App\Repositories\User\UserRepositoryInterface; use Illuminate\Support\Facades\Http; +use stdClass; class MicrosoftTeamRepository extends BaseRepository implements MicrosoftTeamRepositoryInterface { @@ -91,8 +92,8 @@ public function getTokenViaCode($request) $postInput = [ 'grant_type' => 'authorization_code', - 'client_id' => $request->clientId, - 'client_secret' => $request->secretId, + 'client_id' => $this->clientId, + 'client_secret' => $this->secretId, 'code' => $request->code, 'scope' => config('ms-team-configs.scope_for_token'), @@ -109,6 +110,27 @@ public function getTokenViaCode($request) return $responseBody; } + /** + * @param $code string + * @return string + */ + public function submitAssignment($data) + { + $apiURL = $this->landingUrl . 'education/classes/' . $data['classId'] . '/assignments/' . $data['assignmentId'] . '/submissions/' . $data['submissionId'] . '/submit'; + $headers = [ + 'Content-length' => 0, + 'Content-type' => 'application/json', + 'Authorization' => 'Bearer ' . $data['token'] + ]; + + $response = Http::withHeaders($headers)->post($apiURL); + + $responseBody = json_decode($response->getBody(), true); + $responseBody['statusCode'] = $response->status(); + + return $responseBody; + } + /** * @param $token string * @param $data array @@ -391,6 +413,23 @@ private function getUserDetails($token) return $responseBody['id']; } + /** + * @param string $token + */ + public function getUserProfile($token) + { + $apiURL = $this->landingUrl . '/profile'; + $headers = [ + 'Content-length' => 0, + 'Content-type' => 'application/json', + 'Authorization' => 'Bearer ' . $token + ]; + + $response = Http::withHeaders($headers)->get($apiURL); + $responseBody = json_decode($response->getBody(), true); + return $responseBody; + } + /** * @param $token string * @param $classId string diff --git a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php index aa9c52f89..f32bc44fc 100644 --- a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php +++ b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php @@ -26,6 +26,12 @@ public function getTokenViaCode($code); */ public function getSubmission($request); + /** + * @param $object + * @return string + */ + public function submitAssignment($request); + /** * @param $gid int * @return string @@ -40,10 +46,15 @@ public function getLoginUrl($gid); */ public function getClassesList($token); + /** + * @param $token string + * @return + */ + public function getUserProfile($token); + /** * @param $token string * @param $data array - * * @return int */ public function createMsTeamClass($token, $data); diff --git a/config/ms-team-configs.php b/config/ms-team-configs.php index 2dd866a0e..e2821b19b 100644 --- a/config/ms-team-configs.php +++ b/config/ms-team-configs.php @@ -9,6 +9,6 @@ 'redirect_url' => env('MSTEAMS_REDIRECT_URL'), 'assignment_due_days' => env('ASSIGNMENT_DUE_DATE_DAYS'), 'scope' => 'https://graph.microsoft.com/.default', - 'scope_for_token' => 'https://graph.microsoft.com/User.Read https://graph.microsoft.com/Mail.Read' + 'scope_for_token' => 'https://graph.microsoft.com/User.Read https://graph.microsoft.com/Mail.Read offline_access' ]; \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 0e7ca03e0..28338c1b8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -34,6 +34,8 @@ Route::get('checkemail/{email}', 'Auth\AuthController@checkEmail'); Route::get('microsoft-team/get-access-token', 'Api\V1\MicroSoftTeamController@getAccessToken'); Route::get('microsoft-team/get-access-token-via-code', 'Api\V1\MicroSoftTeamController@getAccessTokenViaCode'); +Route::get('microsoft-team/get-user-profile', 'Api\V1\MicroSoftTeamController@getUserPofile'); +Route::post('microsoft-team/submit-assignment', 'Api\V1\MicroSoftTeamController@submitAssignment'); Route::group(['prefix' => 'v1', 'namespace' => 'Api\V1'], function () { Route::get('projects/{project}/load-shared', 'ProjectController@loadShared');