private bool TestSchoologyConnection(ConnectionTestDTO test, out string info) { if (!TestDomainFormat(test, out info)) { return(false); } try { Task <dynamic> task = Task.Run <dynamic>(async() => await _schoologyClient.GetRestCall <dynamic>(test.login, test.password, "courses")); var courses = task.Result; return(courses != null); } catch (AggregateException ex) { _logger.Error("[TestSchoologyConnection]", ex); if (ex.InnerExceptions.First() is HttpRequestException reqEx) { info = reqEx.Message; } return(false); } }
public override async Task <(List <LmsUserDTO> users, string error)> GetUsersOldStyle(ILmsLicense lmsCompany, int courseId, LtiParamDTO param = null) { if (lmsCompany == null) { throw new ArgumentNullException(nameof(lmsCompany)); } //var course = _restApiClient.GetRestCall<RootObject>(lmsCompany.AdminUser.Username, // lmsCompany.AdminUser.Password, // $"courses/{courseId}/sections").Result; string clientId = lmsCompany.GetSetting <string>(LmsCompanySettingNames.SchoologyConsumerKey); string clientSecret = lmsCompany.GetSetting <string>(LmsCompanySettingNames.SchoologyConsumerSecret); var section = await _restApiClient.GetRestCall <Section>(clientId, clientSecret, $"sections/{courseId}"); List <Enrollment> enrollments = new List <Enrollment>(); RootObject2 enrollmentCallResult; int startPage = 0; int pageSize = 20; do { enrollmentCallResult = await _restApiClient.GetRestCall <RootObject2>(clientId, clientSecret, $"sections/{section.id}/enrollments?start={startPage}&limit={pageSize}"); enrollments.AddRange(enrollmentCallResult.enrollment); startPage += pageSize; } while (enrollments.Count < Int32.Parse(enrollmentCallResult.total)); //https://developers.schoology.com/api-documentation/rest-api-v1/enrollment //status 5: Archived (Course specific status members can be placed in before being fully unenrolled) enrollments = enrollments.Distinct().Where(e => e.status != "5").ToList(); var enrolledUserTasks = enrollments.GroupBy(u => u.uid).Select(g => g.First()).Select(enrollment => { var usr = new SchoologyRestApiClient().GetRestCall <User>(clientId, clientSecret, $"users/{enrollment.uid}"); return(usr.ContinueWith(x => { var u = x.Result; u.admin = enrollment.admin; return u; })); }); var enrolledUsers = await Task.WhenAll(enrolledUserTasks); var users = enrolledUsers .GroupBy(u => u.uid) .Select(g => g.First()) .Select(x => new LmsUserDTO { Id = x.uid, Login = string.IsNullOrWhiteSpace(x.username) ? x.primary_email : x.username, // TODO: middle name Name = x.name_first + " " + x.name_last, Email = x.primary_email, LmsRole = x.admin == 1 ? "Teacher" : "Student", PrimaryEmail = x.primary_email, }) .ToList(); return(users, null); }