b35e358eb5
Previously the depot argument was provided as config.depot, but the "new way" of doing things (which is more like the args list provided in the rest of the depot) is to provide this as the "depot" NixOS module argument instead. Change-Id: Ib48b1c7c1bdff9c1eb0618c6cbacc22b651f5f98 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2763 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: glittershark <grfn@gws.fyi>
89 lines
2.3 KiB
Nix
89 lines
2.3 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 {
|
|
# Use our patched OpenLDAP derivation which enables stronger password hashing.
|
|
#
|
|
# Unfortunately the module for OpenLDAP has no package option, so we
|
|
# need to override it system-wide. Be aware that this triggers a
|
|
# *large* number of rebuilds of packages such as GPG and Python.
|
|
nixpkgs.overlays = [
|
|
(_: _: {
|
|
inherit (depot.third_party) openldap;
|
|
})
|
|
];
|
|
|
|
services.openldap = {
|
|
enable = true;
|
|
dataDir = "/var/lib/openldap";
|
|
database = "mdb";
|
|
suffix = "dc=tvl,dc=fyi";
|
|
rootdn = "cn=admin,dc=tvl,dc=fyi";
|
|
rootpw = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$OfcgkOQ96VQ3aJj7NfA9vQ$oS6HQOkYl/bUYg4SejpltQYy7kvqx/RUxvoR4zo1vXU";
|
|
|
|
settings.children = {
|
|
"olcDatabase={1}mdb".attrs = {
|
|
objectClass = [ "olcDatabaseConfig" "olcMdbConfig" ];
|
|
olcDatabase = "{1}mdb";
|
|
olcSuffix = "dc=tvl,dc=fyi";
|
|
olcAccess = "to * by * read";
|
|
};
|
|
|
|
"cn=module{0}".attrs = {
|
|
objectClass = "olcModuleList";
|
|
olcModuleLoad = "pw-argon2";
|
|
};
|
|
};
|
|
|
|
# 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)}
|
|
'';
|
|
};
|
|
}
|