Sfoglia il codice sorgente

check permissions before doing channel modes

tags/v0.1.0
Jeremy Latt 10 anni fa
parent
commit
9b89f1a0fb
2 ha cambiato i file con 20 aggiunte e 6 eliminazioni
  1. 14
    6
      irc/channel.go
  2. 6
    0
      irc/reply.go

+ 14
- 6
irc/channel.go Vedi File

@@ -102,6 +102,11 @@ func (channel *Channel) GetUsers(replier Replier) {
102 102
 	replier.Reply(NewNamesReply(channel))
103 103
 }
104 104
 
105
+func (channel *Channel) ClientIsOperator(client *Client) bool {
106
+	// TODO client-channel relations
107
+	return false
108
+}
109
+
105 110
 func (channel *Channel) Nicks() []string {
106 111
 	nicks := make([]string, len(channel.members))
107 112
 	i := 0
@@ -219,12 +224,15 @@ func (msg *ChannelModeCommand) HandleChannel(channel *Channel) {
219 224
 			}
220 225
 			client.Reply(RplEndOfBanList(channel))
221 226
 		case NoOutside:
222
-			// TODO perms
223
-			switch modeOp.op {
224
-			case Add:
225
-				channel.noOutside = true
226
-			case Remove:
227
-				channel.noOutside = false
227
+			if channel.ClientIsOperator(client) {
228
+				switch modeOp.op {
229
+				case Add:
230
+					channel.noOutside = true
231
+				case Remove:
232
+					channel.noOutside = false
233
+				}
234
+			} else {
235
+				client.Reply(ErrChanOPrivIsNeeded(channel))
228 236
 			}
229 237
 		}
230 238
 	}

+ 6
- 0
irc/reply.go Vedi File

@@ -334,3 +334,9 @@ func ErrCannotSendToChan(channel *Channel) Reply {
334 334
 	return NewNumericReply(channel.server, ERR_CANNOTSENDTOCHAN,
335 335
 		"%s :Cannot send to channel", channel.name)
336 336
 }
337
+
338
+// <channel> :You're not channel operator
339
+func ErrChanOPrivIsNeeded(channel *Channel) Reply {
340
+	return NewNumericReply(channel.server, ERR_CHANOPRIVSNEEDED,
341
+		"%s :You're not channel operator", channel.name)
342
+}

Loading…
Annulla
Salva