SplatDev.Directory
1.0.2
dotnet add package SplatDev.Directory --version 1.0.2
NuGet\Install-Package SplatDev.Directory -Version 1.0.2
<PackageReference Include="SplatDev.Directory" Version="1.0.2" />
<PackageVersion Include="SplatDev.Directory" Version="1.0.2" />
<PackageReference Include="SplatDev.Directory" />
paket add SplatDev.Directory --version 1.0.2
#r "nuget: SplatDev.Directory, 1.0.2"
#:package SplatDev.Directory@1.0.2
#addin nuget:?package=SplatDev.Directory&version=1.0.2
#tool nuget:?package=SplatDev.Directory&version=1.0.2
SplatDev.Directory
Directory service abstraction for Umbraco plugins. Defines one contract —
IDirectoryProvider — that Active Directory, a generic LDAP server and Entra ID all
answer, so a plugin can look people up without knowing which of them a site runs.
Compatibility
| Umbraco | Target |
|---|---|
| 13 | net8.0 |
| 17 | net10.0 |
Installation
Install this package and at least one provider:
dotnet add package SplatDev.Directory
dotnet add package SplatDev.Directory.Ldap # Active Directory or generic LDAP
dotnet add package SplatDev.Directory.EntraId # Entra ID via Microsoft Graph
builder.Services.AddSplatDirectory(builder.Configuration);
builder.Services.AddSplatLdapDirectory();
builder.Services.AddSplatEntraDirectory();
Both providers can be registered at once. Each reports itself unconfigured until a site
supplies its settings, and IDirectoryProviderResolver picks whichever is usable.
Configuration
{
"Directory": {
"Enabled": true,
"DefaultProvider": "Active Directory",
"AllowUserCreation": false,
"CreateUsersInOrganizationalUnit": "OU=Staff,DC=example,DC=com",
"Ldap": {
"Host": "dc01.example.com",
"Port": 636,
"UseSsl": true,
"BaseDn": "DC=example,DC=com",
"BindDn": "CN=umbraco-reader,OU=Service,DC=example,DC=com",
"Domain": "EXAMPLE",
"UseActiveDirectorySchema": true
},
"Entra": {
"TenantId": "...",
"ClientId": "...",
"UserPrincipalNameDomain": "example.onmicrosoft.com"
}
}
}
Secrets do not belong in appsettings.json. Ldap:BindPassword and
Entra:ClientSecret should come from environment variables, user secrets or a key
vault.
Creating accounts
Reading a directory and writing to one are separate concerns, and this treats them that way:
- Reading needs a bind account with no special rights (
User.Read.Allon Entra). - Creating needs
AllowUserCreation, a container named inCreateUsersInOrganizationalUnit, and write rights (User.ReadWrite.Allon Entra).
Creation is off unless a site turns it on, and is confined to that one container — a
request naming anywhere else is refused rather than redirected. Ask
IDirectoryProvider.CanCreateUsers before offering a create control; it tells you
whether the operation will be permitted before anyone tries it.
No password is ever handled here. Accounts are created requiring one to be set by an administrator, because a password typed into a CMS form travels through the browser and the request log on its way to the directory.
Changelog
1.0.2 — 2026-08-24
Removes a dashboard screenshot that showed an error toast. It was captured against a site where this plugin's API was unreachable, so it advertised a broken dashboard. No screenshot is better than a misleading one; a replacement will be taken against a working install.
1.0.1 — 2026-08-24
Package metadata only: the listing now carries an icon and search tags, and the project and repository links point at the organisation that actually hosts this code. No code changes.
1.0.0 — 2026-08-22
- First release.
IDirectoryProviderwith search, single lookup, account creation and a connection test, plusIDirectoryProviderResolverfor sites that register more than one directory.
License
MIT © SplatDev
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.0)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Options (>= 8.0.2)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on SplatDev.Directory:
| Package | Downloads |
|---|---|
|
SplatDev.Umbraco.Plugins.RdpManager
Umbraco Remote Desktop connection manager plugin — store RDP configs and generate .rdp file downloads. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0) |
|
|
SplatDev.Directory.Ldap
Active Directory and generic LDAP provider for SplatDev.Directory. Searches people, reads an account and optionally creates one, using System.DirectoryServices.Protocols so it runs on Linux as well as Windows. |
|
|
SplatDev.Directory.EntraId
Entra ID provider for SplatDev.Directory, over Microsoft Graph. Searches people, reads an account and optionally creates one. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.2 | 47 | 8/24/2026 |