- Timestamp:
- Apr 16, 2020, 3:38:47 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/db.go
r255 r263 4 4 "database/sql" 5 5 "fmt" 6 "strings" 6 7 "sync" 7 8 … … 24 25 25 26 type Network struct { 26 ID int64 27 Name string 28 Addr string 29 Nick string 30 Username string 31 Realname string 32 Pass string 33 SASL SASL 27 ID int64 28 Name string 29 Addr string 30 Nick string 31 Username string 32 Realname string 33 Pass string 34 ConnectCommands []string 35 SASL SASL 34 36 } 35 37 … … 64 66 realname VARCHAR(255), 65 67 pass VARCHAR(255), 68 connect_commands VARCHAR(1023), 66 69 sasl_mechanism VARCHAR(255), 67 70 sasl_plain_username VARCHAR(255), … … 83 86 var migrations = []string{ 84 87 "", // migration #0 is reserved for schema initialization 88 "ALTER TABLE Network ADD COLUMN connect_commands VARCHAR(1023)", 85 89 } 86 90 … … 234 238 235 239 rows, err := db.db.Query(`SELECT id, name, addr, nick, username, realname, pass, 236 sasl_mechanism, sasl_plain_username, sasl_plain_password240 connect_commands, sasl_mechanism, sasl_plain_username, sasl_plain_password 237 241 FROM Network 238 242 WHERE user = ?`, … … 246 250 for rows.Next() { 247 251 var net Network 248 var name, username, realname, pass *string252 var name, username, realname, pass, connectCommands *string 249 253 var saslMechanism, saslPlainUsername, saslPlainPassword *string 250 254 err := rows.Scan(&net.ID, &name, &net.Addr, &net.Nick, &username, &realname, 251 &pass, & saslMechanism, &saslPlainUsername, &saslPlainPassword)255 &pass, &connectCommands, &saslMechanism, &saslPlainUsername, &saslPlainPassword) 252 256 if err != nil { 253 257 return nil, err … … 257 261 net.Realname = fromStringPtr(realname) 258 262 net.Pass = fromStringPtr(pass) 263 if connectCommands != nil { 264 net.ConnectCommands = strings.Split(*connectCommands, "\r\n") 265 } 259 266 net.SASL.Mechanism = fromStringPtr(saslMechanism) 260 267 net.SASL.Plain.Username = fromStringPtr(saslPlainUsername) … … 277 284 realname := toStringPtr(network.Realname) 278 285 pass := toStringPtr(network.Pass) 286 connectCommands := toStringPtr(strings.Join(network.ConnectCommands, "\r\n")) 279 287 280 288 var saslMechanism, saslPlainUsername, saslPlainPassword *string … … 293 301 if network.ID != 0 { 294 302 _, err = db.db.Exec(`UPDATE Network 295 SET name = ?, addr = ?, nick = ?, username = ?, realname = ?, pass = ?, 303 SET name = ?, addr = ?, nick = ?, username = ?, realname = ?, pass = ?, connect_commands = ?, 296 304 sasl_mechanism = ?, sasl_plain_username = ?, sasl_plain_password = ? 297 305 WHERE id = ?`, 298 netName, network.Addr, network.Nick, netUsername, realname, pass, 306 netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands, 299 307 saslMechanism, saslPlainUsername, saslPlainPassword, network.ID) 300 308 } else { 301 309 var res sql.Result 302 310 res, err = db.db.Exec(`INSERT INTO Network(user, name, addr, nick, username, 303 realname, pass, sasl_mechanism, sasl_plain_username,311 realname, pass, connect_commands, sasl_mechanism, sasl_plain_username, 304 312 sasl_plain_password) 305 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ? )`,306 username, netName, network.Addr, network.Nick, netUsername, realname, pass, 313 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, 314 username, netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands, 307 315 saslMechanism, saslPlainUsername, saslPlainPassword) 308 316 if err != nil { -
trunk/service.go
r252 r263 105 105 children: serviceCommandSet{ 106 106 "create": { 107 usage: "-addr <addr> [-name name] [-username username] [-pass pass] [-realname realname] [-nick nick] ",107 usage: "-addr <addr> [-name name] [-username username] [-pass pass] [-realname realname] [-nick nick] [[-connect-command command] ...]", 108 108 desc: "add a new network", 109 109 handle: handleServiceCreateNetwork, … … 175 175 } 176 176 177 type stringSliceVar []string 178 179 func (v *stringSliceVar) String() string { 180 return fmt.Sprint([]string(*v)) 181 } 182 183 func (v *stringSliceVar) Set(s string) error { 184 *v = append(*v, s) 185 return nil 186 } 187 177 188 func handleServiceCreateNetwork(dc *downstreamConn, params []string) error { 178 189 fs := newFlagSet() … … 183 194 realname := fs.String("realname", "", "") 184 195 nick := fs.String("nick", "", "") 196 var connectCommands stringSliceVar 197 fs.Var(&connectCommands, "connect-command", "") 185 198 186 199 if err := fs.Parse(params); err != nil { … … 191 204 } 192 205 206 for _, command := range connectCommands { 207 _, err := irc.ParseMessage(command) 208 if err != nil { 209 return fmt.Errorf("flag -connect-command must be a valid raw irc command string: %q: %v", command, err) 210 } 211 } 212 193 213 if *nick == "" { 194 214 *nick = dc.nick … … 197 217 var err error 198 218 network, err := dc.user.createNetwork(&Network{ 199 Addr: *addr, 200 Name: *name, 201 Username: *username, 202 Pass: *pass, 203 Realname: *realname, 204 Nick: *nick, 219 Addr: *addr, 220 Name: *name, 221 Username: *username, 222 Pass: *pass, 223 Realname: *realname, 224 Nick: *nick, 225 ConnectCommands: connectCommands, 205 226 }) 206 227 if err != nil { -
trunk/upstream.go
r261 r263 1190 1190 } 1191 1191 1192 for _, command := range uc.network.ConnectCommands { 1193 m, err := irc.ParseMessage(command) 1194 if err != nil { 1195 uc.logger.Printf("failed to parse connect command %q: %v", command, err) 1196 } else { 1197 uc.SendMessage(m) 1198 } 1199 } 1200 1192 1201 return nil 1193 1202 }
Note:
See TracChangeset
for help on using the changeset viewer.