From 386d71150737ff457820a2261c64fed68c54ea93 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Fri, 21 Mar 2025 22:13:22 +0800 Subject: [PATCH] Stop using the cursed contentfulSegmentsLen --- http_server.go | 62 +++++++++++++++++++++++++++-------------------------- diff --git a/http_server.go b/http_server.go index 193432e8789a5c96182cd45dafbf75b73a29bb67..35b3ca5e40e8901ec79e148bebf0dd226c92bb70 100644 --- a/http_server.go +++ b/http_server.go @@ -21,7 +21,6 @@ clog.Info("Incoming HTTP: " + r.RemoteAddr + " " + r.Method + " " + r.RequestURI) var segments []string var err error - var contentfulSegmentsLen int var sepIndex int params := make(map[string]any) @@ -29,27 +28,9 @@ if segments, _, err = parseReqURI(r.RequestURI); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } - contentfulSegmentsLen = len(segments) if segments[len(segments)-1] == "" { - contentfulSegmentsLen-- - } - - if segments[0] == ":" { - if len(segments) < 2 { - http.Error(w, "Blank system endpoint", http.StatusNotFound) - return - } else if len(segments) == 2 && redirectDir(w, r) { - return - } - - switch segments[1] { - case "static": - staticHandler.ServeHTTP(w, r) - return - case "source": - sourceHandler.ServeHTTP(w, r) - return - } + // Might assign a trailing bool here + segments = segments[:len(segments)-1] } params["url_segments"] = segments @@ -70,6 +51,29 @@ } else { params["user_id_string"] = strconv.Itoa(userID) } + if len(segments) == 0 { + httpHandleIndex(w, r, params) + return + } + + if segments[0] == ":" { + if len(segments) < 2 { + http.Error(w, "Blank system endpoint", http.StatusNotFound) + return + } else if len(segments) == 2 && redirectDir(w, r) { + return + } + + switch segments[1] { + case "static": + staticHandler.ServeHTTP(w, r) + return + case "source": + sourceHandler.ServeHTTP(w, r) + return + } + } + if segments[0] == ":" { switch segments[1] { case "login": @@ -104,22 +108,20 @@ if sepIndex > 0 { groupPath = segments[:sepIndex] } else { - groupPath = segments[:len(segments)-1] + groupPath = segments } params["group_path"] = groupPath switch { - case contentfulSegmentsLen == 0: - httpHandleIndex(w, r, params) case sepIndex == -1: if redirectDir(w, r) { return } httpHandleGroupIndex(w, r, params) - case contentfulSegmentsLen == sepIndex+1: + case len(segments) == sepIndex+1: http.Error(w, "Illegal path 1", http.StatusNotImplemented) return - case contentfulSegmentsLen == sepIndex+2: + case len(segments) == sepIndex+2: http.Error(w, "Illegal path 2", http.StatusNotImplemented) return default: @@ -129,7 +131,7 @@ switch moduleType { case "repos": params["repo_name"] = moduleName - if contentfulSegmentsLen > sepIndex+3 { + if len(segments) > sepIndex+3 { switch segments[sepIndex+3] { case "info": if err = httpHandleRepoInfo(w, r, params); err != nil { @@ -160,7 +162,7 @@ http.Error(w, "Error opening repo: "+err.Error(), http.StatusInternalServerError) return } - if contentfulSegmentsLen == sepIndex+3 { + if len(segments) == sepIndex+3 { if redirectDir(w, r) { return } @@ -183,7 +185,7 @@ return } httpHandleRepoRaw(w, r, params) case "log": - if contentfulSegmentsLen > sepIndex+4 { + if len(segments) > sepIndex+4 { http.Error(w, "Too many parameters", http.StatusBadRequest) return } @@ -201,7 +203,7 @@ case "contrib": if redirectDir(w, r) { return } - switch contentfulSegmentsLen { + switch len(segments) { case sepIndex + 4: httpHandleRepoContribIndex(w, r, params) case sepIndex + 5: -- 2.48.1