From ac3efc7c158186d1b4e15a363431c5b2fcc5cc59 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 26 Jun 2018 17:40:26 -0700 Subject: [PATCH] Validate URLs --- lib/manifique/agent.rb | 20 ++++++++++++++++++-- test/manifique_test.rb | 8 ++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/manifique/agent.rb b/lib/manifique/agent.rb index 1b30556..042c781 100644 --- a/lib/manifique/agent.rb +++ b/lib/manifique/agent.rb @@ -1,15 +1,31 @@ +require 'uri' require "manifique/web_client" module Manifique class Agent - def initialize(options) + def initialize(options={}) @options = options - @url = options[:url] + + if url_valid?(options[:url]) + @url = options[:url] + else + raise "No valid URL specified" + end end def fetch_metadata web_client = WebClient.new(url: @url) web_client.fetch_web_manifest end + + private + + def url_valid?(str) + return false unless str.class == String + url = URI.parse(str) + url.kind_of?(URI::HTTP) || url.kind_of?(URI::HTTPS) + rescue URI::InvalidURIError + false + end end end diff --git a/test/manifique_test.rb b/test/manifique_test.rb index 202a046..5377f6f 100644 --- a/test/manifique_test.rb +++ b/test/manifique_test.rb @@ -5,6 +5,14 @@ class ManifiqueTest < Minitest::Test refute_nil ::Manifique::VERSION end + def test_init_without_url + assert_raises(RuntimeError) { Manifique::Agent.new } + end + + def test_init_with_invalid_url + assert_raises(RuntimeError) { Manifique::Agent.new(url: "htp:/foo.com") } + end + def test_fetch_metadata agent = Manifique::Agent.new(url: 'https://example.com') assert_equal agent.fetch_metadata, 'https://example.com'