9709: do not include manifest_text in collection logs.
authorradhika <radhika@curoverse.com>
Thu, 11 Aug 2016 18:10:00 +0000 (14:10 -0400)
committerradhika <radhika@curoverse.com>
Thu, 11 Aug 2016 18:10:00 +0000 (14:10 -0400)
services/api/app/models/collection.rb
services/api/test/unit/log_test.rb

index 4a612924b617f9b9b1dc5c4d7507f8113fdb5553..248c8b98245bd5628096fa60ba0f3ed2b7ea66e9 100644 (file)
@@ -356,6 +356,12 @@ class Collection < ArvadosModel
     super - ["manifest_text"]
   end
 
+  def logged_attributes
+    attrs = attributes.dup
+    attrs.delete('manifest_text')
+    attrs
+  end
+
   protected
   def portable_manifest_text
     self.class.munge_manifest_locators(manifest_text) do |match|
index 22808c5ed6f8718d1f0b4cfb117562822e556c1f..6bca80c7780ebc7f847aa24827ea12614b03a54b 100644 (file)
@@ -54,12 +54,12 @@ class LogTest < ActiveSupport::TestCase
     yield props if block_given?
   end
 
-  def assert_auth_logged_with_clean_properties(auth, event_type)
-    assert_logged(auth, event_type) do |props|
+  def assert_logged_with_clean_properties(obj, event_type, excluded_attr)
+    assert_logged(obj, event_type) do |props|
       ['old_attributes', 'new_attributes'].map { |k| props[k] }.compact
         .each do |attributes|
-        refute_includes(attributes, 'api_token',
-                        "auth log properties include sensitive API token")
+        refute_includes(attributes, excluded_attr,
+                        "log properties includes #{excluded_attr}")
       end
       yield props if block_given?
     end
@@ -224,12 +224,12 @@ class LogTest < ActiveSupport::TestCase
     auth.user = users(:spectator)
     auth.api_client = api_clients(:untrusted)
     auth.save!
-    assert_auth_logged_with_clean_properties(auth, :create)
+    assert_logged_with_clean_properties(auth, :create, 'api_token')
     auth.expires_at = Time.now
     auth.save!
-    assert_auth_logged_with_clean_properties(auth, :update)
+    assert_logged_with_clean_properties(auth, :update, 'api_token')
     auth.destroy
-    assert_auth_logged_with_clean_properties(auth, :destroy)
+    assert_logged_with_clean_properties(auth, :destroy, 'api_token')
   end
 
   test "use ownership and permission links to determine which logs a user can see" do
@@ -269,4 +269,16 @@ class LogTest < ActiveSupport::TestCase
       refute_includes result_ids, logs(notwant).id
     end
   end
+
+  test "manifest_text not included in collection logs" do
+    act_as_system_user do
+      coll = Collection.create(manifest_text: ". acbd18db4cc2f85cedef654fccc4a4d8+3 0:3:foo\n")
+      assert_logged_with_clean_properties(coll, :create, 'manifest_text')
+      coll.name = "testing"
+      coll.save!
+      assert_logged_with_clean_properties(coll, :update, 'manifest_text')
+      coll.destroy
+      assert_logged_with_clean_properties(coll, :destroy, 'manifest_text')
+    end
+  end
 end