diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index e69de29..0000000 diff --git a/README.md.asc b/README.md.asc deleted file mode 100644 index ebbf5ba..0000000 --- a/README.md.asc +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA256 - -# go-i2pcontrol -An easy-to-use library for the i2pcontrol rpc interface. - -Don't use it yet, it's not even a little done. ------BEGIN PGP SIGNATURE----- - -iQEzBAEBCAAdFiEEcNIGBzi++AUjrK/311wDs5teFOEFAluZu+wACgkQ11wDs5te -FOHXYwgAsENgOMEXFpc/3hVPlm4A45f6OLrnapj2gcJGlTeYLnmCUqlc+vaKCUVd -K8yseQz4emd5g0ItnAasMtTVnSxAaN9F1Ngva+XzelxLKGoaItkFbA3+CPUrYQ3j -5Agq53VU5M2xwboO6gGi4NUHEUdhil8sQ5q6i/bGdeULzU2Fjh0C6xWBfieyGA42 -ZscCMY9dATGYiU2eAB1cIUdss3Z8vy8WfP472ZfCCAgHo+VOH6hUDQ7nLy2yc1h0 -qlaNUqpEhsfPnyOAR9pkdyTNLBCScs6tdpb4F0zxZ9SJPDVNjoPg4TYjHW1OMOE1 -Usx1Osd0F5by7CG2sTRhh7QV4gnv8w== -=XdAP ------END PGP SIGNATURE----- diff --git a/auth.go b/auth.go index e69de29..d57cfbb 100644 --- a/auth.go +++ b/auth.go @@ -0,0 +1,76 @@ +package i2pcontrol + +import ( + "crypto/tls" + "crypto/x509" + "github.com/ybbus/jsonrpc" + "io/ioutil" + "net/http" +) + +var ( + rpcClient jsonrpc.RPCClient + RPCOpts *jsonrpc.RPCClientOpts + token string +) + +// +func Initialize(host, port, path string) { + RPCOpts = &jsonrpc.RPCClientOpts{ + HTTPClient: &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }, + }, + } + rpcClient = jsonrpc.NewClientWithOpts("http://"+host+":"+port+"/"+path+"/", RPCOpts) +} + +func InitializeWithSelfSignedCert(host, port, path, cert string) error { + caCert, err := ioutil.ReadFile(cert) + if err != nil { + return err + } + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(caCert) + RPCOpts = &jsonrpc.RPCClientOpts{ + HTTPClient: &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + }, + }, + }, + } + rpcClient = jsonrpc.NewClientWithOpts("http://"+host+":"+port+"/"+path+"/", RPCOpts) + return nil +} + +func Call(method string, params interface{}) (map[string]interface{}, error) { + response, err := rpcClient.Call(method, params) + if err != nil { + return nil, err + } + if response.Error != nil { + return nil, response.Error + } + //var retv string + var retpre map[string]interface{} + err = response.GetObject(&retpre) + return retpre, nil +} + +func Authenticate(password string) (int, error) { + retpre, err := Call("Authenticate", map[string]interface{}{ + "API": 1, + "Password": "itoopie", + }) + if err != nil { + return -1, err + } + token = retpre["Token"].(string) + version := int(retpre["API"].(float64)) + return version, nil +} diff --git a/auth_test.go b/auth_test.go index e69de29..e6dcc2a 100644 --- a/auth_test.go +++ b/auth_test.go @@ -0,0 +1,31 @@ +package i2pcontrol + +import ( + //"log" + "testing" +) + +func TestAuth(t *testing.T) { + Initialize("localhost", "7657", "jsonrpc") + result, err := Authenticate("itoopie") + if err != nil { + t.Fatal(err) + } + t.Log("Connected to API version 1:", result) + t.Log("Token for this testing session:", token) + echo, err := Echo("Hello I2PControl") + if err != nil { + t.Fatal(err) + } + t.Log(echo, "Is there an echo in here?") + update, err := FindUpdates() + if err != nil { + t.Fatal(err) + } + if update { + t.Log("Your I2P router needs an update") + } else { + t.Log("Your I2P router doesn't need an update") + } + +} diff --git a/client.go b/client.go deleted file mode 100644 index e69de29..0000000 diff --git a/client_test.go b/client_test.go deleted file mode 100644 index e69de29..0000000 diff --git a/cmd/main.go b/cmd/main.go deleted file mode 100644 index e69de29..0000000 diff --git a/manager.go b/manager.go new file mode 100644 index 0000000..2933e56 --- /dev/null +++ b/manager.go @@ -0,0 +1,80 @@ +package i2pcontrol + +func Echo(echo string) (string, error) { + retpre, err := Call("Echo", map[string]interface{}{ + "Echo": echo, + "Token": token, + }) + if err != nil { + return "", err + } + result := retpre["Result"].(string) + return result, nil +} + +func RestartGraceful() (string, error) { + _, err := Call("RouterManager", map[string]interface{}{ + "RestartGraceful": nil, + "Token": token, + }) + if err != nil { + return "", err + } + return "Graceful Restart Initiated", nil +} + +func Restart() (string, error) { + _, err := Call("RouterManager", map[string]interface{}{ + "Restart": nil, + "Token": token, + }) + if err != nil { + return "", err + } + return "Restart Initiated", nil +} + +func ShutdownGraceful() (string, error) { + _, err := Call("RouterManager", map[string]interface{}{ + "ShutdownGraceful": nil, + "Token": token, + }) + if err != nil { + return "", err + } + return "Graceful Shutdown Initiated", nil +} + +func Shutdown() (string, error) { + _, err := Call("RouterManager", map[string]interface{}{ + "Shutdown": nil, + "Token": token, + }) + if err != nil { + return "", err + } + return "Shutdown Initiated", nil +} + +func FindUpdates() (bool, error) { + retpre, err := Call("RouterManager", map[string]interface{}{ + "FindUpdates": nil, + "Token": token, + }) + if err != nil { + return false, err + } + result := retpre["FindUpdates"].(bool) + return result, nil +} + +func Update() (string, error) { + _, err := Call("RouterManager", map[string]interface{}{ + "Update": nil, + "Token": token, + }) + if err != nil { + return "", err + } + return "Update initiated", nil +} diff --git a/manager_test.go b/manager_test.go new file mode 100644 index 0000000..d12ac13 --- /dev/null +++ b/manager_test.go @@ -0,0 +1 @@ +package i2pcontrol