45 lines
1.1 KiB
Ruby
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
|