diff --git a/chatcommands.lua b/chatcommands.lua index 58a26b7..a3a7396 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -158,17 +158,7 @@ local join_channel = { return false, "ERROR: You already joined "..channel_name..", no need to rejoin" end - if beerchat.channels[channel_name].password and beerchat.channels[channel_name].password ~= "" then - if #str == 1 then - return false, "ERROR: This channel requires that you supply a password. " - .. "Supply it in the following format: /jc my channel,password01" - end - if str[2] ~= beerchat.channels[channel_name].password then - return false, "ERROR: Invalid password." - end - end - - return beerchat.join_channel(name, channel_name) + return beerchat.join_channel(name, channel_name, { password = str[2] }) end } diff --git a/plugin/acl.lua b/plugin/acl.lua new file mode 100644 index 0000000..e58d127 --- /dev/null +++ b/plugin/acl.lua @@ -0,0 +1,40 @@ +--luacheck: no_unused_args + +--[[ TODO: + * Move rest of password stuff from chatcommands. + * Possibly also move channel invitation commands here. + * Add simple channel ACLs. Invite command to add users, kick command to remove users. + * Build simple RBAC on top of that to allow multiple managers / role based permissions for users. +--]] + +beerchat.register_callback('after_joinplayer', function(player) + -- CHECK ACTIVE CHANNEL ACL HERE AND TAKE ACTION IF NEEDED +end) + +beerchat.register_callback('before_invite', function(name, recipient, channel) + -- INJECT EVERYTHING THAT IS REQUIRED TO HAVE FULL ACCESS TO CHANNEL SO THAT + -- PLAYERS WITH THE FORCE CAN MOVE ANYONE TO ANY CHANNEL, ALSO TO LOCKED CHANNELS. +end) + +beerchat.register_callback('before_join', function(name, channel_name, options) + local channel = beerchat.channels[channel_name] + if channel.password and channel.password ~= "" then + if not options or not options.password or options.password == "" then + return false, "ERROR: This channel requires that you supply a password. " + .. "Supply it in the following format: /jc my channel,password01" + end + if options.password ~= channel.password then + return false, "ERROR: Invalid password." + end + end +end) + +beerchat.register_callback('before_switch_chan', function(name, oldchannel, newchannel) + -- COULD BE USED TO REVALIDATE ACCESS IF NEEDED, PROBABLY NOT NEEDED + -- IF KICKING PLAYERS FROM CHANNELS IS ALSO ADDED. +end) + +beerchat.register_callback('on_forced_join', function(name, target, channel, from_channel) + -- INJECT EVERYTHING THAT IS REQUIRED TO HAVE FULL ACCESS TO CHANNEL SO THAT + -- PLAYERS WITH THE FORCE CAN MOVE ANYONE TO ANY CHANNEL, ALSO TO LOCKED CHANNELS. +end) diff --git a/plugin/init.lua b/plugin/init.lua index d25a401..b3912f8 100644 --- a/plugin/init.lua +++ b/plugin/init.lua @@ -20,6 +20,8 @@ load_plugin("me", true) -- Allows switching channels with "#channelname" and sending to channel with "#channelname message here" load_plugin("hash", true) +load_plugin("acl", true) + -- Allows "@player message here" to send private messages to players load_plugin("pm", true)