From da70b10fbd056f19d892acad542ce96c40c58389 Mon Sep 17 00:00:00 2001 From: James O'Doherty Date: Fri, 29 May 2026 23:35:21 -0400 Subject: refactor: rename module to git.theodohertyfamily.com/wg-wrap and apply public domain license - Update go.mod and all internal imports to reflect the new module path - Add LICENSE file with the Unlicense (public domain dedication) - Increase timeouts in e2e lifecycle tests to prevent flaky failures - Verify all tests, linting, and formatting pass with the new module name --- LICENSE | 24 ++++++++++++++++++++++++ README.md | 8 ++------ cmd/wg-wrap/main.go | 2 +- go.mod | 2 +- internal/cli/cli.go | 10 +++++----- internal/namespace/lifecycle.go | 2 +- internal/namespace/lifecycle_test.go | 2 +- internal/namespace/lock_linux.go | 2 +- internal/namespace/lock_stub.go | 2 +- internal/namespace/namespace_stub.go | 2 +- internal/namespace/pinning.go | 2 +- internal/namespace/pinning_test.go | 2 +- internal/wireguard/wireguard.go | 2 +- internal/wireguard/wireguard_stub.go | 2 +- tests/e2e/lifecycle_test.go | 4 ++-- tests/e2e/vulnerability_test.go | 2 +- 16 files changed, 45 insertions(+), 25 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..efb9808 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md index 679c49e..c648168 100644 --- a/README.md +++ b/README.md @@ -114,12 +114,8 @@ To support multiple concurrent commands on the same WireGuard tunnel without re- | **Isolation** | Global | Per-process/Namespace | | **Routing** | Host Routing Table | Isolated Namespace Table | -## Implementation Roadmap -1. **Bootstrap Logic**: Implement the `unshare` and re-execution flow via an embedded C launcher. (DONE) -2. **TUN/WG Integration**: Integrate the `tun` device with the `wireguard-go` device. -3. **Routing Automation**: Automate the `ip` command sequence for interface and route setup. -4. **Config & Profile Management**: Implement a robust parser for WireGuard configuration files and a full profile management system (import, list, edit, delete) targeting `~/.config/wg-wrap/profiles/`. -5. **Lifecycle Management**: Ensure the TUN and WireGuard devices are cleaned up upon process termination. +## License +This project is free and unencumbered software released into the public domain. See the [LICENSE](LICENSE) file for details. ## Technical Gotchas & Implementation Details diff --git a/cmd/wg-wrap/main.go b/cmd/wg-wrap/main.go index 7e2de9f..b313dec 100644 --- a/cmd/wg-wrap/main.go +++ b/cmd/wg-wrap/main.go @@ -6,7 +6,7 @@ import ( "os" "os/exec" - "git.theodohertyfamily.com/tools/wg-wrap/internal/cli" + "git.theodohertyfamily.com/wg-wrap/internal/cli" ) func main() { diff --git a/go.mod b/go.mod index cc438ba..76e5820 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module git.theodohertyfamily.com/tools/wg-wrap +module git.theodohertyfamily.com/wg-wrap go 1.26.3 diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 0a2ec96..4d028a2 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -8,11 +8,11 @@ import ( "path/filepath" "strings" - "git.theodohertyfamily.com/tools/wg-wrap/internal/config" - "git.theodohertyfamily.com/tools/wg-wrap/internal/namespace" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" - "git.theodohertyfamily.com/tools/wg-wrap/internal/wireguard" - "git.theodohertyfamily.com/tools/wg-wrap/pkg/wgconf" + "git.theodohertyfamily.com/wg-wrap/internal/config" + "git.theodohertyfamily.com/wg-wrap/internal/namespace" + "git.theodohertyfamily.com/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/wireguard" + "git.theodohertyfamily.com/wg-wrap/pkg/wgconf" ) type App struct { diff --git a/internal/namespace/lifecycle.go b/internal/namespace/lifecycle.go index 9a3b567..3bd1753 100644 --- a/internal/namespace/lifecycle.go +++ b/internal/namespace/lifecycle.go @@ -9,7 +9,7 @@ import ( "syscall" "time" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" ) // GetProfileNamespacePath returns the path to the pinned namespace file for a profile. diff --git a/internal/namespace/lifecycle_test.go b/internal/namespace/lifecycle_test.go index 230e93a..1fb0a13 100644 --- a/internal/namespace/lifecycle_test.go +++ b/internal/namespace/lifecycle_test.go @@ -6,7 +6,7 @@ import ( "strconv" "testing" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" ) func TestLifecycleReferenceCounting(t *testing.T) { diff --git a/internal/namespace/lock_linux.go b/internal/namespace/lock_linux.go index 8da98f6..3197d95 100644 --- a/internal/namespace/lock_linux.go +++ b/internal/namespace/lock_linux.go @@ -7,7 +7,7 @@ import ( "os" "path/filepath" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" "golang.org/x/sys/unix" ) diff --git a/internal/namespace/lock_stub.go b/internal/namespace/lock_stub.go index 2282852..881c64c 100644 --- a/internal/namespace/lock_stub.go +++ b/internal/namespace/lock_stub.go @@ -5,7 +5,7 @@ package namespace import ( "os" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" ) // AcquireProfileLock is a stub for non-Linux platforms. diff --git a/internal/namespace/namespace_stub.go b/internal/namespace/namespace_stub.go index db0ec24..e9d55df 100644 --- a/internal/namespace/namespace_stub.go +++ b/internal/namespace/namespace_stub.go @@ -4,7 +4,7 @@ package namespace import ( "fmt" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" ) // PinNamespace touches the namespace path to indicate it is pinned/active. diff --git a/internal/namespace/pinning.go b/internal/namespace/pinning.go index e257187..07f15f8 100644 --- a/internal/namespace/pinning.go +++ b/internal/namespace/pinning.go @@ -8,7 +8,7 @@ import ( "path/filepath" "strconv" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" "golang.org/x/sys/unix" ) diff --git a/internal/namespace/pinning_test.go b/internal/namespace/pinning_test.go index 18aba00..1bb40da 100644 --- a/internal/namespace/pinning_test.go +++ b/internal/namespace/pinning_test.go @@ -7,7 +7,7 @@ import ( "path/filepath" "testing" - "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" + "git.theodohertyfamily.com/wg-wrap/internal/paths" ) func TestUnpinNamespace(t *testing.T) { diff --git a/internal/wireguard/wireguard.go b/internal/wireguard/wireguard.go index e250dab..8ac7e63 100644 --- a/internal/wireguard/wireguard.go +++ b/internal/wireguard/wireguard.go @@ -12,7 +12,7 @@ import ( "strconv" "strings" - "git.theodohertyfamily.com/tools/wg-wrap/pkg/wgconf" + "git.theodohertyfamily.com/wg-wrap/pkg/wgconf" "github.com/vishvananda/netlink" "golang.org/x/sys/unix" "golang.zx2c4.com/wireguard/conn" diff --git a/internal/wireguard/wireguard_stub.go b/internal/wireguard/wireguard_stub.go index 47d7b41..88660bd 100644 --- a/internal/wireguard/wireguard_stub.go +++ b/internal/wireguard/wireguard_stub.go @@ -4,7 +4,7 @@ package wireguard import ( "fmt" - "git.theodohertyfamily.com/tools/wg-wrap/pkg/wgconf" + "git.theodohertyfamily.com/wg-wrap/pkg/wgconf" ) type Tunnel struct{} diff --git a/tests/e2e/lifecycle_test.go b/tests/e2e/lifecycle_test.go index b6c001b..6cff0c8 100644 --- a/tests/e2e/lifecycle_test.go +++ b/tests/e2e/lifecycle_test.go @@ -10,7 +10,7 @@ import ( ) func waitForPids(t *testing.T, pidsDir string, expectedCount int) { - timeout := time.After(5 * time.Second) + timeout := time.After(10 * time.Second) tick := time.NewTicker(100 * time.Millisecond) defer tick.Stop() @@ -38,7 +38,7 @@ func waitForPids(t *testing.T, pidsDir string, expectedCount int) { } func waitForLifecycle(t *testing.T, binaryPath, runtimeDir, profile string, expectedActive bool) { - timeout := time.After(5 * time.Second) + timeout := time.After(10 * time.Second) tick := time.NewTicker(100 * time.Millisecond) defer tick.Stop() diff --git a/tests/e2e/vulnerability_test.go b/tests/e2e/vulnerability_test.go index a8c2dfb..8de38a3 100644 --- a/tests/e2e/vulnerability_test.go +++ b/tests/e2e/vulnerability_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "git.theodohertyfamily.com/tools/wg-wrap/internal/cli" + "git.theodohertyfamily.com/wg-wrap/internal/cli" ) // TestEditorArgumentSplitting verifies that the editor is correctly split into command and arguments. -- cgit v1.2.3