feat(pool): support descriptive password alias
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
1d6176153c
commit
3535e4b006
3 changed files with 69 additions and 7 deletions
14
config.go
14
config.go
|
|
@ -41,6 +41,7 @@ type PoolConfig struct {
|
|||
URL string `json:"url"`
|
||||
User string `json:"user"`
|
||||
Pass string `json:"pass"`
|
||||
Password string `json:"password"`
|
||||
RigID string `json:"rig-id"`
|
||||
Algo string `json:"algo"`
|
||||
TLS bool `json:"tls"`
|
||||
|
|
@ -83,10 +84,11 @@ type RateLimit struct {
|
|||
type WorkersMode string
|
||||
|
||||
const (
|
||||
WorkersByRigID WorkersMode = "rig-id" // rigid field, fallback to user
|
||||
WorkersByUser WorkersMode = "user"
|
||||
WorkersByPass WorkersMode = "password"
|
||||
WorkersByAgent WorkersMode = "agent"
|
||||
WorkersByIP WorkersMode = "ip"
|
||||
WorkersDisabled WorkersMode = "false"
|
||||
WorkersByRigID WorkersMode = "rig-id" // rigid field, fallback to user
|
||||
WorkersByUser WorkersMode = "user"
|
||||
WorkersByPass WorkersMode = "password"
|
||||
WorkersByPassword WorkersMode = "password"
|
||||
WorkersByAgent WorkersMode = "agent"
|
||||
WorkersByIP WorkersMode = "ip"
|
||||
WorkersDisabled WorkersMode = "false"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -139,9 +139,14 @@ func (c *StratumClient) Connect() error {
|
|||
//
|
||||
// client.Login()
|
||||
func (c *StratumClient) Login() {
|
||||
password := c.config.Password
|
||||
if password == "" {
|
||||
password = c.config.Pass
|
||||
}
|
||||
|
||||
params := map[string]interface{}{
|
||||
"login": c.config.User,
|
||||
"pass": c.config.Pass,
|
||||
"pass": password,
|
||||
"rigid": c.config.RigID,
|
||||
}
|
||||
if c.config.Algo != "" {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package pool
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net"
|
||||
"sync"
|
||||
"testing"
|
||||
|
|
@ -171,3 +172,57 @@ func TestStratumClient_HandleMessage_Ugly(t *testing.T) {
|
|||
t.Fatalf("expected login rejection to disconnect once, got %d", disconnects)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStratumClient_Login_Good(t *testing.T) {
|
||||
serverConn, clientConn := net.Pipe()
|
||||
defer clientConn.Close()
|
||||
|
||||
client := &StratumClient{
|
||||
config: proxy.PoolConfig{
|
||||
User: "WALLET",
|
||||
Pass: "legacy",
|
||||
Password: "preferred",
|
||||
RigID: "rig-alpha",
|
||||
Algo: "cn/r",
|
||||
},
|
||||
conn: serverConn,
|
||||
}
|
||||
|
||||
writeDone := make(chan struct{})
|
||||
go func() {
|
||||
client.Login()
|
||||
close(writeDone)
|
||||
}()
|
||||
|
||||
buffer := make([]byte, 2048)
|
||||
n, err := clientConn.Read(buffer)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var request jsonRPCRequest
|
||||
if err := json.Unmarshal(buffer[:n], &request); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
params, ok := request.Params.(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("expected login params map, got %T", request.Params)
|
||||
}
|
||||
if got := params["pass"]; got != "preferred" {
|
||||
t.Fatalf("expected preferred password, got %v", got)
|
||||
}
|
||||
if got := params["rigid"]; got != "rig-alpha" {
|
||||
t.Fatalf("expected rigid field to be forwarded, got %v", got)
|
||||
}
|
||||
if got := params["algo"]; got == nil {
|
||||
t.Fatal("expected algo extension to be forwarded")
|
||||
}
|
||||
|
||||
client.Disconnect()
|
||||
select {
|
||||
case <-writeDone:
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("expected login write to complete")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue