summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/url_blockers/url_whitelist_spec.rb
blob: 906e0f0ba3d9295847c67ee4d52bee24dc7273cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# frozen_string_literal: true

require 'spec_helper'

describe Gitlab::UrlBlockers::UrlWhitelist do
  include StubRequests

  let(:whitelist) { [] }

  before do
    allow(ApplicationSetting).to receive(:current).and_return(ApplicationSetting.new)
    stub_application_setting(outbound_local_requests_whitelist: whitelist)
  end

  describe '#domain_whitelisted?' do
    let(:whitelist) do
      [
        'www.example.com',
        'example.com'
      ]
    end

    it 'returns true if domains present in whitelist' do
      aggregate_failures do
        whitelist.each do |domain|
          expect(described_class).to be_domain_whitelisted(domain)
        end

        ['subdomain.example.com', 'example.org'].each do |domain|
          expect(described_class).not_to be_domain_whitelisted(domain)
        end
      end
    end

    it 'returns false when domain is blank' do
      expect(described_class).not_to be_domain_whitelisted(nil)
    end
  end

  describe '#ip_whitelisted?' do
    let(:whitelist) do
      [
        '0.0.0.0',
        '127.0.0.1',
        '192.168.1.1',
        '0:0:0:0:0:ffff:192.168.1.2',
        '::ffff:c0a8:102',
        'fc00:bf8b:e62c:abcd:abcd:aaaa:aaaa:aaaa',
        '0:0:0:0:0:ffff:169.254.169.254',
        '::ffff:a9fe:a9fe',
        '::ffff:a9fe:a864',
        'fe80::c800:eff:fe74:8'
      ]
    end

    it 'returns true if ips present in whitelist' do
      aggregate_failures do
        whitelist.each do |ip_address|
          expect(described_class).to be_ip_whitelisted(ip_address)
        end

        ['172.16.2.2', '127.0.0.2', 'fe80::c800:eff:fe74:9'].each do |ip_address|
          expect(described_class).not_to be_ip_whitelisted(ip_address)
        end
      end
    end

    it 'returns false when ip is blank' do
      expect(described_class).not_to be_ip_whitelisted(nil)
    end
  end
end