public async Task <JsonResult> SendCourses(short schoolYear, int schoolId, bool allCourses, CancellationToken cancellationToken) { var lea = _sessionInfo.CurrentAgencyId.GetValueOrDefault(); var gcEmail = _setupBusiness.GetClientEmail(lea); if (string.IsNullOrWhiteSpace(gcEmail)) { return(Json(new SyncCourseMessage { Message = "Google Classroom setup not completed" })); } var syncList = _provisioningRuleBusiness.GetSyncList(lea, schoolYear, schoolId).Where(g => allCourses || !g.Saved.GetValueOrDefault()).ToList(); var school = _orgBusiness.GetEducationOrganization(schoolYear, schoolId); foreach (var gcCourse in syncList) { gcCourse.AliasId = gcCourse.GcName.NameToId(); gcCourse.Owner = "me"; } var syncMessage = new SyncCourseMessage { Courses = syncList, LeaId = lea, UserEmail = gcEmail, School = school }; var task = await Task.Run(async() => await GcSync.SendCourses(this, _setupBusiness, syncMessage, cancellationToken).ConfigureAwait(true)); _provisioningRuleBusiness.SaveSyncProgress(lea, schoolYear, schoolId, task.Courses); _provisioningRuleBusiness.SaveLog(task.Logs); return(Json(task)); }
public ActionResult Debug() { var model = new UserDebugViewModel { EducationOrganizationId = null, Name = "null" }; try { model.SchoolYear = DateTime.Now.GetSchoolYear(); if (_sessionInfo != null) { if (_sessionInfo.User != null) { model.Name = _sessionInfo.User.FullName; } if (_sessionInfo.CurrentAgencyId != null) { model.EducationOrganizationId = _sessionInfo.CurrentAgencyId.GetValueOrDefault(); } var org = _orgBusiness.GetEducationOrganization(DateTime.Now.GetSchoolYear(), 7533); if (org != null) { model.ApiConnect = true; } if (_sessionInfo.User != null) { var agencies = _sessionInfo.User.Roles.Select(x => x.EducationOrganizationId).ToList(); model.Agencies = agencies; var impersonateAgencyPrivilege = ConfigurationManager.AppSettings["DPI.ImpersonateAgencyPrivilege"]; var dpiAgencyKey = int.Parse(ConfigurationManager.AppSettings["DPI.AgencyKey"]); var orgs = _orgBusiness.GetEducationOrganizations(DateTime.Now.GetSchoolYear(), agencies).Select(o => new SelectableAgency { EducationOrganizationId = o.EducationOrganizationId, NameOfInstitution = o.NameOfInstitution }); model.SelectableAgencies = orgs.ToList(); model.CanImpersonate = _sessionInfo.User.HasPrivilege(dpiAgencyKey, impersonateAgencyPrivilege); } } } catch (Exception ex) { model.Exception = ex.ToString(); } return(View(model)); }
public void OnAuthentication(AuthenticationContext filterContext) { var wamsUser = (WamsPrincipal)filterContext.RequestContext.HttpContext.User; if (wamsUser == null) { _log.Error($"{wamsUser} is null"); filterContext.Result = SevereError(); return; } var agencies = wamsUser.Roles .Select(x => x.EducationOrganizationId) .Distinct() .ToList(); if (!agencies.Any()) { _log.Error($"{wamsUser.FullName} has no agencies"); filterContext.Result = SevereError(); return; } var schoolYear = DateTime.Today.GetSchoolYear(); _sessionInfo.User = wamsUser; if (_sessionInfo.CurrentAgencyId == null) { if (agencies.Count() == 1) { var agencyKey = wamsUser.Roles.First().EducationOrganizationId; var edOrgId = System.Convert.ToInt32(agencyKey); var org = _orgBusiness.GetEducationOrganization(schoolYear, edOrgId); if (org == null) { _log.Error($"{wamsUser.FullName} {_sessionInfo.CurrentAgencyId} org is null"); filterContext.Result = SevereError(); return; } _sessionInfo.SetCurrentAgency(agencyKey); filterContext.Controller.ViewBag.DefaultAgency = org.NameOfInstitution; } else { var area = (string)filterContext.RouteData.DataTokens["area"]; var controller = (string)filterContext.RouteData.Values["controller"]; var action = (string)filterContext.RouteData.Values["action"]; if (controller.Equals("Debug", StringComparison.InvariantCultureIgnoreCase) || controller.Equals("Error", StringComparison.InvariantCultureIgnoreCase) || ( controller.Equals("User", StringComparison.InvariantCultureIgnoreCase) && (action.Equals("Index", StringComparison.InvariantCultureIgnoreCase) || action.Equals("ChangeAgency", StringComparison.InvariantCultureIgnoreCase))) ) { return; } filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "area", "" }, { "controller", "User" }, { "action", "Index" } }); } } else { var org = _orgBusiness.GetEducationOrganization(schoolYear, _sessionInfo.CurrentAgencyId.GetValueOrDefault()); if (org == null) { var impersonateAgencyPrivilege = ConfigurationManager.AppSettings["DPI.ImpersonateAgencyPrivilege"]; var dpiAgencyKey = int.Parse(ConfigurationManager.AppSettings["DPI.AgencyKey"]); if (agencies.Count() > 1 || wamsUser.HasPrivilege(dpiAgencyKey, impersonateAgencyPrivilege)) { //agency not found, but more than one agency or can impersonate var area = (string)filterContext.RouteData.DataTokens["area"]; var controller = (string)filterContext.RouteData.Values["controller"]; var action = (string)filterContext.RouteData.Values["action"]; if (controller.Equals("Debug", StringComparison.InvariantCultureIgnoreCase) || controller.Equals("Error", StringComparison.InvariantCultureIgnoreCase) || ( controller.Equals("User", StringComparison.InvariantCultureIgnoreCase) && (action.Equals("Index", StringComparison.InvariantCultureIgnoreCase) || action.Equals("ChangeAgency", StringComparison.InvariantCultureIgnoreCase))) ) { return; } filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "area", "" }, { "controller", "User" }, { "action", "Index" } }); } else { _log.Error($"{wamsUser.FullName} cannot access {_sessionInfo.CurrentAgencyId}"); filterContext.Result = SevereError(); return; } } else { filterContext.Controller.ViewBag.DefaultAgency = org.NameOfInstitution; } } if (_sessionInfo.CurrentAgencyId.GetValueOrDefault() > 0) { var impersonateAgencyPrivilege = ConfigurationManager.AppSettings["DPI.ImpersonateAgencyPrivilege"]; var dpiAgencyKey = int.Parse(ConfigurationManager.AppSettings["DPI.AgencyKey"]); filterContext.Controller.ViewBag.Privileges = wamsUser.GetPrivileges(_sessionInfo.CurrentAgencyId.GetValueOrDefault()); filterContext.Controller.ViewBag.MultipleAgency = agencies.Count() > 1 || wamsUser.HasPrivilege(dpiAgencyKey, impersonateAgencyPrivilege); } }