Changeset 146 in code for trunk/downstream.go


Ignore:
Timestamp:
Mar 25, 2020, 10:54:08 AM (5 years ago)
Author:
contact
Message:

Add support for channel keys

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r145 r146  
    833833                        uc.SendMessage(msg)
    834834                })
    835         case "JOIN", "PART":
    836                 var names string
    837                 if err := parseMessageParams(msg, &names); err != nil {
    838                         return err
    839                 }
    840 
    841                 for _, name := range strings.Split(names, ",") {
     835        case "JOIN":
     836                var namesStr string
     837                if err := parseMessageParams(msg, &namesStr); err != nil {
     838                        return err
     839                }
     840
     841                var keys []string
     842                if len(msg.Params) > 1 {
     843                        keys = strings.Split(msg.Params[1], ",")
     844                }
     845
     846                for i, name := range strings.Split(namesStr, ",") {
    842847                        uc, upstreamName, err := dc.unmarshalEntity(name)
    843848                        if err != nil {
     
    848853                        }
    849854
     855                        var key string
     856                        if len(keys) > i {
     857                                key = keys[i]
     858                        }
     859
     860                        params := []string{upstreamName}
     861                        if key != "" {
     862                                params = append(params, key)
     863                        }
    850864                        uc.SendMessage(&irc.Message{
    851                                 Command: msg.Command,
    852                                 Params:  []string{upstreamName},
    853                         })
    854 
    855                         switch msg.Command {
    856                         case "JOIN":
    857                                 err := dc.srv.db.StoreChannel(uc.network.ID, &Channel{
    858                                         Name: upstreamName,
    859                                 })
    860                                 if err != nil {
    861                                         dc.logger.Printf("failed to create channel %q in DB: %v", upstreamName, err)
    862                                 }
    863                         case "PART":
    864                                 if err := dc.srv.db.DeleteChannel(uc.network.ID, upstreamName); err != nil {
    865                                         dc.logger.Printf("failed to delete channel %q in DB: %v", upstreamName, err)
    866                                 }
     865                                Command: "JOIN",
     866                                Params:  params,
     867                        })
     868
     869                        err = dc.srv.db.StoreChannel(uc.network.ID, &Channel{
     870                                Name: upstreamName,
     871                                Key:  key,
     872                        })
     873                        if err != nil {
     874                                dc.logger.Printf("failed to create channel %q in DB: %v", upstreamName, err)
     875                        }
     876                }
     877        case "PART":
     878                var namesStr string
     879                if err := parseMessageParams(msg, &namesStr); err != nil {
     880                        return err
     881                }
     882
     883                var reason string
     884                if len(msg.Params) > 1 {
     885                        reason = msg.Params[1]
     886                }
     887
     888                for _, name := range strings.Split(namesStr, ",") {
     889                        uc, upstreamName, err := dc.unmarshalEntity(name)
     890                        if err != nil {
     891                                return ircError{&irc.Message{
     892                                        Command: irc.ERR_NOSUCHCHANNEL,
     893                                        Params:  []string{name, err.Error()},
     894                                }}
     895                        }
     896
     897                        params := []string{upstreamName}
     898                        if reason != "" {
     899                                params = append(params, reason)
     900                        }
     901                        uc.SendMessage(&irc.Message{
     902                                Command: "PART",
     903                                Params:  params,
     904                        })
     905
     906                        if err := dc.srv.db.DeleteChannel(uc.network.ID, upstreamName); err != nil {
     907                                dc.logger.Printf("failed to delete channel %q in DB: %v", upstreamName, err)
    867908                        }
    868909                }
Note: See TracChangeset for help on using the changeset viewer.