コード例 #1
0
        private string LoginCurrentUser(LmsUserSession session)
        {
            LmsCompany lmsCompany = null;

            try
            {
                lmsCompany = session.LmsCompany;
                var param        = session.LtiSession.LtiParam;
                var LmsUserModel = IoC.Resolve <LmsUserModel>();
                var lmsUser      = LmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, lmsCompany.Id).Value;
                if (lmsUser == null)
                {
                    throw new Core.WarningMessageException($"No user with id {param.lms_user_id} found in the database.");
                }

                if (lmsUser.PrincipalId == null)
                {
                    throw new Core.WarningMessageException("User doesn't have account in Adobe Connect.");
                }

                var ac             = GetAdminProvider(lmsCompany);
                var registeredUser = ac.GetOneByPrincipalId(lmsUser.PrincipalId).PrincipalInfo.Principal;

                var    MeetingSetup = IoC.Resolve <MeetingSetup>();
                string breezeToken  = MeetingSetup.ACLogin(lmsCompany, param, lmsUser, registeredUser, ac);

                return(breezeToken);
            }
            catch (Exception ex)
            {
                string errorMessage = GetOutputErrorMessage("ContentApi-LoginCurrentUser", ex);
                throw;
            }
        }
コード例 #2
0
 public ReportParamsDto(string format, Company company, LmsUserSession userSession, string acMeetingUrl, string acMeetingTitle, DateTime localDate, bool isShowMeetingTitle)
 {
     this.format             = format;
     this.acMeetingTitle     = acMeetingTitle;
     this.acMeetingUrl       = acMeetingUrl;
     this.localDate          = localDate;
     this.isShowMeetingTitle = isShowMeetingTitle;
     this.company            = company;
     this.userSession        = userSession;
 }
コード例 #3
0
        protected override bool IsAllowed(LmsUserSession session, out ActionResult notAllowedResult)
        {
            var isTeacher = _lmsRoleService.IsTeacher(session.LtiSession.LtiParam, session.LmsCompany);

            if (!isTeacher)
            {
                notAllowedResult = new ObjectResult(OperationResult.Error("Operation is not enabled."));
                return(false);
            }

            notAllowedResult = null;
            return(true);
        }
コード例 #4
0
        public override void OnActionExecuting(HttpActionContext filterContext)
        {
            string mode;
            Guid   sessionKey = FetchToken(filterContext.ControllerContext.Request, out mode);

            if (sessionKey != Guid.Empty)
            {
                LmsUserSession session = GetReadOnlySession(sessionKey);
                if (session == null)
                {
                    filterContext.Response =
                        filterContext.ControllerContext.Request.CreateResponse <OperationResult>(OperationResult.Error(Resources.Messages.SessionTimeOut));
                }
                else
                {
                    HttpResponseMessage notAllowedResult;
                    var allowed = IsAllowed(session, out notAllowedResult);

                    if (!allowed)
                    {
                        filterContext.Response = notAllowedResult;
                    }
                    else
                    {
                        var api = filterContext.ControllerContext.Controller as BaseController;
                        api.Session = session;
                    }
                }
            }
            else
            {
                filterContext.Response =
                    filterContext.ControllerContext.Request.CreateResponse <OperationResult>(OperationResult.Error("Necessary arguments were not provided."));
            }
            base.OnActionExecuting(filterContext);
        }
コード例 #5
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string mode;
            Guid   token = FetchToken(filterContext.HttpContext.Request, out mode);

            if (token != Guid.Empty)
            {
                if (mode == ltiAuthScheme)
                {
                    // TODO: try\catch?
                    LmsUserSession session = GetReadOnlySession(token);

                    if (session == null)
                    {
                        filterContext.Result = new JsonResult(OperationResult.Error(Messages.SessionTimeOut));
                    }
                    else if (!string.IsNullOrWhiteSpace(FeatureName) && !session.LmsCompany.GetSetting <bool>(FeatureName))
                    {
                        filterContext.Result = new ObjectResult(OperationResult.Error("Operation is not enabled."));
                    }
                    else
                    {
                        ActionResult notAllowedResult;
                        var          allowed = IsAllowed(session, out notAllowedResult);
                        if (!allowed)
                        {
                            filterContext.Result = notAllowedResult;
                        }
                        else
                        {
                            var api = filterContext.Controller as BaseApiController;
                            api.Session    = session;
                            api.LmsCompany = session.LmsCompany;
                            api.CourseId   = session.LmsCourseId;
                        }
                    }
                }
                else
                {
                    if (!ApiCallEnabled)
                    {
                        filterContext.Result = new JsonResult(OperationResult.Error("External calls are not permitted"));
                    }
                    else
                    {
                        LmsCompany license = GetLicense(token);
                        if (license == null)
                        {
                            // TODO: better msg
                            filterContext.Result = new JsonResult(OperationResult.Error(Messages.SessionTimeOut));
                        }
                        else if (!string.IsNullOrWhiteSpace(FeatureName) && !license.GetSetting <bool>(FeatureName))
                        {
                            filterContext.Result = new ObjectResult(OperationResult.Error("Operation is not enabled."));
                        }
                        else
                        {
                            //ActionResult notAllowedResult;
                            //var allowed = IsAllowed(session, out notAllowedResult);

                            //if (!allowed)
                            //{
                            //    filterContext.Result = notAllowedResult;
                            //}
                            //else
                            {
                                var api = filterContext.Controller as BaseApiController;
                                api.LmsCompany = license;
                                api.CourseId   = FetchApiCourseId(filterContext.HttpContext.Request);
                            }
                        }
                    }
                }
            }
            else
            {
                filterContext.Result = new JsonResult(OperationResult.Error("Necessary Authorization arguments were not provided."));
            }
            base.OnActionExecuting(filterContext);
        }
コード例 #6
0
 protected virtual bool IsAllowed(LmsUserSession session, out ActionResult notAllowedResult)
 {
     notAllowedResult = null;
     return(true);
 }
コード例 #7
0
 protected virtual bool IsAllowed(LmsUserSession session, out HttpResponseMessage notAllowedResult)
 {
     notAllowedResult = null;
     return(true);
 }
コード例 #8
0
        public virtual async Task <ActionResult> ImsLogin(LtiParamDTO param)
        {
            try
            {
                Request.CheckForRequiredLtiParameters();

                LmsCompany lmsCompany =
                    lmsCompanyModel.GetOneByConsumerKey(param.oauth_consumer_key)
                    .Value;

                if (lmsCompany != null)
                {
                    System.Threading.Thread.CurrentThread.CurrentUICulture =
                        new System.Globalization.CultureInfo(LanguageModel.GetById(lmsCompany.LanguageId).TwoLetterCode);
                }
                else
                {
                    Logger.ErrorFormat("Adobe Connect integration is not set up. param:{0}.",
                                       JsonSerializer.JsonSerialize(param));
                    throw new LtiException(Resources.Messages.LtiValidationNoSetup);
                }

                if (!lmsCompany.IsActive)
                {
                    Logger.ErrorFormat("LMS license is not active. Request's lms_domain:{0}. oauth_consumer_key:{1}.", param.lms_domain, param.oauth_consumer_key);
                    throw new LtiException(Resources.Messages.LtiValidationInactiveLmsLicense);
                }

                if (!BltiProviderHelper.VerifyBltiRequest(lmsCompany, Request, () => true))
                {
                    Logger.ErrorFormat("Invalid LTI request. Invalid signature. oauth_consumer_key:{0}.",
                                       param.oauth_consumer_key);
                    throw new LtiException(Resources.Messages.LtiValidationWrongSignature);
                }

                ValidateLtiVersion(param);

                ValidateIntegrationRequiredParameters(lmsCompany, param);

                var contextRoles = GetContextRoles(param.roles);
                if (!contextRoles.Any())
                {
                    throw new LtiException(Resources.Messages.LtiValidationNoContextRole);
                }

                var adobeConnectProvider = this.GetAdminProvider(lmsCompany);

                // TRICK: if LMS don't return user login - try to call lms' API to fetch user's info using user's LMS-ID.
                param.ext_user_username = await usersSetup.GetParamLogin(param, lmsCompany); // NOTE: is saved in session!

                var lmsUser = lmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, lmsCompany.Id).Value;

                LmsUserSession session = this.SaveSession(lmsCompany, param, lmsUser);
                var            key     = session.Id.ToString();
                if (!string.IsNullOrWhiteSpace(param.lis_outcome_service_url) &&
                    !string.IsNullOrWhiteSpace(param.lis_result_sourcedid))
                {
                    return(View("~/Views/Lti/Outcomes.cshtml", new OutcomeModel {
                        LmsProviderName = key
                    }));
                }
                //this.meetingSetup.SetupFolders(lmsCompany, adobeConnectProvider);

                Principal acPrincipal = null;

                acPrincipal = acUserService.GetOrCreatePrincipal(
                    adobeConnectProvider,
                    param.lms_user_login,
                    param.lis_person_contact_email_primary,
                    param.PersonNameGiven,
                    param.PersonNameFamily,
                    lmsCompany);
                if (lmsUser == null)
                {
                    lmsUser = new LmsUser
                    {
                        LmsCompany  = lmsCompany,
                        UserId      = param.lms_user_id,
                        Username    = param.GetUserNameOrEmail(),
                        PrincipalId = acPrincipal?.PrincipalId,
                    };
                    this.lmsUserModel.RegisterSave(lmsUser);

                    // TRICK: save lmsUser to session
                    SaveSessionUser(session, lmsUser);
                }

                if (acPrincipal != null && !acPrincipal.PrincipalId.Equals(lmsUser.PrincipalId))
                {
                    lmsUser.PrincipalId = acPrincipal.PrincipalId;
                    this.lmsUserModel.RegisterSave(lmsUser);
                }

                if (acPrincipal == null)
                {
                    Logger.ErrorFormat(
                        "[LoginWithProvider] Unable to create AC account. LmsCompany ID: {0}. LmsUserID: {1}. lms_user_login: {2}.",
                        lmsCompany.Id, lmsUser.Id, param.lms_user_login);
                    throw new Core.WarningMessageException(Resources.Messages.LtiNoAcAccount);
                }

                return(await RedirectToExtJs(session, lmsUser));
            }
            catch (LtiException ex)
            {
                Logger.Error("Lti exception", ex);
                ViewBag.Message = $"Invalid LTI request. {ex.Message}";
                if (!string.IsNullOrEmpty(param.launch_presentation_return_url))
                {
                    ViewBag.ReturnUrl = param.launch_presentation_return_url;
                }
                return(View("~/Views/Lti/LtiError.cshtml"));
            }
            catch (Core.WarningMessageException ex)
            {
                Logger.WarnFormat("[WarningMessageException] param:{0}.",
                                  JsonSerializer.JsonSerialize(param));
                this.ViewBag.Message = ex.Message;
                return(this.View("~/Views/Lti/LtiError.cshtml"));
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat(ex, "LoginWithProvider exception. oauth_consumer_key:{0}.", param.oauth_consumer_key);
                this.ViewBag.DebugError = IsDebug ? (ex.Message + ex.StackTrace) : string.Empty;
                return(this.View("~/Views/Lti/LtiError.cshtml"));
            }
        }