Refactor irc client (#19)

* refactor: update http handlers

* feat: add trace log level

* refactir: irc handler

* refactor(definitions): add irc settings and invite cmd:

* feat: add dft values to inputs

* refactor: indexer irc forms

* refactor(definitions): fix nickserv.password var:

* feat: pre fill indexer name field

* refactor: handle stopping and updates
This commit is contained in:
Ludvig Lundgren 2021-08-29 23:23:02 +02:00 committed by GitHub
parent 5f69ae9380
commit 4d40d41628
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
48 changed files with 1380 additions and 943 deletions

View file

@ -26,12 +26,15 @@ func (r *IndexerRepo) Store(indexer domain.Indexer) (*domain.Indexer, error) {
return nil, err
}
_, err = r.db.Exec(`INSERT INTO indexer (enabled, name, identifier, settings) VALUES (?, ?, ?, ?)`, indexer.Enabled, indexer.Name, indexer.Identifier, settings)
res, err := r.db.Exec(`INSERT INTO indexer (enabled, name, identifier, settings) VALUES (?, ?, ?, ?)`, indexer.Enabled, indexer.Name, indexer.Identifier, settings)
if err != nil {
log.Error().Stack().Err(err).Msg("error executing query")
return nil, err
}
id, _ := res.LastInsertId()
indexer.ID = id
return &indexer, nil
}

View file

@ -3,7 +3,6 @@ package database
import (
"context"
"database/sql"
"strings"
"github.com/autobrr/autobrr/internal/domain"
@ -24,7 +23,7 @@ func (ir *IrcRepo) Store(announce domain.Announce) error {
func (ir *IrcRepo) GetNetworkByID(id int64) (*domain.IrcNetwork, error) {
row := ir.db.QueryRow("SELECT id, enabled, name, addr, tls, nick, pass, connect_commands, sasl_mechanism, sasl_plain_username, sasl_plain_password FROM irc_network WHERE id = ?", id)
row := ir.db.QueryRow("SELECT id, enabled, name, server, port, tls, pass, invite_command, nickserv_account, nickserv_password FROM irc_network WHERE id = ?", id)
if err := row.Err(); err != nil {
log.Fatal().Err(err)
return nil, err
@ -32,22 +31,19 @@ func (ir *IrcRepo) GetNetworkByID(id int64) (*domain.IrcNetwork, error) {
var n domain.IrcNetwork
var pass, connectCommands sql.NullString
var saslMechanism, saslPlainUsername, saslPlainPassword sql.NullString
var pass, inviteCmd sql.NullString
var nsAccount, nsPassword sql.NullString
var tls sql.NullBool
if err := row.Scan(&n.ID, &n.Enabled, &n.Name, &n.Addr, &tls, &n.Nick, &pass, &connectCommands, &saslMechanism, &saslPlainUsername, &saslPlainPassword); err != nil {
if err := row.Scan(&n.ID, &n.Enabled, &n.Name, &n.Server, &n.Port, &tls, &pass, &inviteCmd, &nsAccount, &nsPassword); err != nil {
log.Fatal().Err(err)
}
n.TLS = tls.Bool
n.Pass = pass.String
if connectCommands.Valid {
n.ConnectCommands = strings.Split(connectCommands.String, "\r\n")
}
n.SASL.Mechanism = saslMechanism.String
n.SASL.Plain.Username = saslPlainUsername.String
n.SASL.Plain.Password = saslPlainPassword.String
n.InviteCommand = inviteCmd.String
n.NickServ.Account = nsAccount.String
n.NickServ.Password = nsPassword.String
return &n, nil
}
@ -84,7 +80,7 @@ func (ir *IrcRepo) DeleteNetwork(ctx context.Context, id int64) error {
func (ir *IrcRepo) ListNetworks(ctx context.Context) ([]domain.IrcNetwork, error) {
rows, err := ir.db.QueryContext(ctx, "SELECT id, enabled, name, addr, tls, nick, pass, connect_commands FROM irc_network")
rows, err := ir.db.QueryContext(ctx, "SELECT id, enabled, name, server, port, tls, pass, invite_command, nickserv_account, nickserv_password FROM irc_network")
if err != nil {
log.Fatal().Err(err)
}
@ -95,20 +91,16 @@ func (ir *IrcRepo) ListNetworks(ctx context.Context) ([]domain.IrcNetwork, error
for rows.Next() {
var net domain.IrcNetwork
//var username, realname, pass, connectCommands sql.NullString
var pass, connectCommands sql.NullString
var pass, inviteCmd sql.NullString
var tls sql.NullBool
if err := rows.Scan(&net.ID, &net.Enabled, &net.Name, &net.Addr, &tls, &net.Nick, &pass, &connectCommands); err != nil {
if err := rows.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &inviteCmd, &net.NickServ.Account, &net.NickServ.Password); err != nil {
log.Fatal().Err(err)
}
net.TLS = tls.Bool
net.Pass = pass.String
if connectCommands.Valid {
net.ConnectCommands = strings.Split(connectCommands.String, "\r\n")
}
net.InviteCommand = inviteCmd.String
networks = append(networks, net)
}
@ -131,7 +123,6 @@ func (ir *IrcRepo) ListChannels(networkID int64) ([]domain.IrcChannel, error) {
for rows.Next() {
var ch domain.IrcChannel
//if err := rows.Scan(&ch.ID, &ch.Name, &ch.Enabled, &ch.Pass, &ch.InviteCommand, &ch.InviteHTTPURL, &ch.InviteHTTPHeader, &ch.InviteHTTPData); err != nil {
if err := rows.Scan(&ch.ID, &ch.Name, &ch.Enabled); err != nil {
log.Fatal().Err(err)
}
@ -149,20 +140,10 @@ func (ir *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
netName := toNullString(network.Name)
pass := toNullString(network.Pass)
connectCommands := toNullString(strings.Join(network.ConnectCommands, "\r\n"))
inviteCmd := toNullString(network.InviteCommand)
var saslMechanism, saslPlainUsername, saslPlainPassword sql.NullString
if network.SASL.Mechanism != "" {
saslMechanism = toNullString(network.SASL.Mechanism)
switch network.SASL.Mechanism {
case "PLAIN":
saslPlainUsername = toNullString(network.SASL.Plain.Username)
saslPlainPassword = toNullString(network.SASL.Plain.Password)
default:
log.Warn().Msgf("unsupported SASL mechanism: %q", network.SASL.Mechanism)
//return fmt.Errorf("cannot store network: unsupported SASL mechanism %q", network.SASL.Mechanism)
}
}
nsAccount := toNullString(network.NickServ.Account)
nsPassword := toNullString(network.NickServ.Password)
var err error
if network.ID != 0 {
@ -170,26 +151,24 @@ func (ir *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
_, err = ir.db.Exec(`UPDATE irc_network
SET enabled = ?,
name = ?,
addr = ?,
server = ?,
port = ?,
tls = ?,
nick = ?,
pass = ?,
connect_commands = ?,
sasl_mechanism = ?,
sasl_plain_username = ?,
sasl_plain_password = ?,
invite_command = ?,
nickserv_account = ?,
nickserv_password = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?`,
network.Enabled,
netName,
network.Addr,
network.Server,
network.Port,
network.TLS,
network.Nick,
pass,
connectCommands,
saslMechanism,
saslPlainUsername,
saslPlainPassword,
inviteCmd,
nsAccount,
nsPassword,
network.ID,
)
} else {
@ -198,25 +177,23 @@ func (ir *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
res, err = ir.db.Exec(`INSERT INTO irc_network (
enabled,
name,
addr,
server,
port,
tls,
nick,
pass,
connect_commands,
sasl_mechanism,
sasl_plain_username,
sasl_plain_password
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
invite_command,
nickserv_account,
nickserv_password
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
network.Enabled,
netName,
network.Addr,
network.Server,
network.Port,
network.TLS,
network.Nick,
pass,
connectCommands,
saslMechanism,
saslPlainUsername,
saslPlainPassword,
inviteCmd,
nsAccount,
nsPassword,
)
if err != nil {
log.Error().Stack().Err(err).Msg("error executing query")

View file

@ -24,7 +24,8 @@ CREATE TABLE indexer
name TEXT NOT NULL,
settings TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE (identifier)
);
CREATE TABLE irc_network
@ -32,29 +33,30 @@ CREATE TABLE irc_network
id INTEGER PRIMARY KEY,
enabled BOOLEAN,
name TEXT NOT NULL,
addr TEXT NOT NULL,
nick TEXT NOT NULL,
server TEXT NOT NULL,
port INTEGER NOT NULL,
tls BOOLEAN,
pass TEXT,
connect_commands TEXT,
sasl_mechanism TEXT,
sasl_plain_username TEXT,
sasl_plain_password TEXT,
invite_command TEXT,
nickserv_account TEXT,
nickserv_password TEXT,
connected BOOLEAN,
connected_since TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
unique (addr, nick)
UNIQUE (server, port, nickserv_account)
);
CREATE TABLE irc_channel
(
id INTEGER PRIMARY KEY,
enabled BOOLEAN,
name TEXT NOT NULL,
password TEXT,
detached BOOLEAN,
id INTEGER PRIMARY KEY,
enabled BOOLEAN,
name TEXT NOT NULL,
password TEXT,
detached BOOLEAN,
network_id INTEGER NOT NULL,
FOREIGN KEY (network_id) REFERENCES irc_network(id),
unique (network_id, name)
UNIQUE (network_id, name)
);
CREATE TABLE filter