* tvl-slapd: move database to subdirectory (somehow now required) Change-Id: I1792b856cf68b11959c0cc9caab4135e556f8c58 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6090 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| # Configures an OpenLDAP instance for TVL
 | |
| #
 | |
| # TODO(tazjin): Configure ldaps://
 | |
| { depot, lib, pkgs, ... }:
 | |
| 
 | |
| with depot.nix.yants;
 | |
| 
 | |
| let
 | |
|   user = struct {
 | |
|     username = string;
 | |
|     email = string;
 | |
|     password = string;
 | |
|     displayName = option string;
 | |
|   };
 | |
| 
 | |
|   toLdif = defun [ user string ] (u: ''
 | |
|     dn: cn=${u.username},ou=users,dc=tvl,dc=fyi
 | |
|     objectClass: organizationalPerson
 | |
|     objectClass: inetOrgPerson
 | |
|     sn: ${u.username}
 | |
|     cn: ${u.username}
 | |
|     displayName: ${u.displayName or u.username}
 | |
|     mail: ${u.email}
 | |
|     userPassword: ${u.password}
 | |
|   '');
 | |
| 
 | |
|   inherit (depot.ops) users;
 | |
| 
 | |
| in
 | |
| {
 | |
|   services.openldap = {
 | |
|     enable = true;
 | |
| 
 | |
|     settings.children = {
 | |
|       "olcDatabase={1}mdb".attrs = {
 | |
|         objectClass = [ "olcDatabaseConfig" "olcMdbConfig" ];
 | |
|         olcDatabase = "{1}mdb";
 | |
|         olcDbDirectory = "/var/lib/openldap/db";
 | |
|         olcSuffix = "dc=tvl,dc=fyi";
 | |
|         olcAccess = "to *  by * read";
 | |
|         olcRootDN = "cn=admin,dc=tvl,dc=fyi";
 | |
|         olcRootPW = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$OfcgkOQ96VQ3aJj7NfA9vQ$oS6HQOkYl/bUYg4SejpltQYy7kvqx/RUxvoR4zo1vXU";
 | |
|       };
 | |
| 
 | |
|       "cn=module{0}".attrs = {
 | |
|         objectClass = "olcModuleList";
 | |
|         olcModuleLoad = "argon2";
 | |
|       };
 | |
| 
 | |
|       "cn=schema".includes =
 | |
|         map (schema: "${pkgs.openldap}/etc/schema/${schema}.ldif")
 | |
|           [ "core" "cosine" "inetorgperson" "nis" ];
 | |
|     };
 | |
| 
 | |
|     # Contents are immutable at runtime, and adding user accounts etc.
 | |
|     # is done statically in the LDIF-formatted contents in this folder.
 | |
|     declarativeContents."dc=tvl,dc=fyi" = ''
 | |
|       dn: dc=tvl,dc=fyi
 | |
|       dc: tvl
 | |
|       o: TVL LDAP server
 | |
|       description: Root entry for tvl.fyi
 | |
|       objectClass: top
 | |
|       objectClass: dcObject
 | |
|       objectClass: organization
 | |
| 
 | |
|       dn: ou=users,dc=tvl,dc=fyi
 | |
|       ou: users
 | |
|       description: All users in TVL
 | |
|       objectClass: top
 | |
|       objectClass: organizationalUnit
 | |
| 
 | |
|       dn: ou=groups,dc=tvl,dc=fyi
 | |
|       ou: groups
 | |
|       description: All groups in TVL
 | |
|       objectClass: top
 | |
|       objectClass: organizationalUnit
 | |
| 
 | |
|       ${lib.concatStringsSep "\n" (map toLdif users)}
 | |
|     '';
 | |
|   };
 | |
| }
 |