public IActionResult SelectCourse(CancellationToken cancellationToken, CourseSelectionModel model) { var courseModel = model.Courses.SingleOrDefault(c => c.CourseId == model.CourseId); if (courseModel == null) { return(RedirectToAction("SelectCourse")); } courseModel.PersonImage = model.PersonImage; courseModel.PersonName = model.PersonName; courseModel.UserId = model.UserId; return(RedirectToAction(nameof(BulkGrade), courseModel)); }
/// <summary> /// 1. Collect the courseId /// </summary> public async Task <IActionResult> Course(CancellationToken cancellationToken, CourseSelectionModel model) { var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata(ClientId, ClientSecret, _context)) .AuthorizeAsync(cancellationToken) .ConfigureAwait(false); if (result.Credential == null) { return(Redirect(result.RedirectUri)); } model.UserId = result.Credential.UserId; try { using (var classroomService = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = "gc2lti" })) { if (!await SaveOfflineToken(cancellationToken, classroomService, result)) { return(RedirectToAction("Course", model)); } // Get the user's name var profileRequest = classroomService.UserProfiles.Get("me"); var profile = await profileRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); model.PersonName = profile.Name.FullName; // Get the list of the user's courses var coursesRequest = classroomService.Courses.List(); coursesRequest.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; coursesRequest.TeacherId = "me"; ListCoursesResponse coursesResponse = null; var courses = new List <SelectListItem>(); do { if (coursesResponse != null) { coursesRequest.PageToken = coursesResponse.NextPageToken; } coursesResponse = await coursesRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); if (coursesResponse.Courses != null) { courses.AddRange ( coursesResponse.Courses.Select(c => new SelectListItem { Value = c.Id, Text = c.Name }) ); } } while (!string.IsNullOrEmpty(coursesResponse.NextPageToken)); model.Courses = new SelectList(courses, "Value", "Text"); return(View(model)); } } catch (GoogleApiException e) when(e.Message.Contains("invalid authentication credentials")) { // Force a new UserId TempData.Remove("user"); return(RedirectToAction("Course", model)); } catch (TokenResponseException e) when(e.Message.Contains("invalid_grant")) { // Force a new UserId TempData.Remove("user"); return(RedirectToAction("Course", model)); } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e)); } }