diff --git a/lib/mail_catcher.rb b/lib/mail_catcher.rb index 962a7d94..00782d14 100644 --- a/lib/mail_catcher.rb +++ b/lib/mail_catcher.rb @@ -93,6 +93,7 @@ def log_exception(message, context, exception) :daemon => !windows?, :browse => false, :quit => true, + :clear_messages => true, } def options @@ -103,6 +104,10 @@ def quittable? options[:quit] end + def clear_messages_allowed? + options[:clear_messages] + end + def parse! arguments=ARGV, defaults=@defaults @@defaults.dup.tap do |options| OptionParser.new do |parser| @@ -146,6 +151,10 @@ def parse! arguments=ARGV, defaults=@defaults options[:quit] = false end + parser.on("--no-clear-messages", "Don't allow clearning messages") do + options[:clear_messages] = false + end + if mac? parser.on("--[no-]growl") do |growl| puts "Growl is no longer supported" diff --git a/lib/mail_catcher/web/application.rb b/lib/mail_catcher/web/application.rb index 3a2246ff..601e411d 100644 --- a/lib/mail_catcher/web/application.rb +++ b/lib/mail_catcher/web/application.rb @@ -83,8 +83,12 @@ def asset_path(filename) end delete "/messages" do - Mail.delete! - status 204 + if MailCatcher.clear_messages_allowed? + Mail.delete! + status 204 + else + status 403 + end end get "/messages/:id.json" do @@ -162,12 +166,16 @@ def asset_path(filename) end delete "/messages/:id" do - id = params[:id].to_i - if Mail.message(id) - Mail.delete_message!(id) - status 204 + if MailCatcher.clear_messages_allowed? + id = params[:id].to_i + if Mail.message(id) + Mail.delete_message!(id) + status 204 + else + not_found + end else - not_found + status 403 end end diff --git a/views/index.erb b/views/index.erb index 0ffadf74..847e87fa 100644 --- a/views/index.erb +++ b/views/index.erb @@ -13,7 +13,9 @@