64 lines
1.5 KiB
Crystal
64 lines
1.5 KiB
Crystal
require "authd"
|
|
require "ipc"
|
|
require "../src/client.cr"
|
|
require "http/server"
|
|
|
|
port = ARGV[0].to_i rescue 8080
|
|
addr = ARGV[1] rescue "127.0.0.1"
|
|
|
|
#login = ENV["LOGIN"]
|
|
#pass = ENV["PASS"]
|
|
|
|
dnsmanagerd = DNSManager::Client.new
|
|
#dnsmanagerd.login login, pass
|
|
|
|
server = HTTP::Server.new do |context|
|
|
ip = case addr
|
|
when "127.0.0.1"
|
|
a = context.request.remote_address.not_nil!
|
|
case a
|
|
when Socket::IPAddress
|
|
a.address.to_s
|
|
when Socket::UNIXAddress
|
|
next
|
|
end
|
|
else
|
|
context.request.headers["Host"] rescue next
|
|
end
|
|
|
|
next if ip.nil?
|
|
pp! ip
|
|
|
|
case context.request.path
|
|
when /^\/token-update\/(?<token>[a-z0-9-]+)/
|
|
token = $~["token"]
|
|
if token.nil?
|
|
context.response.status_code = 404
|
|
context.response.print "invalid token"
|
|
else
|
|
context.response.content_type = "text/html"
|
|
context.response.print "token: #{token} from #{ip}"
|
|
begin
|
|
response = dnsmanagerd.use_token token, ip
|
|
case response
|
|
when DNSManager::Response::Success
|
|
context.response.print "; Success!" # 🔻
|
|
when DNSManager::Response::Error
|
|
puts "error while updating token: #{response.reason}"
|
|
context.response.print "; command failed: #{response.reason}" # ⚠
|
|
end
|
|
rescue e
|
|
puts "error while updating token: #{e}"
|
|
context.response.print "; The command failed!" # ⚠
|
|
end
|
|
end
|
|
else
|
|
context.response.status_code = 404
|
|
context.response.print "Not found"
|
|
end
|
|
end
|
|
|
|
address = server.bind_tcp addr, port
|
|
puts "Receiving tokens on http://#{address}/token-update/<token>"
|
|
server.listen
|