X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fcore%2Fauth.rb;h=ce21ccc91c8633996345d32357fb48f59b0a4e65;hb=c5bd13b7ccad6832b75e2a185169d3822c3cc4ef;hp=fe781a2107467653daf30f59987c1ef747d26f97;hpb=c4921212f3a375abb67111f183564daf4865f0af;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/core/auth.rb b/lib/rbot/core/auth.rb index fe781a21..ce21ccc9 100644 --- a/lib/rbot/core/auth.rb +++ b/lib/rbot/core/auth.rb @@ -37,6 +37,13 @@ class AuthModule < CoreBotModule def load_array(key=:default, forced=false) debug "loading botusers (#{key}): #{@registry[key].pretty_inspect}" @bot.auth.load_array(@registry[key], forced) if @registry.has_key?(key) + if @bot.auth.botowner.password != @bot.config['auth.password'] + error "Master password is out of sync!" + debug " db password: #{@bot.auth.botowner.password}" + debug "conf password: #{@bot.config['auth.password']}" + error "Using conf password" + @bot.auth.botowner.password = @bot.config['auth.password'] + end end # The permission parameters accept arguments with the following syntax: @@ -153,7 +160,7 @@ class AuthModule < CoreBotModule def auth_view_perm(m, params) begin if params[:user].nil? - user = get_botusername_for(m.source) + user = get_botuser_for(m.source) return m.reply(_("you are owner, you can do anything")) if user.owner? else user = @bot.auth.get_botuser(params[:user].sub(/^all$/,"everyone")) @@ -168,11 +175,11 @@ class AuthModule < CoreBotModule next if val.perm.empty? case k when :* - str << _("on any channel: ") + str << _("on any channel: ").dup when :"?" - str << _("in private: ") + str << _("in private: ").dup else - str << _("on #{k}: ") + str << _("on #{k}: ").dup end sub = [] val.perm.each { |cmd, bool| @@ -213,8 +220,8 @@ class AuthModule < CoreBotModule auth = nil if cmds.has_key?(k) cmds[k][:botmodule].handler.each do |tmpl| - options, failure = tmpl.recognize(pseudo) - next if options.nil? + options = tmpl.recognize(pseudo) + next if options.kind_of? MessageMapper::Failure auth = tmpl.options[:full_auth_path] break end @@ -235,23 +242,27 @@ class AuthModule < CoreBotModule where = m.parse_channel_list(p[:where].to_s).first # should only be one anyway end - # pseudo-message to find the template. The source is ignored, and the - # target is set according to where the template should be checked - # (public or private) - # This might still fail in the case of 'everywhere' for commands there are - # really only private - case where - when :"?" - pseudo_target = @bot.myself - when :* - pseudo_target = m.channel + if p.has_key? :auth_path + auth_path = p[:auth_path] else - pseudo_target = m.server.channel(where) - end + # pseudo-message to find the template. The source is ignored, and the + # target is set according to where the template should be checked + # (public or private) + # This might still fail in the case of 'everywhere' for commands there are + # really only private + case where + when :"?" + pseudo_target = @bot.myself + when :* + pseudo_target = m.channel + else + pseudo_target = m.server.channel(where) + end - pseudo = PrivMessage.new(bot, m.server, m.source, pseudo_target, p[:stuff].to_s) + pseudo = PrivMessage.new(bot, m.server, m.source, pseudo_target, p[:stuff].to_s) - auth_path = find_auth(pseudo) + auth_path = find_auth(pseudo) + end debug auth_path if auth_path @@ -390,19 +401,35 @@ class AuthModule < CoreBotModule return _("user list : lists all the botusers") when "destroy" return _("user destroy : destroys . This function %{highlight}must%{highlight} be called in two steps. On the first call is queued for destruction. On the second call, which must be in the form 'user confirm destroy ', the botuser will be destroyed. If you want to cancel the destruction, issue the command 'user cancel destroy '") % {:highlight => Bold} + when "export" + return _("user export [to ]: exports user data to file (default: new-auth.users)") + when "import" + return _("user import [from ]: import user data from file (default: new-auth.users)") else - return _("user topics: show, enable|disable, add|rm netmask, set, reset, tell, create, list, destroy") + return _("user topics: show, enable|disable, add|rm netmask, set, reset, tell, create, list, destroy, import, export") end when "auth" - return _("auth : log in as the bot owner; other commands: login, whoami, permissions syntax, permissions [re]set, permissions view, user, meet, hello, allow, prevent") + return _("auth : log in as the bot owner; other commands: login, whoami, permissions syntax, permissions [re]set, permissions view, user, meet, hello, allow, deny") when "meet" return _("meet [as ]: creates a bot user for nick, calling it user (defaults to the nick itself)") when "hello" return _("hello: creates a bot user for the person issuing the command") when "allow" - return _("allow to do []: gives botuser the permissions to execute a command such as the provided sample command (in private or in channel, according to the optional )") + return [ + _("allow to do []: gives botuser the permissions to execute a command such as the provided sample command"), + _("(in private or in channel, according to the optional )."), + _(" should be a full command, not just the command keyword --"), + _("correct: allow user to do addquote stuff --"), + _("wrong: allow user to do addquote.") + ].join(" ") when "deny" - return _("deny from doing []: removes from botuser the permissions to execute a command such as the provided sample command (in private or in channel, according to the optional )") + return [ + _("deny from doing []: removes from botuser the permissions to execute a command such as the provided sample command"), + _("(in private or in channel, according to the optional )."), + _(" should be a full command, not just the command keyword --"), + _("correct: deny user from doing addquote stuff --"), + _("wrong: deny user from doing addquote.") + ].join(" ") else return _("auth commands: auth, login, whoami, who, permission[s], user, meet, hello, allow, deny") end @@ -622,7 +649,7 @@ class AuthModule < CoreBotModule if !nick # we are actually responding to a 'hello' command unless m.botuser.transient? - m.reply @bot.lang.get('hello_X') % m.botuser + m.reply @bot.lang.get('hello_X') % m.botuser, :nick => false return end nick = m.sourcenick @@ -641,7 +668,7 @@ class AuthModule < CoreBotModule met = @bot.auth.make_permanent(irc_user, buname) @bot.auth.set_changed call_event(:botuser,:post_perm, {:irc_user => irc_user, :bot_user => buname}) - m.reply @bot.lang.get('hello_X') % met + m.reply @bot.lang.get('hello_X') % met, :nick => false @bot.say nick, _("you are now registered as %{buname}. I created a random password for you : %{pass} and you can change it at any time by telling me 'user set password ' in private" % { :buname => buname, :pass => met.password @@ -686,7 +713,7 @@ class AuthModule < CoreBotModule def auth_list_users(m, params) # TODO name regexp to filter results - list = @bot.auth.save_array.inject([]) { |list, x| ['everyone', 'owner'].include?(x[:username]) ? list : list << x[:username] } + list = @bot.auth.save_array.inject([]) { |lst, x| ['everyone', 'owner'].include?(x[:username]) ? lst : lst << x[:username] } if defined?(@destroy_q) list.map! { |x| @destroy_q.include?(x) ? x + _(" (queued for destruction)") : x @@ -702,7 +729,7 @@ class AuthModule < CoreBotModule buname = params[:name] return m.reply(_("You can't destroy %{user}") % {:user => buname}) if ["everyone", "owner"].include?(buname) - mod = params[:modifier].to_sym rescue nil + mod = params[:modifier].nil_or_empty? ? nil : params[:modifier].to_sym buser_array = @bot.auth.save_array buser_hash = buser_array.inject({}) { |h, u| @@ -794,13 +821,13 @@ class AuthModule < CoreBotModule def auth_export(m, params) - exportfile = "#{@bot.botclass}/new-auth.users" + exportfile = @bot.path "new-auth.users" what = params[:things] has_to = what[-2] == "to" if has_to - exportfile = "#{@bot.botclass}/#{what[-1]}" + exportfile = @bot.path what[-1] what.slice!(-2,2) end @@ -866,13 +893,13 @@ class AuthModule < CoreBotModule def auth_import(m, params) - importfile = "#{@bot.botclass}/new-auth.users" + importfile = @bot.path "new-auth.users" what = params[:things] has_from = what[-2] == "from" if has_from - importfile = "#{@bot.botclass}/#{what[-1]}" + importfile = @bot.path what[-1] what.slice!(-2,2) end