public async static Task <List <Course> > GetAllStudentActiveCourses(UserCredential credential) { var service = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "UbiGrade" }); CoursesResource.ListRequest request = service.Courses.List(); // Restricts returned courses to those in one of the specified states // The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED. request.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; // Restricts returned courses to those having a teacher with the specified identifier. The identifier can be one of the following: // - the numeric identifier for the user // - the email address of the user // - the string literal "me", indicating the requesting user //request.TeacherId = "me"; // List courses. List <Course> courses = new List <Course>(); ListCoursesResponse response = await request.ExecuteAsync(); courses.AddRange(response.Courses); return(courses); }
public static async Task <TestConnectionMessage> TestAsync(Controller ct, int leaId, string userEmail, ISetupBusiness setupBusiness, CancellationToken cancellationToken) { var result = await new AuthorizationCodeMvcApp(ct, new AppFlowMetadata(leaId, setupBusiness)). AuthorizeAsync(userEmail, cancellationToken).ConfigureAwait(true); if (result.Credential != null) { var service = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = APPLICATION_NAME }); CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 1; // List courses. try { ListCoursesResponse response = request.Execute(); if (response != null) { var thisUser = service.UserProfiles.Get(userEmail).Execute(); return(new TestConnectionMessage { Connected = true, Message = "Successful Google Classroom connection", UserId = thisUser.Id }); } else { return(new TestConnectionMessage { Connected = false, Message = "No Google Classroom response" }); } } catch (Exception ex) { return(new TestConnectionMessage { Connected = false, Message = ex.Message }); } } else { return(new TestConnectionMessage { Connected = false, Message = "Credential failure for Google Classroom" }); } }
public async Task <IActionResult> ListCourses() { var cred = await _auth.GetCredentialAsync(); var model = await LoadUserInfoAsync(); try { using (var classroomService = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = cred, ApplicationName = "gc2lti" })) { // Get the list of the user's courses model.Courses = new List <CourseModel>(); var coursesRequest = classroomService.Courses.List(); coursesRequest.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; coursesRequest.TeacherId = "me"; ListCoursesResponse coursesResponse = null; do { if (coursesResponse != null) { coursesRequest.PageToken = coursesResponse.NextPageToken; } coursesResponse = await coursesRequest.ExecuteAsync(); if (coursesResponse.Courses != null) { foreach (var course in coursesResponse.Courses) { model.Courses.Add(new CourseModel { CourseId = course.Id, CourseName = course.Name }); } } } while (!string.IsNullOrEmpty(coursesResponse.NextPageToken)); return(View("Index", model)); } } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e)); } }
private void Form1_Load(object sender, EventArgs e) { UserCredential credential; using (var stream = new FileStream("credentials-p4.json", FileMode.Open, FileAccess.Read)) { // The file token.json stores the user's access and refresh tokens, and is created // automatically when the authorization flow completes for the first time. string credPath = "token.json"; credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; Console.WriteLine("Credential file saved to: " + credPath); } //Servicio // Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); // Define request parameters. CoursesResource.ListRequest request = service.Courses.List(); //request.PageSize = 10; // List courses. ListCoursesResponse response = request.Execute(); Console.WriteLine("Courses:"); if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { Console.WriteLine("{0} ({1})", course.Name, course.Id); this.DtGVClases.Rows.Add(course.Id, course.Name + " - " + course.Section); } } else { Console.WriteLine("No courses found."); } //Console.Read(); //Fin Servicio }
static void Main(string[] args) { try { UserCredential credential; // Load client secrets. using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read)) { /* The file token.json stores the user's access and refresh tokens, and is created * automatically when the authorization flow completes for the first time. */ string credPath = "token.json"; credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.FromStream(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; Console.WriteLine("Credential file saved to: " + credPath); } // Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = ApplicationName }); // Define request parameters. CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 10; // List courses. ListCoursesResponse response = request.Execute(); Console.WriteLine("Courses:"); if (response.Courses -= null || response.Courses.Count == 0) { Console.WriteLine("No courses found."); return; } foreach (var course in response.Courses) { Console.WriteLine("{0} ({1})", course.Name, course.Id); } } catch (FileNotFoundException e) { Console.WriteLine(e.Message); } }
private void Run() { Scopes.AddRange(typeof(ClassroomService.Scope).GetProperties().Select(x => (string)x.GetValue(this, null))); Console.WriteLine(Scopes.Aggregate((x, y) => $"{x}, {y}")); UserCredential credential; using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read)) { // The file token.json stores the user's access and refresh tokens, and is created // automatically when the authorization flow completes for the first time. string credPath = "token.json"; credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; Console.WriteLine("Credential file saved to: " + credPath); } // Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); // Define request parameters. CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 10; // List courses. ListCoursesResponse response = request.Execute(); Console.WriteLine("Courses:"); if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { Console.WriteLine("{0} ({1})", course.Name, course.Id); } } else { Console.WriteLine("No courses found."); } Console.Read(); }
static void Main(string[] args) { UserCredential credential; using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { string credPath = System.Environment.GetFolderPath( System.Environment.SpecialFolder.Personal); credPath = Path.Combine(credPath, ".credentials/classroom.googleapis.com-dotnet-quickstart.json"); credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; Console.WriteLine("Credential file saved to: " + credPath); } // Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); // Define request parameters. CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 10; // List courses. ListCoursesResponse response = request.Execute(); Console.WriteLine("Courses:"); if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { Console.WriteLine("{0} ({1})", course.Name, course.Id); } } else { Console.WriteLine("No courses found."); } Console.Read(); }
public async static Task <List <Course> > GetAllStudentActiveCoursesByAccesstoken(UserCredential credential) { var service = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "UbiGrade" }); CoursesResource.ListRequest request = service.Courses.List(); request.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; List <Course> courses = new List <Course>(); ListCoursesResponse response = await request.ExecuteAsync(); courses.AddRange(response.Courses); return(courses); }
public List <Course> GetCourses(ClassroomService service) { CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 10; ListCoursesResponse response = request.Execute(); List <Course> vsCourse = new List <Course>(); if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { vsCourse.Add(course); } } return(vsCourse); }
public List <VCourse> Initiate() { UserCredential credential; using (var stream = new FileStream("VidhyaSadhan-4cc497c45b73.json", FileMode.Open, FileAccess.Read)) { // The file token.json stores the user's access and refresh tokens, and is created // automatically when the authorization flow completes for the first time. string credPath = "token.json"; credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; Console.WriteLine("Credential file saved to: " + credPath); } var service = new ClassroomService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 10; // List courses. ListCoursesResponse response = request.Execute(); List <VCourse> vsCourse = new List <VCourse>(); if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { vsCourse.Add((VCourse)course); } } return(vsCourse); }
/// <summary> /// Window loaded -- fetch the list of classes associcated with this user /// </summary> private void Window_Loaded(object sender, RoutedEventArgs e) { logger.Log("Starting Assignment Create"); // Create Classroom API service. var service = GoogleClassroomManager.CreateApiService(); // Define request parameters. CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 100; // List courses. ListCoursesResponse response = request.Execute(); // populate the results Courses courses = new Courses(); this.CoursesDisplay.DataContext = courses.CourseEntries; logger.Log("Courses:"); Wait.Visibility = Visibility.Hidden; Status.Visibility = Visibility.Visible; if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { logger.Log($"{course.Name} ({course.Id}, {course.CourseState}"); courses.Add(new Classroom.Course { CourseId = course.Id, CourseName = course.Name }); } Status.Text = "Select a course and press Create"; } else { Status.Text = logger.Log("No courses found."); } }
/// <summary> /// 1. Collect the courseId /// </summary> public async Task <IActionResult> Course(CancellationToken cancellationToken, CourseSelectionModel model) { var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata(ClientId, ClientSecret, _context)) .AuthorizeAsync(cancellationToken) .ConfigureAwait(false); if (result.Credential == null) { return(Redirect(result.RedirectUri)); } model.UserId = result.Credential.UserId; try { using (var classroomService = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = "gc2lti" })) { if (!await SaveOfflineToken(cancellationToken, classroomService, result)) { return(RedirectToAction("Course", model)); } // Get the user's name var profileRequest = classroomService.UserProfiles.Get("me"); var profile = await profileRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); model.PersonName = profile.Name.FullName; // Get the list of the user's courses var coursesRequest = classroomService.Courses.List(); coursesRequest.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; coursesRequest.TeacherId = "me"; ListCoursesResponse coursesResponse = null; var courses = new List <SelectListItem>(); do { if (coursesResponse != null) { coursesRequest.PageToken = coursesResponse.NextPageToken; } coursesResponse = await coursesRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); if (coursesResponse.Courses != null) { courses.AddRange ( coursesResponse.Courses.Select(c => new SelectListItem { Value = c.Id, Text = c.Name }) ); } } while (!string.IsNullOrEmpty(coursesResponse.NextPageToken)); model.Courses = new SelectList(courses, "Value", "Text"); return(View(model)); } } catch (GoogleApiException e) when(e.Message.Contains("invalid authentication credentials")) { // Force a new UserId TempData.Remove("user"); return(RedirectToAction("Course", model)); } catch (TokenResponseException e) when(e.Message.Contains("invalid_grant")) { // Force a new UserId TempData.Remove("user"); return(RedirectToAction("Course", model)); } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e)); } }
/// <summary> /// Display the list of the the user's Google Classroom classes. Scopes /// requested: email, profile, and ClassroomService.Scope.ClassroomCoursesReadonly. /// </summary> public async Task <IActionResult> ListCourses(CancellationToken cancellationToken) { // If they haven't signed in yet, do that first if (!User.Identity.IsAuthenticated) { return(new ChallengeResult(new AuthenticationProperties { RedirectUri = Url.Action("ListCourses") })); } // Simplify the incremental auth experience by providing a login_hint. The user will // not be asked to select their account if they have already signed in. var loginHint = GetUserEmail(); var accessToken = await HttpContext.GetTokenAsync("ClassList", "access_token"); var expires = await HttpContext.GetTokenAsync("ClassList", "expires_at"); DateTime.TryParse(expires, out var expiresAt); if (accessToken == null || DateTime.Now > expiresAt) { return(new ChallengeResult("ClassList", new AuthenticationProperties() { Parameters = { new KeyValuePair <string, object>("login_hint", loginHint), new KeyValuePair <string, object>("include_granted_scopes", true) }, RedirectUri = Url.Action("ListCourses") })); } var model = new CoursesModel(); try { using (var classroomService = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = GoogleCredential.FromAccessToken(accessToken), ApplicationName = "gc2lti" })) { // Get the list of the user's courses model.Courses = new List <CourseModel>(); var coursesRequest = classroomService.Courses.List(); coursesRequest.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; coursesRequest.TeacherId = "me"; ListCoursesResponse coursesResponse = null; do { if (coursesResponse != null) { coursesRequest.PageToken = coursesResponse.NextPageToken; } coursesResponse = await coursesRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); if (coursesResponse.Courses != null) { foreach (var course in coursesResponse.Courses) { model.Courses.Add(new CourseModel { CourseId = course.Id, CourseName = course.Name }); } } } while (!string.IsNullOrEmpty(coursesResponse.NextPageToken)); return(View("Index", model)); } } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e)); } }
private void PopulateCourses(string customerID, string userKey, bool getStudents, bool getTeachers, bool skipMembersForArchived, BlockingCollection <GoogleCourse> completedCourses, int memberThreads) { BlockingCollection <GoogleCourse> studentsQueue = new BlockingCollection <GoogleCourse>(); BlockingCollection <GoogleCourse> teachersQueue = new BlockingCollection <GoogleCourse>(); BlockingCollection <GoogleCourse> incomingCourses = new BlockingCollection <GoogleCourse>(); List <Task> tasks = new List <Task>(); if (getStudents) { Task t = new Task(() => this.ConsumeStudentsQueue(memberThreads, studentsQueue, completedCourses)); t.Start(); tasks.Add(t); } if (getTeachers) { Task t = new Task(() => this.ConsumeTeachersQueue(memberThreads, teachersQueue, completedCourses)); t.Start(); tasks.Add(t); } Task t1 = new Task(() => { using (PoolItem <ClassroomService> connection = this.classroomServicePool.Take(NullValueHandling.Ignore)) { string token = null; CoursesResource.ListRequest request = new CoursesResource.ListRequest(connection.Item) { //PageSize = 500 }; request.PrettyPrint = false; do { request.PageToken = token; ListCoursesResponse pageResults = request.ExecuteWithRetry(RetryEvents.Backoff | RetryEvents.Timeout, RetryCount); if (pageResults.Courses == null) { break; } if (pageResults.Courses == null) { break; } foreach (Course item in pageResults.Courses) { GoogleCourse c = new GoogleCourse(item); c.RequiresStudents = getStudents && getMembersForCourse(c.Course, skipMembersForArchived); c.RequiresTeachers = getTeachers && getMembersForCourse(c.Course, skipMembersForArchived); incomingCourses.Add(c); if (c.RequiresStudents) { studentsQueue.Add(c); } if (c.RequiresTeachers) { teachersQueue.Add(c); } if (!c.RequiresStudents && !c.RequiresTeachers) { completedCourses.Add(c); } } token = pageResults.NextPageToken; } while (token != null); incomingCourses.CompleteAdding(); studentsQueue.CompleteAdding(); teachersQueue.CompleteAdding(); } }); t1.Start(); tasks.Add(t1); Task.WhenAll(tasks).ContinueWith((a) => completedCourses.CompleteAdding()); }
private async Task FillInContextAndResourceInfo(CancellationToken cancellationToken, ClassroomService classroomService, LtiRequest ltiRequest) { // Fill in the context (course) information if (AlternateCourseIdForSession != null) { var coursesRequest = classroomService.Courses.List(); coursesRequest.CourseStates = CoursesResource.ListRequest.CourseStatesEnum.ACTIVE; ListCoursesResponse coursesResponse = null; do { if (coursesResponse != null) { coursesRequest.PageToken = coursesResponse.NextPageToken; } coursesResponse = await coursesRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); if (coursesResponse.Courses != null) { foreach (var course in coursesResponse.Courses) { if (Uri.TryCreate(course.AlternateLink, UriKind.Absolute, out var alternateLink)) { var alternateCourseIdFromList = alternateLink.Segments[alternateLink.Segments.Length - 1]; if (alternateCourseIdFromList.Equals(AlternateCourseIdForSession)) { ltiRequest.ContextId = course.Id; ltiRequest.ContextTitle = course.Name; ltiRequest.ContextType = ContextType.CourseSection; break; } } } } } while (string.IsNullOrEmpty(ltiRequest.ContextId) && !string.IsNullOrEmpty(coursesResponse.NextPageToken)); } // Fill in the resource (courseWork) information if (!string.IsNullOrEmpty(ltiRequest.ContextId)) { var courseWorkRequest = classroomService.Courses.CourseWork.List(ltiRequest.ContextId); ListCourseWorkResponse courseWorkResponse = null; var thisPageUrl = Request.GetDisplayUrl(); do { if (courseWorkResponse != null) { courseWorkRequest.PageToken = courseWorkResponse.NextPageToken; } courseWorkResponse = await courseWorkRequest.ExecuteAsync(cancellationToken) .ConfigureAwait(false); var courseWorkItem = courseWorkResponse.CourseWork?.FirstOrDefault(w => w.Materials.FirstOrDefault(m => m.Link.Url.Equals(thisPageUrl)) != null); if (courseWorkItem != null) { ltiRequest.ResourceLinkId = courseWorkItem.Id; ltiRequest.ResourceLinkTitle = courseWorkItem.Title; ltiRequest.ResourceLinkDescription = courseWorkItem.Description; } } while (string.IsNullOrEmpty(ltiRequest.ResourceLinkId) && !string.IsNullOrEmpty(courseWorkResponse.NextPageToken)); } }
private async Task <List <ClassesViewModel> > GetClassesAsync() { string externalAccessToken = null; ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); if (User.Identity.IsAuthenticated) { var userFromManager = await _userManager.GetUserAsync(User); string authenticationMethod = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.AuthenticationMethod)?.Value; if (authenticationMethod != null) { externalAccessToken = await _userManager.GetAuthenticationTokenAsync(userFromManager, authenticationMethod, "access_token"); } else { externalAccessToken = await _userManager.GetAuthenticationTokenAsync(userFromManager, "Google", "access_token"); } GoogleCredential googleCredential = GoogleCredential.FromAccessToken(externalAccessToken); // Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer() { HttpClientInitializer = googleCredential, ApplicationName = _configuration["ApplicationName"], }); // Define request parameters. CoursesResource.ListRequest request = service.Courses.List(); request.PageSize = 100; try { // List courses. ListCoursesResponse response = request.Execute(); var classes = new List <ClassesViewModel>(); if (response.Courses != null && response.Courses.Count > 0) { foreach (var course in response.Courses) { var courseWorksRequest = service.Courses.CourseWork.List(course.Id); ListCourseWorkResponse cwList = courseWorksRequest.Execute(); var studentsListRequest = service.Courses.Students.List(course.Id); ListStudentsResponse studentList = studentsListRequest.Execute(); classes.Add(new ClassesViewModel { Name = course.Name, Id = course.Id, Description = course.Description, CourseWorksCount = cwList?.CourseWork?.Count, StudentsCount = studentList?.Students?.Count }); } } return(classes); } catch (Exception err) { return(new List <ClassesViewModel>()); } } return(new List <ClassesViewModel>()); }