mirror of
https://github.com/bitwarden/server
synced 2026-01-12 13:33:24 +00:00
Move services into their own files
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
namespace Bit.Core.Services;
|
||||
|
||||
public class NeverPlayIdServices : IPlayIdService
|
||||
{
|
||||
public string? PlayId
|
||||
{
|
||||
get => null;
|
||||
set { }
|
||||
}
|
||||
|
||||
public bool InPlay(out string playId)
|
||||
{
|
||||
playId = string.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
13
src/Core/Services/Play/Implementations/PlayIdService.cs
Normal file
13
src/Core/Services/Play/Implementations/PlayIdService.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Bit.Core.Services;
|
||||
|
||||
public class PlayIdService(IHostEnvironment hostEnvironment) : IPlayIdService
|
||||
{
|
||||
public string? PlayId { get; set; }
|
||||
public bool InPlay(out string playId)
|
||||
{
|
||||
playId = PlayId ?? string.Empty;
|
||||
return !string.IsNullOrEmpty(PlayId) && hostEnvironment.IsDevelopment();
|
||||
}
|
||||
}
|
||||
@@ -1,34 +1,9 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Bit.Core.Services;
|
||||
|
||||
public class PlayIdService(IHostEnvironment hostEnvironment) : IPlayIdService
|
||||
{
|
||||
public string? PlayId { get; set; }
|
||||
public bool InPlay(out string playId)
|
||||
{
|
||||
playId = PlayId ?? string.Empty;
|
||||
return !string.IsNullOrEmpty(PlayId) && hostEnvironment.IsDevelopment();
|
||||
}
|
||||
}
|
||||
|
||||
public class NeverPlayIdServices : IPlayIdService
|
||||
{
|
||||
public string? PlayId
|
||||
{
|
||||
get => null;
|
||||
set { }
|
||||
}
|
||||
|
||||
public bool InPlay(out string playId)
|
||||
{
|
||||
playId = string.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Singleton wrapper service that bridges singleton-scoped service boundaries for PlayId tracking.
|
||||
/// This allows singleton services to access the scoped PlayIdService via HttpContext.RequestServices.
|
||||
@@ -70,4 +45,4 @@ public class PlayIdSingletonService(IHttpContextAccessor httpContextAccessor, IH
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
27
src/Core/Services/Play/README.md
Normal file
27
src/Core/Services/Play/README.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Play Services
|
||||
|
||||
## Overview
|
||||
|
||||
The Play services provide automated testing infrastructure for tracking and cleaning up test data in development
|
||||
environments. A "Play" is a test session that groups entities (users, organizations, etc.) created during testing to
|
||||
enable bulk cleanup via the SeederAPI.
|
||||
|
||||
## How It Works
|
||||
|
||||
1. Test client sends `x-play-id` header with a unique Play identifier
|
||||
2. `PlayIdMiddleware` extracts the header and sets it on `IPlayIdService`
|
||||
3. Repositories check `IPlayIdService.InPlay()` when creating entities
|
||||
4. `IPlayDataService` records PlayData entries for tracked entities
|
||||
5. SeederAPI uses PlayData records to bulk delete all entities associated with a PlayId
|
||||
|
||||
Play services are **only active in Development environments**.
|
||||
|
||||
## Classes
|
||||
|
||||
- **`IPlayIdService`** - Interface for managing Play identifiers in the current request scope
|
||||
- **`IPlayDataService`** - Interface for tracking entities created during a Play session
|
||||
- **`PlayIdService`** - Default scoped implementation for tracking Play sessions per HTTP request
|
||||
- **`NeverPlayIdServices`** - No-op implementation used as fallback when no HttpContext is available
|
||||
- **`PlayIdSingletonService`** - Singleton wrapper that allows singleton services to access scoped PlayIdService via
|
||||
HttpContext
|
||||
- **`PlayDataService`** - Implementation that records PlayData entries for entities created during Play sessions
|
||||
Reference in New Issue
Block a user