aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2017-03-29 11:07:16 -0700
committerChristine Dodrill <me@christine.website>2017-03-29 11:07:16 -0700
commite781284a27863144a0384dbe22ec93123c9beb47 (patch)
treeb55918e21061da56d750ad4dcad8cb0109d0081e
parent33c4ad40f4f8b48c1efbb510956de173b192a5d7 (diff)
downloadx-e781284a27863144a0384dbe22ec93123c9beb47.tar.xz
x-e781284a27863144a0384dbe22ec93123c9beb47.zip
amerge: fixes
-rw-r--r--irc/amerge/database.go25
-rw-r--r--irc/amerge/main.go71
2 files changed, 88 insertions, 8 deletions
diff --git a/irc/amerge/database.go b/irc/amerge/database.go
index f97cf4d..7bd4250 100644
--- a/irc/amerge/database.go
+++ b/irc/amerge/database.go
@@ -37,6 +37,7 @@ type Database struct {
HostRequests []HostRequest
ClonesExemptions []ClonesExemption
+ Rwatches []Line
lines []*Line
file *bufio.Scanner
@@ -81,10 +82,12 @@ func NewDatabase(fname string) (db *Database, err error) {
case "MU": // Create a user account
a := &Account{
- Name: l.Args[1],
- UID: l.Args[0],
- Email: l.Args[3],
- Password: l.Args[2],
+ Name: l.Args[1],
+ UID: l.Args[0],
+ Email: l.Args[3],
+ Password: l.Args[2],
+ Regtime: l.Args[4],
+ LastSeenTime: l.Args[5],
Metadata: make(map[string]string),
}
@@ -391,7 +394,7 @@ func NewDatabase(fname string) (db *Database, err error) {
db.HostRequests = append(db.HostRequests, hr)
// Verbs to ignore
- case "GRVER", "XL", "FIM", "FAQ", "RW", "RR", "BE", "CF", "GDBV", "GFA", "CFDBV", "CFCHAN", "CFOP", "BOT-COUNT", "CLONES-DBV", "CLONES-CK", "CLONES-CD", "CLONES-GR":
+ case "":
default:
fmt.Printf("%#v\n", l)
@@ -428,6 +431,15 @@ func (db *Database) GetGroup(name string) (*Group, error) {
return group, nil
}
+func (db *Database) GetBot(name string) (*Bot, error) {
+ group, ok := db.Bots[strings.ToUpper(name)]
+ if !ok {
+ return nil, NoSuchGroupErr
+ }
+
+ return group, nil
+}
+
type Line struct {
Verb string
Args []string
@@ -441,6 +453,9 @@ type Account struct {
UID string
Password string
+ Regtime string
+ LastSeenTime string
+
Metadata map[string]string
Nicks []GroupedNick
Memos []Memo
diff --git a/irc/amerge/main.go b/irc/amerge/main.go
index 7fc9ede..c26e751 100644
--- a/irc/amerge/main.go
+++ b/irc/amerge/main.go
@@ -1,16 +1,81 @@
package main
-import "flag"
+import (
+ "flag"
+ "log"
+ "strings"
+)
var (
- fname = flag.String("file", "./services.db", "database to read from")
+ leftFname = flag.String("left-db", "./left.db", "database to read from to compare as the left hand")
+ rightFname = flag.String("right-db", "./right.db", "\" for the right hand side")
)
func main() {
flag.Parse()
- _, err := NewDatabase(*fname)
+ leftDB, err := NewDatabase(*leftFname)
+ if err != nil {
+ panic(err)
+ }
+
+ _ = leftDB
+
+ rightDB, err := NewDatabase(*rightFname)
if err != nil {
panic(err)
}
+
+ _ = rightDB
+
+ result := &Database{
+ Accounts: make(map[string]*Account),
+ Channels: make(map[string]*Channel),
+ Bots: make(map[string]*Bot),
+ Groups: make(map[string]*Group),
+ Names: make(map[string]*Name),
+ }
+
+ _ = result
+
+ // Compare accounts and grouped nicks in left database to names in right database
+ // this is O(scary)
+
+ for leftAccountName, acc := range leftDB.Accounts {
+ for _, leftGroupedNick := range acc.Nicks {
+ conflictAcc, err := rightDB.GetAccount(leftGroupedNick.Name)
+ if err != nil {
+ goto botcheck
+ }
+
+ if conflictAcc.Email == acc.Email {
+ //log.Printf("Can ignore %s, they are the same user by email account", acc.Name)
+ goto botcheck
+ }
+ log.Printf(
+ "While trying to see if %s:%s is present in right database, found a conflict with %s",
+ acc.Name, leftGroupedNick.Name, conflictAcc.Name,
+ )
+ log.Printf(
+ "left: %s %s %s %s",
+ acc.Name, acc.Email, acc.Regtime, acc.LastSeenTime,
+ )
+ log.Printf(
+ "right: %s %s %s %s",
+ conflictAcc.Name, conflictAcc.Email, conflictAcc.Regtime, conflictAcc.LastSeenTime,
+ )
+
+ botcheck:
+ //log.Printf("Checking for bot collisions for %s:%s...", acc.Name, leftGroupedNick.Name)
+ conflictBot, err := rightDB.GetBot(leftGroupedNick.Name)
+ if err != nil {
+ goto next
+ }
+
+ if strings.ToUpper(conflictBot.Nick) == leftAccountName {
+ log.Printf("Nickname %s conflicts with right's bot %s", leftGroupedNick.Name, conflictBot.Nick)
+ }
+ next:
+ }
+ }
}