heimdall/server.rb

45 lines
1.1 KiB
Ruby

require_relative "proto"
require_relative "hyde/hyde"
require "json"
Users = Heimdall::UserCache.new
def require_keys(dict,key_dict)
raise KeyError, "not a dict" unless dict.kind_of? Hash
key_dict.each_pair { |k,v|
unless (dict.has_key? k) and (dict[k].kind_of? v) then
raise KeyError, "key #{k} of type #{v} required"
end
}
end
server = Hyde::Server.new Port: 8000 do
path "user" do
post "new" do |ctx|
req,res = ctx.request,ctx.response
begin
data = JSON::Parser.new(req.body).parse
require_keys(data,{
username: String,
protocol_id: String
})
Users.add(Heimdall::User.new data[:username], data[:protocol_id])
rescue JSON::ParserError => jsonerror
res.body = JSON::fast_generate({
error: "#{jsonerror}"
})
res['Content-Type'] = "application/json"
res.status = 400
rescue KeyError => keyerror
res.body = JSON::fast_generate({
error: "#{keyerror}"
})
res['Content-Type'] = "application/json"
res.status = 400
end
end
end
end
server.start