diff options
| author | Christine Dodrill <me@christine.website> | 2017-03-29 11:07:16 -0700 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2017-03-29 11:07:16 -0700 |
| commit | e781284a27863144a0384dbe22ec93123c9beb47 (patch) | |
| tree | b55918e21061da56d750ad4dcad8cb0109d0081e | |
| parent | 33c4ad40f4f8b48c1efbb510956de173b192a5d7 (diff) | |
| download | x-e781284a27863144a0384dbe22ec93123c9beb47.tar.xz x-e781284a27863144a0384dbe22ec93123c9beb47.zip | |
amerge: fixes
| -rw-r--r-- | irc/amerge/database.go | 25 | ||||
| -rw-r--r-- | irc/amerge/main.go | 71 |
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: + } + } } |
