From 9a645b8307a81a7ad678e11739c8094859ff69d8 Mon Sep 17 00:00:00 2001 From: raylu Date: Tue, 26 Oct 2010 17:48:31 -0400 Subject: [PATCH] Split hasAccess into hasAccess and parseChannel --- auth.go | 33 +++++----------------------- handler.go | 63 +++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/auth.go b/auth.go index 918710d..b997cf1 100644 --- a/auth.go +++ b/auth.go @@ -98,43 +98,20 @@ func removeUser(conn *irc.Conn, channel, nick string) (string, bool) { return user, true } -// this allows target to be a channel or a privmsg in which the channel is the first argument -// passing a flag of "" will check if the user has any access -// returns the channel the user has access on and remaining args -// or a blank channel if the user doesn't have access on that channel -func hasAccess(conn *irc.Conn, nick *irc.Nick, target, args, flag string) (string, string) { - // figure out what the channel and args are - var channel string - if isChannel(target) { - channel = target - } else { - split := strings.Split(args, " ", 2) - if split[0] != "" && isChannel(split[0]) { - channel = split[0] - if len(split) == 2 { - args = split[1] - } else { - args = "" - } - } else { - return "", args - } - } - - // actually check access +func hasAccess(conn *irc.Conn, nick *irc.Nick, channel, flag string) bool { user := user(nick) if owner, _ := auth.String(conn.Network, "owner"); owner == user { - return channel, args + return true } flags, err := auth.String(conn.Network + " " + channel, user) if err != nil { - return "", args + return false } if flag == "" || strings.IndexAny(flags, flag) > -1 { - return channel, args + return true } - return "", args + return false } func updateAuth() os.Error { diff --git a/handler.go b/handler.go index 7d7edda..57f1fcb 100644 --- a/handler.go +++ b/handler.go @@ -163,6 +163,41 @@ func youtube(conn *irc.Conn, nick *irc.Nick, video, channel string) { } } +// this allows target to be a channel or a privmsg in which the channel is the first argument +// passing a flag of "" will check if the user has any access +// returns the channel the user has access on and remaining args +// or a blank channel if the user doesn't have access on that channel +func parseAccess(conn *irc.Conn, nick *irc.Nick, target, args, flag string) (string, string) { + channel, args := parseChannel(target, args) + if channel == "" { + return "", args + } + if hasAccess(conn, nick, channel, flag) { + return channel, args + } + return "", args +} + +func parseChannel(target, args string) (string, string) { + var channel string + if isChannel(target) { + channel = target + } else { + split := strings.Split(args, " ", 2) + if split[0] != "" && isChannel(split[0]) { + channel = split[0] + if len(split) == 2 { + args = split[1] + } else { + args = "" + } + } else { + return "", args + } + } + return channel, args +} + func translate(conn *irc.Conn, nick *irc.Nick, args, target string) { var langPairs vector.StringVector for { @@ -231,7 +266,7 @@ func sayTr(conn *irc.Conn, target string, data interface{}) { } func add(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "a") + channel, args := parseAccess(conn, nick, target, args, "a") if channel == "" { return } @@ -247,7 +282,7 @@ func add(conn *irc.Conn, nick *irc.Nick, args, target string) { } } func remove(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "a") + channel, args := parseAccess(conn, nick, target, args, "a") if channel == "" { return } @@ -273,7 +308,7 @@ func remove(conn *irc.Conn, nick *irc.Nick, args, target string) { } func flags(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "") + channel, args := parseAccess(conn, nick, target, args, "") if channel == "" { return } @@ -303,7 +338,7 @@ func flags(conn *irc.Conn, nick *irc.Nick, args, target string) { } func topic(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "t") + channel, args := parseAccess(conn, nick, target, args, "t") if channel == "" { return } @@ -317,7 +352,7 @@ func topic(conn *irc.Conn, nick *irc.Nick, args, target string) { } } func appendtopic(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "t") + channel, args := parseAccess(conn, nick, target, args, "t") if channel == "" { return } @@ -338,14 +373,14 @@ func appendtopic(conn *irc.Conn, nick *irc.Nick, args, target string) { } func csay(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "s") + channel, args := parseAccess(conn, nick, target, args, "s") if channel != "" { say(conn, channel, args) } } func op(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "o") + channel, args := parseAccess(conn, nick, target, args, "o") if channel == "" { return } @@ -361,7 +396,7 @@ func op(conn *irc.Conn, nick *irc.Nick, args, target string) { } func deop(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "o") + channel, args := parseAccess(conn, nick, target, args, "o") if channel == "" { return } @@ -377,7 +412,7 @@ func deop(conn *irc.Conn, nick *irc.Nick, args, target string) { } func halfop(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "oh") + channel, args := parseAccess(conn, nick, target, args, "oh") if channel == "" { return } @@ -386,8 +421,7 @@ func halfop(conn *irc.Conn, nick *irc.Nick, args, target string) { conn.Mode(channel, "+h " + nick.Nick) } else { // giving others +h requires o - channel, args = hasAccess(conn, nick, channel, args, "o") - if channel == "" { + if !hasAccess(conn, nick, channel, "o") { return } halfops := strings.TrimSpace(args) @@ -398,7 +432,7 @@ func halfop(conn *irc.Conn, nick *irc.Nick, args, target string) { } func dehalfop(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "oh") + channel, args := parseAccess(conn, nick, target, args, "oh") if channel == "" { return } @@ -406,8 +440,7 @@ func dehalfop(conn *irc.Conn, nick *irc.Nick, args, target string) { if args == "" { conn.Mode(channel, "-h " + nick.Nick) } else { - channel, args = hasAccess(conn, nick, channel, args, "o") - if channel == "" { + if !hasAccess(conn, nick, channel, "o") { return } halfops := strings.TrimSpace(args) @@ -418,7 +451,7 @@ func dehalfop(conn *irc.Conn, nick *irc.Nick, args, target string) { } func kick(conn *irc.Conn, nick *irc.Nick, args, target string) { - channel, args := hasAccess(conn, nick, target, args, "oh") + channel, args := parseAccess(conn, nick, target, args, "oh") if channel == "" || args == "" { return }