{"record":{"id":"aef3546e0eff15f7","repo":"bitwarden/server","slug":"provider-name-not-found","errorCode":null,"errorMessage":"Provider name not found.","messagePattern":"Provider name not found\\.","errorType":"exception","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs","lineNumber":684,"sourceCode":"        }\n\n        var providerOrganization = await _providerOrganizationRepository.GetByOrganizationId(organizationId);\n        var organization = await _organizationRepository.GetByIdAsync(organizationId);\n        if (providerOrganization != null)\n        {\n            await _eventService.LogProviderOrganizationEventAsync(providerOrganization, EventType.ProviderOrganization_VaultAccessed);\n        }\n        if (organization != null)\n        {\n            await _eventService.LogOrganizationEventAsync(organization, EventType.Organization_VaultAccessed);\n        }\n    }\n\n    public async Task InitiateDeleteAsync(Provider provider, string providerAdminEmail)\n    {\n        if (string.IsNullOrWhiteSpace(provider.Name))\n        {\n            throw new BadRequestException(\"Provider name not found.\");\n        }\n        var providerAdmin = await _userRepository.GetByEmailAsync(providerAdminEmail);\n        if (providerAdmin == null)\n        {\n            throw new BadRequestException(\"Provider admin not found.\");\n        }\n\n        var providerAdminOrgUser = await _providerUserRepository.GetByProviderUserAsync(provider.Id, providerAdmin.Id);\n        if (providerAdminOrgUser == null || providerAdminOrgUser.Status != ProviderUserStatusType.Confirmed ||\n            providerAdminOrgUser.Type != ProviderUserType.ProviderAdmin)\n        {\n            throw new BadRequestException(\"Org admin not found.\");\n        }\n\n        var token = _providerDeleteTokenDataFactory.Protect(new ProviderDeleteTokenable(provider, 1));\n        await _mailService.SendInitiateDeletProviderEmailAsync(providerAdminEmail, provider, token);\n    }\n","sourceCodeStart":666,"sourceCodeEnd":702,"githubUrl":"https://github.com/bitwarden/server/blob/e93b962371d80964556f5590c6615f5160a437a1/bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs#L666-L702","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","solutions":["Set provider.Name (via the provider update flow) before calling InitiateDeleteAsync.","Guard the call: check !string.IsNullOrWhiteSpace(provider.Name) and surface a clear error.","Investigate why Name is missing; correct the provider record in the data layer if it should have one."],"exampleFix":"// before\nawait providerService.InitiateDeleteAsync(provider, adminEmail);\n\n// after\nif (string.IsNullOrWhiteSpace(provider.Name))\n{\n    throw new InvalidOperationException(\"Provider has no name; set it before deletion.\");\n}\nawait providerService.InitiateDeleteAsync(provider, adminEmail);","handlingStrategy":"validation","validationCode":"if (string.IsNullOrWhiteSpace(provider.Name)) return BadRequest(\"Provider has no name.\");","typeGuard":"static bool HasName(Provider p) => !string.IsNullOrWhiteSpace(p.Name);","tryCatchPattern":null,"preventionTips":["Require a Name when creating a provider.","Audit provider records for null/blank names before delete flows."],"tags":["provider","data-integrity","deletion","bad-request"],"backgroundTag":null,"analyzedSha":"e93b962371d80964556f5590c6615f5160a437a1","analyzedAt":"2026-08-13T14:22:19.382Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}