private readonly ZoomClient _thirdPartyClient; // encapsulate third party code, don't expose its API, make it replaceable public ZoomApiClient(IZoomCredentialsAccessor zoomCredentialsAccessor) { if (zoomCredentialsAccessor == null) { throw new ArgumentNullException(nameof(zoomCredentialsAccessor)); } var zoomCredentials = zoomCredentialsAccessor.GetJwtCredentials(); _thirdPartyClient = new ZoomClient(new JwtConnectionInfo(zoomCredentials.ApiKey, zoomCredentials.ApiSecret)); }
private async Task <ZoomClient> GetClientAsync() { if (_thirdPartyClient != null) { return(_thirdPartyClient); } var zoomCredentials = await _zoomCredentialsAccessor.GetJwtCredentialsAsync(); return(_thirdPartyClient = new ZoomClient(new JwtConnectionInfo( zoomCredentials.ApiKey, zoomCredentials.ApiSecret))); }
public void Dispose() { // Arrange var connectionInfo = new JwtConnectionInfo(API_KEY, API_SECRET); var client = new ZoomClient(connectionInfo, (IWebProxy)null); // Act client.Dispose(); // Assert // Nothing to assert. We just want to confirm that 'Dispose' did not throw any exception }
public async Task <ActionResult> Detail(string meetingId) { meetingId = meetingId.Replace("-", ""); if (!long.TryParse(meetingId, out long id)) { return(BadRequest()); } var zoom = new ZoomClient(HttpContext); Meeting meeting = await zoom.GetMeetingAsync(id); return(View(meeting)); }
public static void Initialize(string userId, string meetingPassword, string token, string zoomApiKey, string zoomApiSecret, string zoomApiBaseUrl) { UserId = userId; MeetingPassword = meetingPassword; Token = token; ZoomApiKey = zoomApiKey; ZoomApiSecret = zoomApiSecret; ZoomApiBaseUrl = zoomApiBaseUrl; Instance = new ZoomClient(new Models.ZoomClientOptions() { ZoomApiBaseUrl = ZoomApiBaseUrl, ZoomApiKey = ZoomApiKey, ZoomApiSecret = ZoomApiSecret }); }
public async Task <IActionResult> Index() { if (!User.Identity.IsAuthenticated) { return(View()); } var zoom = new ZoomClient(HttpContext); string userId = User.FindFirst(c => c.Type == "urn:zoom:userId")?.Value; var model = new IndexModel() { Meetings = (await zoom.ListMeetingsAsync()).Meetings, ZoomUserId = userId, ZoomFirstName = User.FindFirst(c => c.Type == ClaimTypes.GivenName)?.Value, ZoomLastName = User.FindFirst(c => c.Type == ClaimTypes.Surname)?.Value, ZoomEmail = User.FindFirst(c => c.Type == ClaimTypes.Email)?.Value, }; return(View(model)); }
public static List <User> GetZoomUsers(string apikey, string apisecret) { var connectionInfo = new JwtConnectionInfo(apikey, apisecret); var zoomClient = new ZoomClient(connectionInfo); List <User> userlist = new List <User>(); int pagenumber = 1; // Iterate through all pages and load all users in the account. As Zoom provide maximum 300 users to be loaded in one api call. while (true) { PaginatedResponse <User> paginateduserlist = zoomClient.Users.GetAllAsync(UserStatus.Active, null, 300, pagenumber).Result; userlist.AddRange(paginateduserlist.Records); if (paginateduserlist.PageCount == pagenumber) { break; } pagenumber++; } return(userlist); }
public async Task <int> RunAsync() { // ----------------------------------------------------------------------------- // Do you want to proxy requests through Fiddler? Can be useful for debugging. var useFiddler = true; var fiddlerPort = 8866; // By default Fiddler4 uses port 8888 and Fiddler Everywhere uses port 8866 // Do you want to use JWT or OAuth? var connectionMethod = ConnectionMethods.OAuth; // -----------------------------------;------------------------------------------ // Configure ZoomNet client IConnectionInfo connectionInfo; if (connectionMethod == ConnectionMethods.Jwt) { var apiKey = Environment.GetEnvironmentVariable("ZOOM_JWT_APIKEY", EnvironmentVariableTarget.User); var apiSecret = Environment.GetEnvironmentVariable("ZOOM_JWT_APISECRET", EnvironmentVariableTarget.User); connectionInfo = new JwtConnectionInfo(apiKey, apiSecret); } else { var clientId = Environment.GetEnvironmentVariable("ZOOM_OAUTH_CLIENTID", EnvironmentVariableTarget.User); var clientSecret = Environment.GetEnvironmentVariable("ZOOM_OAUTH_CLIENTSECRET", EnvironmentVariableTarget.User); var refreshToken = Environment.GetEnvironmentVariable("ZOOM_OAUTH_REFRESHTOKEN", EnvironmentVariableTarget.User); var accessToken = Environment.GetEnvironmentVariable("ZOOM_OAUTH_ACCESSTOKEN", EnvironmentVariableTarget.User); connectionInfo = new OAuthConnectionInfo(clientId, clientSecret, refreshToken, accessToken, (newRefreshToken, newAccessToken) => { Environment.SetEnvironmentVariable("ZOOM_OAUTH_REFRESHTOKEN", newRefreshToken, EnvironmentVariableTarget.User); Environment.SetEnvironmentVariable("ZOOM_OAUTH_ACCESSTOKEN", newAccessToken, EnvironmentVariableTarget.User); }); //var authorizationCode = "<-- the code generated by Zoom when the app is authorized by the user -->"; //connectionInfo = new OAuthConnectionInfo(clientId, clientSecret, authorizationCode, // (newRefreshToken, newAccessToken) => // { // Environment.SetEnvironmentVariable("ZOOM_OAUTH_REFRESHTOKEN", newRefreshToken, EnvironmentVariableTarget.User); // Environment.SetEnvironmentVariable("ZOOM_OAUTH_ACCESSTOKEN", newAccessToken, EnvironmentVariableTarget.User); // }); } var userId = Environment.GetEnvironmentVariable("ZOOM_USERID"); var proxy = useFiddler ? new WebProxy($"http://localhost:{fiddlerPort}") : null; var client = new ZoomClient(connectionInfo, proxy, null, _loggerFactory.CreateLogger <ZoomClient>()); // Configure Console var source = new CancellationTokenSource(); Console.CancelKeyPress += (s, e) => { e.Cancel = true; source.Cancel(); }; // Ensure the Console is tall enough and centered on the screen Console.WindowHeight = Math.Min(60, Console.LargestWindowHeight); Utils.CenterConsole(); // These are the integration tests that we will execute var integrationTests = new Type[] { typeof(Meetings), typeof(Users), typeof(Webinars), }; // Execute the async tests in parallel (with max degree of parallelism) var results = await integrationTests.ForEachAsync( async testType => { var log = new StringWriter(); try { var integrationTest = (IIntegrationTest)Activator.CreateInstance(testType); await integrationTest.RunAsync(userId, client, log, source.Token).ConfigureAwait(false); return(TestName : testType.Name, ResultCode : ResultCodes.Success, Message : SUCCESSFUL_TEST_MESSAGE); } catch (OperationCanceledException) { await log.WriteLineAsync($"-----> TASK CANCELLED").ConfigureAwait(false); return(TestName : testType.Name, ResultCode : ResultCodes.Cancelled, Message : "Task cancelled"); } catch (Exception e) { var exceptionMessage = e.GetBaseException().Message; await log.WriteLineAsync($"-----> AN EXCEPTION OCCURRED: {exceptionMessage}").ConfigureAwait(false); return(TestName : testType.Name, ResultCode : ResultCodes.Exception, Message : exceptionMessage); } finally { lock (Console.Out) { Console.Out.WriteLine(log.ToString()); } } }, MAX_ZOOM_API_CONCURRENCY) .ConfigureAwait(false); // Display summary var summary = new StringWriter(); await summary.WriteLineAsync("\n\n**************************************************").ConfigureAwait(false); await summary.WriteLineAsync("******************** SUMMARY *********************").ConfigureAwait(false); await summary.WriteLineAsync("**************************************************").ConfigureAwait(false); foreach (var(TestName, ResultCode, Message) in results.OrderBy(r => r.TestName).ToArray()) { var name = TestName.Length <= TEST_NAME_MAX_LENGTH ? TestName : TestName.Substring(0, TEST_NAME_MAX_LENGTH - 3) + "..."; await summary.WriteLineAsync($"{name.PadRight(TEST_NAME_MAX_LENGTH, ' ')} : {Message}").ConfigureAwait(false); } await summary.WriteLineAsync("**************************************************").ConfigureAwait(false); await Console.Out.WriteLineAsync(summary.ToString()).ConfigureAwait(false); // Prompt user to press a key in order to allow reading the log in the console var promptLog = new StringWriter(); await promptLog.WriteLineAsync("\n\n**************************************************").ConfigureAwait(false); await promptLog.WriteLineAsync("Press any key to exit").ConfigureAwait(false); Utils.Prompt(promptLog.ToString()); // Return code indicating success/failure var resultCode = (int)ResultCodes.Success; if (results.Any(result => result.ResultCode != ResultCodes.Success)) { if (results.Any(result => result.ResultCode == ResultCodes.Exception)) { resultCode = (int)ResultCodes.Exception; } else if (results.Any(result => result.ResultCode == ResultCodes.Cancelled)) { resultCode = (int)ResultCodes.Cancelled; } else { resultCode = (int)results.First(result => result.ResultCode != ResultCodes.Success).ResultCode; } } return(await Task.FromResult(resultCode)); }