Updates README, Fixes tests
This commit is contained in:
parent
70ec73aebb
commit
152924eaaa
27
README.md
27
README.md
|
@ -1,36 +1,17 @@
|
||||||
# lightsaber [![Build Status](https://travis-ci.org/captn3m0/lightsaber.svg?branch=master)](https://travis-ci.org/captn3m0/lightsaber)
|
# lightsaber [![Build Status](https://travis-ci.org/captn3m0/lightsaber.svg?branch=master)](https://travis-ci.org/captn3m0/lightsaber)
|
||||||
|
|
||||||
Lightsaber is a simple DNS Redirect service. It offers 301/302 redirects for
|
Lightsaber is a simple DNS Redirect service. It offers 301/302 redirects for
|
||||||
your domains. The configuration is kept public on this github repository itself.
|
your domains. The configuration is stored in TXT records.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To add a DNS record, point your domain via a CNAME entry to `lightsaber.captnemo.in`.
|
To add a DNS record, point your domain via a CNAME entry to `lightsaber.captnemo.in`.
|
||||||
|
|
||||||
You can also have fallthrough domain redirects
|
Then create a TXT record for the `_redirect` subdomain and use the following as the value:
|
||||||
(thanks to @vivekprakash for the suggestion), by making the redirect a hash
|
|
||||||
with a `root` key set to the url prefix.
|
|
||||||
|
|
||||||
```yaml
|
v=lr1;https://google.com
|
||||||
# This is a fallthrough redirect
|
|
||||||
# so t.co/ev would redirect to twitter.com/ev
|
|
||||||
t.co:
|
|
||||||
root: https://twitter.com
|
|
||||||
# All goo.gl routes will forward to google.com, and not use fallthrough
|
|
||||||
goo.gl: https://google.com
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, you will need to do the following:
|
where https://google.com is the redirect URL.
|
||||||
|
|
||||||
1. Fork this repo
|
|
||||||
2. Edit the redirects.yml file and add your redirect in the relevant section
|
|
||||||
3. File a Pull Request with your edit
|
|
||||||
|
|
||||||
Once the Pull Request is approved, the redirect will automatically be deployed
|
|
||||||
via Travis.
|
|
||||||
|
|
||||||
If you do not wish to make your domain redirects public, or give away your domain
|
|
||||||
names, you can self host this as well.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
43
test.rb
43
test.rb
|
@ -6,48 +6,13 @@ require_relative './lightsaber'
|
||||||
|
|
||||||
class TestConfig < Minitest::Test
|
class TestConfig < Minitest::Test
|
||||||
REDIRECTS = [301, 302]
|
REDIRECTS = [301, 302]
|
||||||
def setup
|
|
||||||
@config = YAML::load_file 'redirects.yml'
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_redirect_sections
|
|
||||||
@config.each do |code, zone|
|
|
||||||
assert REDIRECTS.include? code
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_txt_record
|
def test_txt_record
|
||||||
saber = Lightsaber.new 'http://localhost:9292/test'
|
saber = Lightsaber.new 'http://localhost:9292/test'
|
||||||
pp saber.get_response_from_dns 'captnemo.in'
|
res = saber.get_response_from_dns 'lstest.captnemo.in'
|
||||||
|
|
||||||
|
assert_equal 'https://google.com', res.headers['Location']
|
||||||
|
assert_equal 302, res.status
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_each_domain
|
|
||||||
@config.each do |section, zone|
|
|
||||||
zone.each do |domain, redirect|
|
|
||||||
url = get_url(redirect, "")
|
|
||||||
refute_nil url, "Invalid YAML config for #{domain}"
|
|
||||||
assert resolves_to_lightsaber(domain),
|
|
||||||
"DNS for #{domain} isn't setup yet. See README"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def resolves_to_lightsaber(domain)
|
|
||||||
flag = domain === "lightsaber.captnemo.in"
|
|
||||||
Resolv::DNS.open do |dns|
|
|
||||||
records = dns.getresources domain, Resolv::DNS::Resource::IN::CNAME
|
|
||||||
records.each do |record|
|
|
||||||
flag||=record.name.to_s === "lightsaber.captnemo.in"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
flag
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_url(domain_object, rel_route)
|
|
||||||
if domain_object.is_a? Hash
|
|
||||||
return domain_object['root'] + "/" + rel_route
|
|
||||||
elsif domain_object.is_a? String
|
|
||||||
return domain_object
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
Loading…
Reference in New Issue