aboutsummaryrefslogtreecommitdiff
path: root/router.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-12 18:26:01 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-12 18:34:46 +0800
commit542510aa484ecbc6c11c513289e95a151e59783d (patch)
tree162e94b97621dfbf84594fe2d9945273bee84cc6 /router.go
parentssh.go: Add anonymous SSH cloning (diff)
downloadforge-542510aa484ecbc6c11c513289e95a151e59783d.tar.gz
forge-542510aa484ecbc6c11c513289e95a151e59783d.tar.zst
forge-542510aa484ecbc6c11c513289e95a151e59783d.zip
http_router.go: Move from router.go and fix conditional placement bug
Diffstat (limited to 'router.go')
-rw-r--r--router.go117
1 files changed, 0 insertions, 117 deletions
diff --git a/router.go b/router.go
deleted file mode 100644
index c843698..0000000
--- a/router.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package main
-
-import (
- "errors"
- "fmt"
- "net/http"
- "strings"
-)
-
-type http_router_t struct{}
-
-func (router *http_router_t) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- segments, _, err := parse_request_uri(r.RequestURI)
- if err != nil {
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
- }
-
- if len(segments) < 2 {
- http.Error(w, "Blank system endpoint", http.StatusNotFound)
- return
- }
-
- if segments[0] == ":" {
- switch segments[1] {
- case "static":
- static_handler.ServeHTTP(w, r)
- case "source":
- source_handler.ServeHTTP(w, r)
- default:
- fmt.Fprintln(w, "Unknown system module type:", segments[1])
- }
- return
- }
-
- separator_index := -1
- for i, part := range segments {
- if part == ":" {
- separator_index = i
- break
- }
- }
- non_empty_last_segments_len := len(segments)
- dir_mode := false
- if segments[len(segments)-1] == "" {
- non_empty_last_segments_len--
- dir_mode = true
- }
-
- params := make(map[string]string)
- _ = params
- switch {
- case non_empty_last_segments_len == 0:
- handle_index(w, r)
- case separator_index == -1:
- fmt.Fprintln(w, "Group indexing hasn't been implemented yet")
- case non_empty_last_segments_len == separator_index+1:
- fmt.Fprintln(w, "Group root hasn't been implemented yet")
- case non_empty_last_segments_len == separator_index+2:
- module_type := segments[separator_index+1]
- params["group_name"] = segments[0]
- switch module_type {
- case "repos":
- handle_group_repos(w, r, params)
- default:
- fmt.Fprintln(w, "Unknown module type:", module_type)
- }
- default:
- module_type := segments[separator_index+1]
- module_name := segments[separator_index+2]
- params["group_name"] = segments[0]
- switch module_type {
- case "repos":
- params["repo_name"] = module_name
- // TODO: subgroups
- if non_empty_last_segments_len == separator_index+3 {
- if !dir_mode {
- http.Redirect(w, r, r.URL.Path+"/", http.StatusSeeOther)
- return
- }
- handle_repo_index(w, r, params)
- return
- }
- repo_feature := segments[separator_index+3]
- switch repo_feature {
- case "tree":
- params["rest"] = strings.Join(segments[separator_index+4:], "/")
- handle_repo_tree(w, r, params)
- case "raw":
- 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 {
- fmt.Fprintln(w, "Too many parameters")
- return
- }
- if dir_mode {
- http.Redirect(w, r, strings.TrimSuffix(r.URL.Path, "/"), http.StatusSeeOther)
- return
- }
- params["ref"] = segments[separator_index+4]
- handle_repo_log(w, r, params)
- case "commit":
- if dir_mode {
- http.Redirect(w, r, strings.TrimSuffix(r.URL.Path, "/"), http.StatusSeeOther)
- return
- }
- params["commit_id"] = segments[separator_index+4]
- handle_repo_commit(w, r, params)
- }
- default:
- fmt.Fprintln(w, "Unknown module type:", module_type)
- }
- }
-}
-
-var err_bad_request = errors.New("Bad Request")