From 18385995445fa15ddca75af42b859da958402af8 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Wed, 22 Feb 2023 20:43:42 +0900 Subject: Add more user error handling --- hybring.cr | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'hybring.cr') diff --git a/hybring.cr b/hybring.cr index 1c5015e..4b37469 100644 --- a/hybring.cr +++ b/hybring.cr @@ -60,6 +60,7 @@ end File.write "index.xhtml", page server = HTTP::Server.new do |context| + # Manually crafted request next http_error context, 405 if context.request.method != "POST" content_length = context.request.content_length next http_error context, 411 unless content_length @@ -73,6 +74,9 @@ server = HTTP::Server.new do |context| params[key] = value case key when "nick" + if /^[0-9a-z]+$/ !~ value + next errors["nick"] = "Must be ASCII lowercase alphanumeric" + end when "opennic" uri = URI.parse value next errors["opennic"] = "Must be absolute URL" unless uri.absolute? @@ -95,9 +99,16 @@ server = HTTP::Server.new do |context| break invalid_param = true end end + + # Manually crafted request next http_error context, 400, "Invalid Parameter" if invalid_param + next http_error context, 400, "Missing Parameter" unless params.size == 3 - context.response.status_code = 400 unless errors.empty? + if errors.empty? + # TODO: write feed + else + context.response.status_code = 400 unless errors.empty? + end context.response.content_type = "application/xhtml+xml" context.response.print page errors, params # TODO: schedule dynamic check -- cgit 1.4.1