bitwarden/server · error · BadRequestException

Provider name not found.

Error message

Provider name not found.

What it means

Thrown by ProviderService.InitiateDeleteAsync when provider.Name is null or whitespace. The provider deletion email needs a name, so the flow refuses to start without one. BadRequestException (HTTP 400).

Source

Thrown at bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs:684

        }

        var providerOrganization = await _providerOrganizationRepository.GetByOrganizationId(organizationId);
        var organization = await _organizationRepository.GetByIdAsync(organizationId);
        if (providerOrganization != null)
        {
            await _eventService.LogProviderOrganizationEventAsync(providerOrganization, EventType.ProviderOrganization_VaultAccessed);
        }
        if (organization != null)
        {
            await _eventService.LogOrganizationEventAsync(organization, EventType.Organization_VaultAccessed);
        }
    }

    public async Task InitiateDeleteAsync(Provider provider, string providerAdminEmail)
    {
        if (string.IsNullOrWhiteSpace(provider.Name))
        {
            throw new BadRequestException("Provider name not found.");
        }
        var providerAdmin = await _userRepository.GetByEmailAsync(providerAdminEmail);
        if (providerAdmin == null)
        {
            throw new BadRequestException("Provider admin not found.");
        }

        var providerAdminOrgUser = await _providerUserRepository.GetByProviderUserAsync(provider.Id, providerAdmin.Id);
        if (providerAdminOrgUser == null || providerAdminOrgUser.Status != ProviderUserStatusType.Confirmed ||
            providerAdminOrgUser.Type != ProviderUserType.ProviderAdmin)
        {
            throw new BadRequestException("Org admin not found.");
        }

        var token = _providerDeleteTokenDataFactory.Protect(new ProviderDeleteTokenable(provider, 1));
        await _mailService.SendInitiateDeletProviderEmailAsync(providerAdminEmail, provider, token);
    }

View on GitHub (pinned to e93b962371)

Solutions

  1. Set provider.Name (via the provider update flow) before calling InitiateDeleteAsync.
  2. Guard the call: check !string.IsNullOrWhiteSpace(provider.Name) and surface a clear error.
  3. Investigate why Name is missing; correct the provider record in the data layer if it should have one.

Example fix

// before
await providerService.InitiateDeleteAsync(provider, adminEmail);

// after
if (string.IsNullOrWhiteSpace(provider.Name))
{
    throw new InvalidOperationException("Provider has no name; set it before deletion.");
}
await providerService.InitiateDeleteAsync(provider, adminEmail);
Defensive patterns

Strategy: validation

Validate before calling

if (string.IsNullOrWhiteSpace(provider.Name)) return BadRequest("Provider has no name.");

Type guard

static bool HasName(Provider p) => !string.IsNullOrWhiteSpace(p.Name);

Prevention

When it happens

Trigger: Initiating provider deletion for a Provider record whose Name was never set (or was cleared), e.g. a provider created partway through setup, or a legacy/seeded provider with a null Name.

Common situations: A provider stuck in a partial-creation state where the name step was skipped; seeded test providers missing Name; data corruption/null Name after a migration.

Related errors


AI-assisted analysis of bitwarden/server@e93b962371 (2026-08-13). Data as JSON: /api/errors/aef3546e0eff15f7. Report an issue: GitHub.