public static PlayerApiClient GetPlayerApiClient(IHttpClientFactory httpClientFactory, string apiUrl, TokenResponse tokenResponse) { var client = ApiClientsExtensions.GetHttpClient(httpClientFactory, apiUrl, tokenResponse); var apiClient = new PlayerApiClient(client); return(apiClient); }
public static void AddPlayerApiClient(this IServiceCollection services) { services.AddScoped <IPlayerApiClient, PlayerApiClient>(p => { var httpContextAccessor = p.GetRequiredService <IHttpContextAccessor>(); var httpClientFactory = p.GetRequiredService <IHttpClientFactory>(); var clientOptions = p.GetRequiredService <ClientOptions>(); var playerUri = new Uri(clientOptions.urls.playerApi); string authHeader = httpContextAccessor.HttpContext.Request.Headers["Authorization"]; if (authHeader == null) { var token = httpContextAccessor.HttpContext.Request.Query["access_token"]; authHeader = new AuthenticationHeaderValue("Bearer", token).ToString(); } var httpClient = httpClientFactory.CreateClient(); httpClient.BaseAddress = playerUri; httpClient.DefaultRequestHeaders.Add("Authorization", authHeader); var apiClient = new PlayerApiClient(httpClient); return(apiClient); }); }
public ViewService( IHttpClientFactory httpClientFactory, IMemoryCache cache, ClientOptions clientOptions, ILogger <ViewService> logger) { _cache = cache; _logger = logger; var playerUri = new Uri(clientOptions.urls.playerApi); var httpClient = httpClientFactory.CreateClient("player-admin"); httpClient.BaseAddress = playerUri; var playerApiClient = new PlayerApiClient(httpClient); _playerApiClient = playerApiClient; }
public static void AddPlayerApiClient(this IServiceCollection services) { services.AddScoped <IPlayerApiClient, PlayerApiClient>(p => { var httpContextAccessor = p.GetRequiredService <IHttpContextAccessor>(); var httpClientFactory = p.GetRequiredService <IHttpClientFactory>(); var clientOptions = p.GetRequiredService <ClientOptions>(); var playerUri = new Uri(clientOptions.urls.playerApi); string authHeader = httpContextAccessor.HttpContext.Request.Headers["Authorization"]; var httpClient = httpClientFactory.CreateClient(); httpClient.BaseAddress = playerUri; httpClient.DefaultRequestHeaders.Add("Authorization", authHeader); var apiClient = new PlayerApiClient(httpClient); return(apiClient); }); }
public static async Task <Guid?> CreatePlayerViewAsync(PlayerApiClient playerApiClient, EventEntity eventEntity, Guid parentViewId, CancellationToken ct) { try { var view = await playerApiClient.CloneViewAsync(parentViewId, ct); view.Name = $"{view.Name.Replace("Clone of ", "")} - {eventEntity.Username}"; await playerApiClient.UpdateViewAsync((Guid)view.Id, view, ct); // add user to first non-admin team var roles = await playerApiClient.GetRolesAsync(ct); var teams = (await playerApiClient.GetViewTeamsAsync((Guid)view.Id, ct)); foreach (var team in teams) { if (team.Permissions.Where(p => p.Key == "ViewAdmin").Any()) { continue; } if (team.RoleId.HasValue) { var role = roles.Where(r => r.Id == team.RoleId).FirstOrDefault(); if (role != null && role.Permissions.Where(p => p.Key == "ViewAdmin").Any()) { continue; } } await playerApiClient.AddUserToTeamAsync(team.Id, eventEntity.UserId, ct); } return(view.Id); } catch (Exception ex) { return(null); } }
public static async Task <bool> AddUserToViewTeamAsync(PlayerApiClient playerApiClient, Guid viewId, Guid userId, CancellationToken ct) { try { var view = await playerApiClient.GetViewAsync(viewId, ct); var roles = await playerApiClient.GetRolesAsync(ct); var teams = await playerApiClient.GetViewTeamsAsync(viewId, ct); //Get first non-admin team foreach (var team in teams) { if (team.Permissions.Where(p => p.Key == "ViewAdmin").Any()) { continue; } if (team.RoleId.HasValue) { var role = roles.Where(r => r.Id == team.RoleId).FirstOrDefault(); if (role != null && role.Permissions.Where(p => p.Key == "ViewAdmin").Any()) { continue; } } await playerApiClient.AddUserToTeamAsync(team.Id, userId, ct); } return(true); } catch (Exception ex) { return(false); } }
public static async Task <string> GetCasterVarsFileContentAsync(EventEntity eventEntity, PlayerApiClient playerApiClient, CancellationToken ct) { try { var varsFileContent = ""; var view = await playerApiClient.GetViewAsync((Guid)eventEntity.ViewId, ct); // TODO: exercise_id is deprecated. Remove when no longer in use varsFileContent = $"exercise_id = \"{view.Id}\"\r\nview_id = \"{view.Id}\"\r\nuser_id = \"{eventEntity.UserId}\"\r\nusername = \"{eventEntity.Username}\"\r\n"; var teams = await playerApiClient.GetViewTeamsAsync((Guid)view.Id, ct); foreach (var team in teams) { var cleanTeamName = Regex.Replace(team.Name.ToLower().Replace(" ", "_"), "[@&'(\\s)<>#]", "", RegexOptions.None); varsFileContent += $"{cleanTeamName} = \"{team.Id}\"\r\n"; } return(varsFileContent); } catch (Exception ex) { return(""); } }
public static async Task <bool> DeletePlayerViewAsync(string playerApiUrl, Guid?viewId, PlayerApiClient playerApiClient, CancellationToken ct) { // no view to delete if (viewId == null) { return(true); } // try to delete the view try { await playerApiClient.DeleteViewAsync((Guid)viewId, ct); return(true); } catch (Exception ex) { return(false); } }
private async Task CloneMaps(ViewCreated form, VmContext dbContext) { if (!form.ParentId.HasValue) { return; } var client = _clientFactory.CreateClient("player-admin"); client.BaseAddress = new Uri(_clientOptions.CurrentValue.urls.playerApi); var playerClient = new PlayerApiClient(client); // Get maps assigned to parent view var maps = await dbContext.Maps .Where(m => m.ViewId == form.ParentId) .Include(m => m.Coordinates) .ToListAsync(); if (maps.Count == 0) { return; } HashSet <Team> parentTeams = new HashSet <Team>(); HashSet <Team> childTeams = new HashSet <Team>(); // Views can't have duplicate teams, so use HashSet for constant time lookups try { parentTeams = (await playerClient.GetViewTeamsAsync(form.ParentId.Value)).ToHashSet(); childTeams = (await playerClient.GetViewTeamsAsync(form.ViewId)).ToHashSet(); } catch (ApiException ex) { // View no longer exists, so there is nothing to clone if (ex.StatusCode == (int)HttpStatusCode.NotFound) { return; } } var clonedMaps = new List <VmMap>(); // Create clones of maps assigned to the child view foreach (var map in maps) { var clone = map.Clone(); clone.ViewId = form.ViewId; var teamNames = parentTeams .Where(t => map.TeamIds.Contains((Guid)t.Id)) .Select(t => t.Name); var cloneTeamIds = childTeams .Where(t => teamNames.Contains(t.Name)) .Select(t => (Guid)t.Id); clone.TeamIds = cloneTeamIds.ToList(); dbContext.Maps.Add(clone); } await dbContext.SaveChangesAsync(); }