diff options
author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2023-02-22 20:43:42 +0900 |
---|---|---|
committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2023-02-22 20:43:42 +0900 |
commit | 18385995445fa15ddca75af42b859da958402af8 (patch) | |
tree | 6c1997f8f1170bb437a006672d743d94d25cd713 | |
parent | 4fcf1161320b28509ed7c517d38c93f26157b6af (diff) | |
download | hybring-18385995445fa15ddca75af42b859da958402af8.tar.gz |
Add more user error handling
-rw-r--r-- | hybring.cr | 13 | ||||
-rw-r--r-- | style.css | 2 | ||||
-rw-r--r-- | xhtml.cr | 2 |
3 files changed, 14 insertions, 3 deletions
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 diff --git a/style.css b/style.css index 395c35d..938af97 100644 --- a/style.css +++ b/style.css @@ -2,7 +2,7 @@ html { margin: auto; max-width: 72ch; } -h1, h2, h3, h4, h5, h6 { margin-bottom: 1ex } +h1, h2, h3, h4, h5, h6 { margin: 1ex 0 } form { display: grid; grid-template-columns: max-content 1fr; diff --git a/xhtml.cr b/xhtml.cr index 2dc8aea..4fd58eb 100644 --- a/xhtml.cr +++ b/xhtml.cr @@ -58,7 +58,7 @@ def form(xml, errors = {} of String => String, params = {} of String => String) # FIXME: get URL from configuration xml.element "form", action: "http://127.0.0.1:8080", method: "POST" do - input xml, "nick", "Nickname", "digits and ASCII lowercase letters", + input xml, "nick", "Nickname", "digits and lowercase letters", errors.fetch("nick", nil), params.fetch("nick", nil) input xml, "opennic", "OpenNIC URL", "e.g. http://example.null", errors.fetch("opennic", nil), params.fetch("opennic", nil) |