AuthHelper.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Net;
  3. using System.Net.Http;
  4. using System.Net.Http.Headers;
  5. using System.Net.Mime;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. using Jellyfin.Api.Models.StartupDtos;
  9. using Jellyfin.Api.Models.UserDtos;
  10. using Jellyfin.Extensions.Json;
  11. using Xunit;
  12. namespace Jellyfin.Server.Integration.Tests
  13. {
  14. public static class AuthHelper
  15. {
  16. public const string AuthHeaderName = "X-Emby-Authorization";
  17. public const string DummyAuthHeader = "MediaBrowser Client=\"Jellyfin.Server Integration Tests\", DeviceId=\"69420\", Device=\"Apple II\", Version=\"10.8.0\"";
  18. public static async Task<string> CompleteStartupAsync(HttpClient client)
  19. {
  20. var jsonOptions = JsonDefaults.Options;
  21. var userResponse = await client.GetByteArrayAsync("/Startup/User").ConfigureAwait(false);
  22. var user = JsonSerializer.Deserialize<StartupUserDto>(userResponse, jsonOptions);
  23. using var completeResponse = await client.PostAsync("/Startup/Complete", new ByteArrayContent(Array.Empty<byte>())).ConfigureAwait(false);
  24. Assert.Equal(HttpStatusCode.NoContent, completeResponse.StatusCode);
  25. using var content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(
  26. new AuthenticateUserByName()
  27. {
  28. Username = user!.Name,
  29. Pw = user.Password,
  30. },
  31. jsonOptions));
  32. content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
  33. content.Headers.Add("X-Emby-Authorization", DummyAuthHeader);
  34. using var authResponse = await client.PostAsync("/Users/AuthenticateByName", content).ConfigureAwait(false);
  35. var auth = await JsonSerializer.DeserializeAsync<AuthenticationResultDto>(
  36. await authResponse.Content.ReadAsStreamAsync().ConfigureAwait(false),
  37. jsonOptions).ConfigureAwait(false);
  38. return auth!.AccessToken;
  39. }
  40. public static void AddAuthHeader(this HttpHeaders headers, string accessToken)
  41. {
  42. headers.Add(AuthHeaderName, DummyAuthHeader + $", Token={accessToken}");
  43. }
  44. private class AuthenticationResultDto
  45. {
  46. public string AccessToken { get; set; } = string.Empty;
  47. public string ServerId { get; set; } = string.Empty;
  48. }
  49. }
  50. }