public async Task <ActionResult> LtiSlide(string courseId, int slideIndex) { if (string.IsNullOrWhiteSpace(courseId)) { return(RedirectToAction("Index", "Home")); } var userId = User.Identity.GetUserId(); var ltiRequestJson = FindLtiRequestJson(); var course = courseManager.GetCourse(courseId); var slide = course.Slides[slideIndex]; if (!string.IsNullOrWhiteSpace(ltiRequestJson)) { await ltiRequestsRepo.Update(userId, slide.Id, ltiRequestJson); } var visiter = await VisitSlide(courseId, slide.Id); var exerciseSlide = slide as ExerciseSlide; if (exerciseSlide != null) { var model = new CodeModel { CourseId = courseId, SlideIndex = slideIndex, SlideId = exerciseSlide.Id, ExerciseBlock = exerciseSlide.Exercise, Context = CreateRenderContext(course, exerciseSlide, userId, visiter, true) }; return(View("LtiExerciseSlide", model)); } var quizSlide = slide as QuizSlide; if (quizSlide != null) { var model = new LtiQuizModel { CourseId = courseId, Slide = quizSlide, UserId = userId }; return(View("LtiQuizSlide", model)); } return(View()); }
public async Task <ActionResult> LtiSlide(string courseId, Guid slideId) { if (string.IsNullOrWhiteSpace(courseId)) { return(RedirectToAction("Index", "Home")); } var course = courseManager.GetCourse(courseId); var slide = course.GetSlideById(slideId); string userId; var owinRequest = Request.GetOwinContext().Request; if (await owinRequest.IsAuthenticatedLtiRequestAsync()) { var ltiRequest = await owinRequest.ParseLtiRequestAsync(); log.Info($"Нашёл LTI request в запросе: {ltiRequest.JsonSerialize()}"); userId = Request.GetOwinContext().Authentication.AuthenticationResponseGrant.Identity.GetUserId(); await ltiRequestsRepo.Update(courseId, userId, slide.Id, ltiRequest.JsonSerialize()); /* Substitute http(s) scheme with real scheme from header */ var uriBuilder = new UriBuilder(ltiRequest.Url) { Scheme = owinRequest.GetRealRequestScheme(), Port = owinRequest.GetRealRequestPort() }; return(Redirect(uriBuilder.Uri.AbsoluteUri)); } /* For now user should be authenticated */ if (!User.Identity.IsAuthenticated) { return(new HttpStatusCodeResult(HttpStatusCode.Forbidden)); } userId = User.Identity.GetUserId(); var visit = await VisitSlide(courseId, slide.Id, userId); /* Try to send score via LTI immediately after slide visiting */ try { if (visit.IsPassed) { LtiUtils.SubmitScore(courseId, slide, userId, visit); } } catch (Exception e) { ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(e)); } var exerciseSlide = slide as ExerciseSlide; if (exerciseSlide != null) { var model = new CodeModel { CourseId = courseId, SlideId = exerciseSlide.Id, ExerciseBlock = exerciseSlide.Exercise, Context = CreateRenderContext(course, exerciseSlide, isLti: true) }; return(View("LtiExerciseSlide", model)); } var quizSlide = slide as QuizSlide; if (quizSlide != null) { var model = new LtiQuizModel { CourseId = courseId, Slide = quizSlide, UserId = userId }; return(View("LtiQuizSlide", model)); } return(View()); }