예제 #1
0
        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));
        }
예제 #2
0
        /// <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));
            }
        }