17 Commits

Author SHA1 Message Date
idk
b46f04344d Check i2p running status before attempting to start the router 2020-04-03 20:42:45 -04:00
idk
dbb85e950b Check i2p running status before attempting to start the router 2020-04-03 20:41:15 -04:00
idk
e6e48920d8 Check i2p running status before attempting to start the router 2020-04-03 20:40:14 -04:00
idk
acc8d4e0f5 Fix that module 2020-04-03 19:43:24 -04:00
idk
750ce7e6d8 Add i2prouter start function 2020-04-03 17:33:08 -04:00
idk
643d7991fd Add i2prouter start function 2020-04-03 17:30:48 -04:00
idk
44d5506a8f Add find i2p function 2020-04-03 17:18:07 -04:00
idk
4d5f344b88 Add find i2p function 2020-04-03 17:07:24 -04:00
idk
759a5aec9c Add find i2p function 2020-04-03 17:07:05 -04:00
idk
a3982e2904 Add find i2p function 2020-04-03 17:05:54 -04:00
idk
5dea25453c fix release 2020-01-21 21:40:49 -05:00
idk
775052865c fix releas 2020-01-21 21:39:16 -05:00
idk
c67d91fa2c do a new release 2020-01-21 21:36:28 -05:00
idk
37c918804a do a new release 2020-01-21 21:36:06 -05:00
idk
f528ab6e38 add checkfirewallport 2020-01-21 21:33:10 -05:00
idk
138f1b4882 use user.Current to determine user when not root 2019-10-27 13:34:19 -04:00
idk
2595c6833a windows fixes 2019-10-26 23:13:06 -04:00
6 changed files with 144 additions and 21 deletions

View File

@ -2,20 +2,20 @@
GO111MODULE=on
VERSION=0.0.01
VERSION=0.0.11
USER_GH=eyedeekay
version:
gothub release -s $(GITHUB_TOKEN) -u $(USER_GH) -r checki2cp -t v$(VERSION) -d "I2P Router Checking CLI utility"
fmt:
gofmt -w *.go canal/main.go
delete:
gothub delete -s $(GITHUB_TOKEN) -u $(USER_GH) -r checki2cp -t v$(VERSION)
GO_COMPILER_OPTS = -a -tags netgo -ldflags '-w -extldflags "-static"'
build: fmt test clean
cd ./i2cpcheck && go build $(GO_COMPILER_OPTS) && \
GOOS=windows GOARCH=amd64 go build $(GO_COMPILER_OPTS) -buildmode=exe -o i2cpcheck.exe
cd ./i2cpcheck && go build $(GO_COMPILER_OPTS)
cd ./i2cpcheck && GOOS=windows GOARCH=amd64 go build $(GO_COMPILER_OPTS) -buildmode=exe -o i2cpcheck.exe
test:
go test -v

View File

@ -3,8 +3,12 @@ package checki2p
import (
"fmt"
"github.com/eyedeekay/go-i2cp"
"io/ioutil"
"log"
"os"
"os/exec"
"os/user"
"runtime"
"strings"
)
@ -25,15 +29,23 @@ func checkfileexists(path string) bool {
return false
}
func home() string {
if runtime.GOOS == "windows" {
return "\\i2p"
}
return "/.i2p"
}
var (
I2CP_HOST string = ""
I2CP_PORT string = ""
WINDOWS_DEFAULT_LOCATION string = `C:\\Program Files\i2p\i2psvc.exe`
I2PD_WINDOWS_DEFAULT_LOCATION string = `C:\\Program Files\I2Pd\i2pd.exe`
LINUX_SYSTEM_LOCATION string = "/usr/bin/i2prouter"
I2PD_LINUX_SYSTEM_LOCATION string = "/usr/sbin/i2pd"
HOME_DIRECTORY_LOCATION string = inithome("/i2p/i2prouter")
OSX_DEFAULT_LOCATION string = inithome("/Library/Application Support/i2p/clients.config")
I2CP_HOST string = ""
I2CP_PORT string = ""
WINDOWS_DEFAULT_LOCATION string = `C:\\Program Files\i2p\i2psvc.exe`
I2PD_WINDOWS_DEFAULT_LOCATION string = `C:\\Program Files\I2Pd\i2pd.exe`
LINUX_SYSTEM_LOCATION []string = []string{"/usr/bin/i2prouter", "/usr/sbin/i2prouter"}
I2PD_LINUX_SYSTEM_LOCATION string = "/usr/sbin/i2pd"
I2P_ASUSER_HOME_LOCATION string = inithome(home())
HOME_DIRECTORY_LOCATION string = inithome("/i2p/i2prouter")
OSX_DEFAULT_LOCATION string = inithome("/Library/Application Support/i2p/clients.config")
)
// CheckIC2PIsRunning is frequently the only thing I need a reliable, non-SAM
@ -70,7 +82,11 @@ func CheckI2PIsInstalledDefaultLocation() (bool, error) {
log.Println("Windows i2p router detected")
return true, nil
}
if checkfileexists(LINUX_SYSTEM_LOCATION) {
if checkfileexists(LINUX_SYSTEM_LOCATION[0]) {
log.Println("Linux i2p router detected")
return true, nil
}
if checkfileexists(LINUX_SYSTEM_LOCATION[1]) {
log.Println("Linux i2p router detected")
return true, nil
}
@ -90,9 +106,8 @@ func UserFind() string {
str := os.Getenv("SUDO_USER")
return str
}
if str, err := os.UserHomeDir(); err == nil {
x := strings.Split(str, "/")
return strings.Replace(x[len(x)-1], "/", "", -1)
if un, err := user.Current(); err == nil {
return un.Name
}
return ""
}
@ -103,7 +118,7 @@ func UserFind() string {
func CheckI2PUserName() (string, error) {
if checkfileexists(I2PD_WINDOWS_DEFAULT_LOCATION) {
log.Println("Windows i2pd router detected")
return "i2pd.exe", nil
return "i2pd", nil
}
if checkfileexists(I2PD_LINUX_SYSTEM_LOCATION) {
log.Println("Linux i2pd router detected")
@ -111,9 +126,13 @@ func CheckI2PUserName() (string, error) {
}
if checkfileexists(WINDOWS_DEFAULT_LOCATION) {
log.Println("Windows i2p router detected")
return "i2psvc.exe", nil
return "i2psvc", nil
}
if checkfileexists(LINUX_SYSTEM_LOCATION) {
if checkfileexists(LINUX_SYSTEM_LOCATION[0]) {
log.Println("Linux i2p router detected")
return "i2psvc", nil
}
if checkfileexists(LINUX_SYSTEM_LOCATION[1]) {
log.Println("Linux i2p router detected")
return "i2psvc", nil
}
@ -127,3 +146,83 @@ func CheckI2PUserName() (string, error) {
}
return "", nil
}
// GetFirewallPort finds the configured UDP port of your I2P router to help
// configure firewalls. It does this by finding the router.config and reading
// it.
func GetFirewallPort() (string, error) {
log.Println(I2P_ASUSER_HOME_LOCATION)
file, err := ioutil.ReadFile(I2P_ASUSER_HOME_LOCATION + "/router.config")
if err != nil {
return "", err
}
lines := strings.Split(string(file), "\n")
for index, line := range lines {
if strings.HasPrefix(line, "i2np.udp.port") {
log.Println(line, index)
return strings.Replace(line, "i2np.udp.port=", "", -1), nil
}
}
return "", fmt.Errorf("Improperly formed router.config file")
}
// FindI2PIsInstalledDefaultLocation looks in various locations for the
// presence of an I2P router, reporting back the location
func FindI2PIsInstalledDefaultLocation() (string, error) {
if checkfileexists(I2PD_WINDOWS_DEFAULT_LOCATION) {
log.Println("Windows i2pd router detected")
return I2PD_WINDOWS_DEFAULT_LOCATION, nil
}
if checkfileexists(I2PD_LINUX_SYSTEM_LOCATION) {
log.Println("Linux i2pd router detected")
return I2PD_LINUX_SYSTEM_LOCATION, nil
}
if checkfileexists(WINDOWS_DEFAULT_LOCATION) {
log.Println("Windows i2p router detected")
return WINDOWS_DEFAULT_LOCATION, nil
}
if checkfileexists(LINUX_SYSTEM_LOCATION[0]) {
log.Println("Linux i2p router detected")
return LINUX_SYSTEM_LOCATION[0], nil
}
if checkfileexists(LINUX_SYSTEM_LOCATION[1]) {
log.Println("Linux i2p router detected")
return LINUX_SYSTEM_LOCATION[1], nil
}
if checkfileexists(HOME_DIRECTORY_LOCATION) {
log.Println("Linux i2p router detected")
return HOME_DIRECTORY_LOCATION, nil
}
if checkfileexists(OSX_DEFAULT_LOCATION) {
log.Println("OSX i2p router detected")
return OSX_DEFAULT_LOCATION, nil
}
return "", fmt.Errorf("i2p router not found.")
}
func ConditionallyLaunchI2P() (bool, error) {
ok, err := CheckI2PIsInstalledDefaultLocation()
if err != nil {
return false, err
}
if ok {
if ok, err := CheckI2PIsRunning(); err == nil {
if !ok {
path, err := FindI2PIsInstalledDefaultLocation()
if err != nil {
return false, err
}
cmd := exec.Command(path, "start")
if err := cmd.Start(); err != nil {
return false, fmt.Errorf("I2P router startup failure", err)
}
return true, nil
}
return true, nil
}else{
return false, err
}
} else {
return false, fmt.Errorf("I2P is not a default location, please set $I2P environment variable")
}
}

View File

@ -27,3 +27,11 @@ func TestRouter(t *testing.T) {
t.Log("I2P is in a default location, user feedback is needed")
}
}
func TestFirewallPort(t *testing.T) {
port, err := GetFirewallPort()
if err != nil {
t.Fatal(err)
}
t.Log("Port was", port)
}

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module github.com/eyedeekay/checki2cp
go 1.13
require github.com/eyedeekay/go-i2cp v0.0.0-20190716135428-6d41bed718b0

Binary file not shown.

View File

@ -13,19 +13,30 @@ func main() {
}
if ok {
log.Println("I2P is running, successfully confirmed I2CP")
os.Exit(0)
} else {
log.Println("I2P is not running, further testing is needed")
}
firewallport, err := checki2p.GetFirewallPort()
if err != nil {
log.Fatal(err)
}
log.Println("I2P's firewall port is:", firewallport)
ok, err = checki2p.CheckI2PIsInstalledDefaultLocation()
if err != nil {
log.Fatal(err)
}
if ok {
log.Println("I2P is installed, successfully confirmed")
path, err := checki2p.FindI2PIsInstalledDefaultLocation()
if err != nil {
log.Fatal(err)
}
log.Println("I2P is installed at:", path)
os.Exit(0)
} else {
log.Println("I2P is not a default location, user feedback is needed")
os.Exit(1)
}
}