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));
        }
Beispiel #2
0
        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);
            }
        }