Compare commits

..

2 Commits
v0.1 ... master

Author SHA1 Message Date
5fefc41f15 Updating readme to v0.2 2025-12-02 21:50:11 +03:00
227e9fed59 Added dispatching to cargo indices 2025-12-02 20:22:20 +03:00
2 changed files with 65 additions and 14 deletions

55
main.go
View File

@ -10,19 +10,31 @@ import (
"strings"
)
type config struct {
Listen string `json:"listen"`
Domain string `json:"domain"`
Organizations []string `json:"organizations"`
type listeners struct {
Maven string `json:"maven"`
Cargo string `json:"cargo"`
}
func searcher(config *config, w http.ResponseWriter, r *http.Request) {
type config struct {
Listen listeners `json:"listen"`
Domain string `json:"domain"`
Organizations []string `json:"organizations"`
}
func searcher(config *config, dst string, useGet bool, w http.ResponseWriter, r *http.Request) {
for _, org := range config.Organizations {
actualUrl := fmt.Sprintf(
"https://%s/api/packages/%s/maven/%s",
dst,
config.Domain, org, strings.TrimLeft(r.URL.Path, "/"),
)
resp, err := http.Head(actualUrl)
var resp *http.Response
var err error
if useGet {
resp, err = http.Get(actualUrl)
} else {
resp, err = http.Head(actualUrl)
}
if err != nil {
w.WriteHeader(500)
_, err := fmt.Fprintf(w, "%v", err)
@ -97,8 +109,29 @@ func main() {
return
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
searcher(&config, w, r)
})
log.Fatal(http.ListenAndServe(config.Listen, nil))
go func() {
dispatcher := http.NewServeMux()
dispatcher.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
searcher(&config, "https://%s/api/packages/%s/maven/%s", false, w, r)
})
server := http.Server{
Addr: config.Listen.Maven,
Handler: dispatcher,
}
log.Fatal(server.ListenAndServe())
}()
go func() {
dispatcher := http.NewServeMux()
dispatcher.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
searcher(&config, "https://%s/api/packages/%s/cargo/%s", true, w, r)
})
server := http.Server{
Addr: config.Listen.Cargo,
Handler: dispatcher,
}
log.Fatal(server.ListenAndServe())
}()
select {}
}

View File

@ -1,8 +1,8 @@
Merges several Gitea organizations' maven repositories to one path.
Merges several Gitea organizations' maven/cargo repositories to one path.
## usage
```shell
./maven-on-gitea-redirector-v0.1 config.json
./maven-on-gitea-redirector-v0.2 config.json
```
## config
@ -11,7 +11,10 @@ Merges several Gitea organizations' maven repositories to one path.
- `organizations` - list of Gitea organizations which should be included to search
```json
{
"listen": "localhost:49186",
"listen": {
"maven": "localhost:49186",
"cargo": "localhost:49187"
},
"domain": "git.landgrafhomyak.ru",
"organizations": [
"xomrk",
@ -19,4 +22,19 @@ Merges several Gitea organizations' maven repositories to one path.
"LanguageUtilities"
]
}
```
## Additional steps
### Cargo ([sparse](https://doc.rust-lang.org/cargo/reference/registry-index.html#index-format))
Client checks first `/config.json`, which contains paths to API roots. Since each organization has its own config,
it should be manually redirected (by `nginx` etc.) to custom config which contains paths to wrapper
instead of org registry:
```json
{
"dl": "https://cargo.landgrafhomyak.ru/api/v1/crates/",
"api": "https://cargo.landgrafhomyak.ru/",
"auth-required": false
}
```