diff options
author | Runxi Yu <me@runxiyu.org> | 2025-02-14 08:48:07 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-02-14 08:48:07 +0800 |
commit | e347064abe3ce4c90fbad23d36e5d61a149e2389 (patch) | |
tree | b587b82f918800b6ea457ece60d778b39a92dbe1 /http_server.go | |
parent | README.md: Add details in features supported by git repos (diff) | |
download | forge-e347064abe3ce4c90fbad23d36e5d61a149e2389.tar.gz forge-e347064abe3ce4c90fbad23d36e5d61a149e2389.tar.zst forge-e347064abe3ce4c90fbad23d36e5d61a149e2389.zip |
http_*: Refactor to reduce duplication
Diffstat (limited to 'http_server.go')
-rw-r--r-- | http_server.go | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/http_server.go b/http_server.go index 3804df7..6626ae4 100644 --- a/http_server.go +++ b/http_server.go @@ -113,6 +113,15 @@ func (router *http_router_t) ServeHTTP(w http.ResponseWriter, r *http.Request) { switch module_type { case "repos": params["repo_name"] = module_name + params["ref_type"], params["ref_name"], err = get_param_ref_and_type(r) + if err != nil { + if errors.Is(err, err_no_ref_spec) { + params["ref_type"] = "" + } else { + http.Error(w, "Error querying ref type: "+err.Error(), http.StatusInternalServerError) + return + } + } // TODO: subgroups if non_empty_last_segments_len == separator_index+3 { if !dir_mode { @@ -133,15 +142,18 @@ func (router *http_router_t) ServeHTTP(w http.ResponseWriter, r *http.Request) { params["rest"] = strings.Join(segments[separator_index+4:], "/") handle_repo_raw(w, r, params) case "log": - if non_empty_last_segments_len != separator_index+5 { + if non_empty_last_segments_len > separator_index+5 { http.Error(w, "Too many parameters", http.StatusBadRequest) return + } else if non_empty_last_segments_len < separator_index+5 { + http.Error(w, "Insufficient parameters", http.StatusBadRequest) + return } if dir_mode { http.Redirect(w, r, strings.TrimSuffix(r.URL.Path, "/"), http.StatusSeeOther) return } - params["ref"] = segments[separator_index+4] + params["ref_name"] = segments[separator_index+4] handle_repo_log(w, r, params) case "commit": if dir_mode { |