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; } }
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; }
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); }
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); }
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); }
protected virtual bool IsAllowed(LmsUserSession session, out ActionResult notAllowedResult) { notAllowedResult = null; return(true); }
protected virtual bool IsAllowed(LmsUserSession session, out HttpResponseMessage notAllowedResult) { notAllowedResult = null; return(true); }
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")); } }