feat: bake a deploy-time server pin into the client via presetServer
This commit is contained in:
parent
db83ec1289
commit
4075afbb11
5 changed files with 93 additions and 6 deletions
|
|
@ -13,9 +13,56 @@ in
|
|||
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = self.packages.${pkgs.system}.default;
|
||||
defaultText = lib.literalExpression "gsmol.packages.\${system}.default";
|
||||
description = "The gsmol-bridge package to run.";
|
||||
default =
|
||||
if cfg.presetServer == null
|
||||
then self.packages.${pkgs.system}.default
|
||||
else self.packages.${pkgs.system}.default.override {
|
||||
serverHost = cfg.presetServer.host;
|
||||
serverPublicKey = cfg.presetServer.publicKey;
|
||||
};
|
||||
defaultText = lib.literalExpression
|
||||
"gsmol.packages.\${system}.default, built with presetServer baked in when set";
|
||||
description = ''
|
||||
The gsmol-bridge package to run. Overriding this yourself bypasses
|
||||
`presetServer` — bake it in via the same `.override` if you need both.
|
||||
'';
|
||||
};
|
||||
|
||||
presetServer = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.submodule {
|
||||
options = {
|
||||
host = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "example.org";
|
||||
description = "Hostname of the smolmaild server to pre-pin.";
|
||||
};
|
||||
publicKey = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "mfrggzdfmztwq2lknnwg23tpobxxk4tznb2xg5btmvwgy3zmn5xg4===";
|
||||
description = ''
|
||||
Its static key, base32-encoded exactly as gsmol's own settings
|
||||
dialog and `smolmaild --keygen` display it.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
default = null;
|
||||
description = ''
|
||||
Bake a server key into the pages this deployment serves, so a
|
||||
first-time visitor is pre-pinned rather than asked to copy a base32
|
||||
key into settings by hand (SPEC.md §4).
|
||||
|
||||
This only makes sense when whoever runs this deployment and whoever
|
||||
runs that smolmaild are the same trusted party: the value reaches the
|
||||
browser over this deployment's own TLS, which stands in for the "get
|
||||
it from the operator through a trusted channel" step. Do not set this
|
||||
for a key you do not operate or otherwise vouch for — it pins it for
|
||||
every visitor, unasked.
|
||||
|
||||
It only seeds the first run: the browser stores it as an ordinary
|
||||
pin from then on, which the user can still replace or remove in
|
||||
settings like any other.
|
||||
'';
|
||||
};
|
||||
|
||||
host = lib.mkOption {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue