|
@@ -43,6 +43,7 @@ type TopologyDatabaseIO interface {
|
|
|
Migrate() error
|
|
|
Create(host Host) (*Host, error)
|
|
|
All() ([]Host, error)
|
|
|
+ GetByNetwork(network string) ([]Host, error)
|
|
|
GetByIP(ip string) (*Host, error)
|
|
|
Update(id int64, updated Host) (*Host, error)
|
|
|
Delete(id int64) error
|
|
@@ -74,7 +75,8 @@ func (r *SQLiteRepo) Migrate() error {
|
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
fqdn TEXT NOT NULL,
|
|
|
ipv4_address TEXT NOT NULL UNIQUE,
|
|
|
- listening_port TEXT NOT NULL
|
|
|
+ listening_port TEXT NOT NULL,
|
|
|
+ network TEXT NOT NULL
|
|
|
);
|
|
|
`
|
|
|
|
|
@@ -88,7 +90,7 @@ Create an entry in the hosts table
|
|
|
:param host: a Host entry from a port scan
|
|
|
*/
|
|
|
func (r *SQLiteRepo) Create(host Host) (*Host, error) {
|
|
|
- res, err := r.db.Exec("INSERT INTO hosts(fqdn, ipv4_address, listening_port) values(?,?,?)", host.Fqdn, host.IpAddress, host.PortString)
|
|
|
+ res, err := r.db.Exec("INSERT INTO hosts(fqdn, ipv4_address, listening_port, network) values(?,?,?,?)", host.Fqdn, host.IpAddress, host.PortString, host.Network)
|
|
|
if err != nil {
|
|
|
var sqliteErr sqlite3.Error
|
|
|
if errors.As(err, &sqliteErr) {
|
|
@@ -119,7 +121,7 @@ func (r *SQLiteRepo) All() ([]Host, error) {
|
|
|
var all []Host
|
|
|
for rows.Next() {
|
|
|
var host Host
|
|
|
- if err := rows.Scan(&host.Id, &host.Fqdn, &host.IpAddress, &host.PortString); err != nil {
|
|
|
+ if err := rows.Scan(&host.Id, &host.Fqdn, &host.IpAddress, &host.PortString, &host.Network); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
all = append(all, host)
|
|
@@ -132,7 +134,7 @@ func (r *SQLiteRepo) GetByIP(ip string) (*Host, error) {
|
|
|
row := r.db.QueryRow("SELECT * FROM hosts WHERE ipv4_address = ?", ip)
|
|
|
|
|
|
var host Host
|
|
|
- if err := row.Scan(&host.Id, &host.Fqdn, &host.IpAddress, &host.PortString); err != nil {
|
|
|
+ if err := row.Scan(&host.Id, &host.Fqdn, &host.IpAddress, &host.PortString, &host.Network); err != nil {
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
return nil, ErrNotExists
|
|
|
}
|
|
@@ -146,7 +148,7 @@ func (r *SQLiteRepo) Update(id int64, updated Host) (*Host, error) {
|
|
|
if id == 0 {
|
|
|
return nil, errors.New("invalid updated ID")
|
|
|
}
|
|
|
- res, err := r.db.Exec("UPDATE hosts SET fqdn = ?, ipv4_address = ?, listening_port = ? WHERE id = ?", updated.Fqdn, updated.IpAddress, updated.PortString, id)
|
|
|
+ res, err := r.db.Exec("UPDATE hosts SET fqdn = ?, ipv4_address = ?, listening_port = ?, network = ? WHERE id = ?", updated.Fqdn, updated.IpAddress, updated.PortString, updated.Network, id)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -181,3 +183,21 @@ func (r *SQLiteRepo) Delete(id int64) error {
|
|
|
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
+func (r *SQLiteRepo) GetByNetwork(network string) ([]Host, error) {
|
|
|
+ rows, err := r.db.Query("SELECT * FROM hosts WHERE network = ?", network)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ var hosts []Host
|
|
|
+ defer rows.Close()
|
|
|
+
|
|
|
+ for rows.Next() {
|
|
|
+ var host Host
|
|
|
+ if err := rows.Scan(&host.Id, &host.Fqdn, &host.IpAddress, &host.PortString, &host.Network); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ hosts = append(hosts, host)
|
|
|
+ }
|
|
|
+ return hosts, nil
|
|
|
+}
|