generated from Luis/nextjs-python-web-template
Initial commit
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{ ... }: {
|
||||
imports = [
|
||||
./clan-cli/flake-module.nix
|
||||
./installer/flake-module.nix
|
||||
|
||||
./ui/flake-module.nix
|
||||
./theme/flake-module.nix
|
||||
];
|
||||
@@ -9,7 +9,7 @@
|
||||
perSystem = { pkgs, config, ... }: {
|
||||
packages = {
|
||||
tea-create-pr = pkgs.callPackage ./tea-create-pr { };
|
||||
zerotier-members = pkgs.callPackage ./zerotier-members { };
|
||||
|
||||
merge-after-ci = pkgs.callPackage ./merge-after-ci {
|
||||
inherit (config.packages) tea-create-pr;
|
||||
};
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
{ lib
|
||||
, buildGoModule
|
||||
, fetchFromGitHub
|
||||
,
|
||||
}:
|
||||
buildGoModule rec {
|
||||
pname = "go-ssb";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ssbc";
|
||||
repo = "go-ssb";
|
||||
#rev = "v${version}";
|
||||
rev = "d6db27d1852d5edff9c7e07d2a3419fe6b11a8db";
|
||||
hash = "sha256-SewaIDNVrODWGxdvJjIg4oTdfGy8THNMlgv48KX8okE=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-ZytuWFre7Cz6Qt01tLQoPEuNzDIyoC938OkdIrU8nZo=";
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
# take very long
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Go implementation of ssb (work in progress)";
|
||||
homepage = "https://github.com/ssbc/go-ssb";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{ self, lib, ... }:
|
||||
let
|
||||
installer = lib.nixosSystem {
|
||||
pkgs = self.inputs.nixpkgs.legacyPackages.x86_64-linux;
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
self.nixosModules.installer
|
||||
self.nixosModules.hidden-ssh-announce
|
||||
self.inputs.nixos-generators.nixosModules.all-formats
|
||||
self.inputs.disko.nixosModules.disko
|
||||
({ config, ... }: { system.stateVersion = config.system.nixos.version; })
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
flake.packages.x86_64-linux.install-iso = self.inputs.disko.lib.makeDiskImages { nixosConfig = installer; };
|
||||
flake.apps.x86_64-linux.install-vm.program = installer.config.formats.vm.outPath;
|
||||
flake.apps.x86_64-linux.install-vm-nogui.program = installer.config.formats.vm-nogui.outPath;
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{ stdenv, python3, lib }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "zerotier-members";
|
||||
src = ./.;
|
||||
buildInputs = [ python3 ];
|
||||
installPhase = ''
|
||||
install -Dm755 ${./zerotier-members.py} $out/bin/zerotier-members
|
||||
'';
|
||||
meta = with lib; {
|
||||
description = "A tool to list/allow members of a ZeroTier network";
|
||||
license = licenses.mit;
|
||||
};
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
import argparse
|
||||
import http.client
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ZEROTIER_STATE_DIR = Path("/var/lib/zerotier-one")
|
||||
|
||||
|
||||
class ClanError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
# this is managed by the nixos module
|
||||
def get_network_id() -> str:
|
||||
p = Path("/etc/zerotier/network-id")
|
||||
if not p.exists():
|
||||
raise ClanError(
|
||||
f"{p} file not found. Have you enabled the zerotier controller on this host?"
|
||||
)
|
||||
return p.read_text().strip()
|
||||
|
||||
|
||||
def allow_member(args: argparse.Namespace) -> None:
|
||||
member_id = args.member_id
|
||||
network_id = get_network_id()
|
||||
token = ZEROTIER_STATE_DIR.joinpath("authtoken.secret").read_text()
|
||||
conn = http.client.HTTPConnection("localhost", 9993)
|
||||
conn.request(
|
||||
"POST",
|
||||
f"/controller/network/{network_id}/member/{member_id}",
|
||||
'{"authorized": true}',
|
||||
{"X-ZT1-AUTH": token},
|
||||
)
|
||||
resp = conn.getresponse()
|
||||
if resp.status != 200:
|
||||
raise ClanError(
|
||||
f"the zerotier daemon returned this error: {resp.status} {resp.reason}"
|
||||
)
|
||||
print(resp.status, resp.reason)
|
||||
|
||||
|
||||
def list_members(args: argparse.Namespace) -> None:
|
||||
network_id = get_network_id()
|
||||
networks = ZEROTIER_STATE_DIR / "controller.d" / "network" / network_id / "member"
|
||||
if not networks.exists():
|
||||
return
|
||||
for member in networks.iterdir():
|
||||
with member.open() as f:
|
||||
data = json.load(f)
|
||||
try:
|
||||
member_id = data["id"]
|
||||
except KeyError:
|
||||
raise ClanError(f"error: {member} does not contain an id")
|
||||
print(member_id)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
subparser = parser.add_subparsers(dest="command")
|
||||
parser_allow = subparser.add_parser("allow", help="Allow a member to join")
|
||||
parser_allow.add_argument("member_id")
|
||||
parser_allow.set_defaults(func=allow_member)
|
||||
|
||||
parser_list = subparser.add_parser("list", help="List members")
|
||||
parser_list.set_defaults(func=list_members)
|
||||
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
args.func(args)
|
||||
except ClanError as e:
|
||||
print(e)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user