Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "Add validation for resource match mode" #3409

Merged
merged 1 commit into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 12 additions & 30 deletions app/messages/resource_match_create_message.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,72 +22,54 @@ def v2_fingerprints_body

private

PERMISSIONS_REGEX = /^[0-7]{3,4}$/

def each_resource
if resources.is_a?(Array)
resources.each do |r|
checksum_validator(r[:checksum])
size_validator(r[:size_in_bytes])
mode_validator(r[:mode])
end
end
end

RESOURCE_ERROR_PREAMBLE = 'array contains at least one resource with'.freeze
RESOURCE_ERROR_PREAMBLE = 'array contains at least one resource with a'.freeze

def checksum_validator(checksum)
unless checksum.is_a?(Hash)
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-object checksum") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-object checksum"
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} non-object checksum") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} non-object checksum"
)
return
end

unless checksum[:value].is_a?(String)
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-string checksum value") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-string checksum value"
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} non-string checksum value") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} non-string checksum value"
)
return
end

unless valid_sha1?(checksum[:value])
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-SHA1 checksum value") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-SHA1 checksum value"
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} non-SHA1 checksum value") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} non-SHA1 checksum value"
)
return
end
end

def size_validator(size)
unless size.is_a?(Integer)
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-integer size_in_bytes") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-integer size_in_bytes"
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} non-integer size_in_bytes") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} non-integer size_in_bytes"
)
return
end

unless size >= 0
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} a negative size_in_bytes") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} a negative size_in_bytes"
)
end
end

def mode_validator(mode)
return if mode.nil?

unless mode.is_a?(String)
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-string mode") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} a non-string mode"
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} negative size_in_bytes") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} negative size_in_bytes"
)
return
end

unless PERMISSIONS_REGEX.match?(mode)
errors.add(:resources, "#{RESOURCE_ERROR_PREAMBLE} an incorrect mode") unless errors.added?(
:resources, "#{RESOURCE_ERROR_PREAMBLE} an incorrect mode"
)
end
end

def valid_sha1?(value)
Expand Down
38 changes: 0 additions & 38 deletions spec/unit/messages/resource_match_create_message_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -166,44 +166,6 @@
end
end

context 'when the v3 mode is not a string' do
let(:params) do
{
resources: [
{
checksum: { value: '002d760bea1be268e27077412e11a320d0f164d3' },
size_in_bytes: 36,
mode: 123
}
]
}
end

it 'has the correct error message' do
expect(subject).to be_invalid
expect(subject.errors[:resources]).to include('array contains at least one resource with a non-string mode')
end
end

context 'when the v3 mode is not a POSIX file permissions string' do
let(:params) do
{
resources: [
{
checksum: { value: '002d760bea1be268e27077412e11a320d0f164d3' },
size_in_bytes: 36,
mode: '9876'
}
]
}
end

it 'has the correct error message' do
expect(subject).to be_invalid
expect(subject.errors[:resources]).to include('array contains at least one resource with an incorrect mode')
end
end

context 'when there are multiple validation violations' do
let(:params) do
{
Expand Down