Changeset 146 in code


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

Add support for channel keys

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/db.go

    r118 r146  
    3636        ID   int64
    3737        Name string
     38        Key  string
    3839}
    3940
     
    194195        defer db.lock.RUnlock()
    195196
    196         rows, err := db.db.Query("SELECT id, name FROM Channel WHERE network = ?", networkID)
     197        rows, err := db.db.Query("SELECT id, name, key FROM Channel WHERE network = ?", networkID)
    197198        if err != nil {
    198199                return nil, err
     
    203204        for rows.Next() {
    204205                var ch Channel
    205                 if err := rows.Scan(&ch.ID, &ch.Name); err != nil {
     206                var key *string
     207                if err := rows.Scan(&ch.ID, &ch.Name, &key); err != nil {
    206208                        return nil, err
    207209                }
     210                ch.Key = fromStringPtr(key)
    208211                channels = append(channels, ch)
    209212        }
     
    219222        defer db.lock.Unlock()
    220223
    221         _, err := db.db.Exec("INSERT OR REPLACE INTO Channel(network, name) VALUES (?, ?)", networkID, ch.Name)
     224        key := toStringPtr(ch.Key)
     225        _, err := db.db.Exec(`INSERT OR REPLACE INTO Channel(network, name, key)
     226                VALUES (?, ?, ?)`, networkID, ch.Name, key)
    222227        return err
    223228}
  • 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                }
  • trunk/upstream.go

    r143 r146  
    318318
    319319                for _, ch := range channels {
     320                        params := []string{ch.Name}
     321                        if ch.Key != "" {
     322                                params = append(params, ch.Key)
     323                        }
    320324                        uc.SendMessage(&irc.Message{
    321325                                Command: "JOIN",
    322                                 Params:  []string{ch.Name},
     326                                Params:  params,
    323327                        })
    324328                }
Note: See TracChangeset for help on using the changeset viewer.