feat(access): map

This commit is contained in:
arcnmx 2024-09-21 22:45:24 -07:00
parent 1a4ab08adc
commit 22f5a3d420
9 changed files with 210 additions and 24 deletions

View file

@ -1,15 +1,20 @@
{
config,
gensokyo-zone,
access,
lib,
pkgs,
...
}: let
inherit (lib.modules) mkMerge mkDefault;
inherit (lib.modules) mkIf mkMerge mkDefault;
inherit (gensokyo-zone.lib) domain;
inherit (config.services) nginx;
minecraftSystem = access.systemForService "minecraft";
inherit (minecraftSystem.exports.services) minecraft;
minecraftBackups = "${config.kyuuto.dataDir}/minecraft/simplebackups";
minecraftDownloads = "${config.kyuuto.shareDir}/projects/minecraft/public";
upstreamNameDynmap = "minecraft'dynmap";
upstreamNameBluemap = "minecraft'bluemap";
root = pkgs.linkFarm "genso-minecraft-backups" [
{
name = "minecraft/downloads";
@ -20,7 +25,15 @@
path = minecraftBackups;
}
{
name = "minecraft/wiki/dummy";
name = "minecraft/wiki/empty";
path = "nope";
}
{
name = "minecraft/dmap/empty";
path = "nope";
}
{
name = "minecraft/bmap/empty";
path = "nope";
}
];
@ -33,20 +46,65 @@
auth_basic_user_file ${config.sops.secrets.access-web-htpasswd.path};
'';
in {
services.nginx.virtualHosts.gensokyoZone = {
locations = {
"/minecraft" = {
inherit root extraConfig;
services.nginx = {
upstreams' = {
${upstreamNameDynmap} = mkIf minecraft.ports.dynmap.enable {
servers.service.accessService = {
name = "minecraft";
system = minecraftSystem.name;
port = "dynmap";
};
};
"/minecraft/wiki" = {
return = "302 https://wiki.${domain}/minecraft/";
${upstreamNameBluemap} = mkIf minecraft.ports.bluemap.enable {
servers.service.accessService = {
name = "minecraft";
system = minecraftSystem.name;
port = "bluemap";
};
};
"/minecraft/backups" = {
inherit root;
extraConfig = mkMerge [
extraConfig
authPrivate
];
};
virtualHosts.gensokyoZone = {
locations = {
"/minecraft" = {
inherit root extraConfig;
};
"/minecraft/wiki" = {
return = "302 https://wiki.${domain}/minecraft/";
};
"/minecraft/map" = {xvars, ...}: let
defaultMap = if minecraft.ports.bluemap.enable then "bmap" else "dmap";
in {
return = "302 ${xvars.get.scheme}://${xvars.get.host}/minecraft/${defaultMap}/";
};
"/minecraft/dmap/" = mkIf minecraft.ports.dynmap.enable {
proxy = {
enable = true;
upstream = mkDefault upstreamNameDynmap;
path = "/";
};
extraConfig = mkMerge [
"gzip off;"
authPrivate
];
};
"/minecraft/bmap/" = mkIf minecraft.ports.bluemap.enable {
proxy = {
enable = true;
upstream = mkDefault upstreamNameBluemap;
path = "/";
};
extraConfig = mkMerge [
"gzip off;"
authPrivate
];
};
"/minecraft/backups" = {
inherit root;
extraConfig = mkMerge [
extraConfig
authPrivate
];
};
};
};
};