77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
/*
|
|
Copyright © 2024 Laura Kalb <dev@lauka.net>
|
|
The code of this project is available under the MIT license. See the LICENSE file for more info.
|
|
*/
|
|
package webservice
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
func codeLilaNetworkReleases(w http.ResponseWriter, r *http.Request) {
|
|
namespace := r.URL.Query().Get("namespace")
|
|
requestIp := r.Header.Get("X-Forwarded-For")
|
|
userAgent := r.Header.Get("User-Agent")
|
|
|
|
var releaseInfo forgejoRepoReleaseApiResponse
|
|
|
|
if requestIp == "" {
|
|
requestIp = r.RemoteAddr
|
|
}
|
|
|
|
enableCors(&w)
|
|
|
|
if namespace == "" {
|
|
http.Error(w, "400 Bad Request", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// Target website URL
|
|
targetURL := "https://code.lila.network/api/v1/repos/" + namespace + "/releases/latest"
|
|
|
|
// Make the request to the target website
|
|
resp, err := http.Get(targetURL)
|
|
if err != nil {
|
|
log.Printf("Error fetching data from target website: %v", err)
|
|
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != 200 {
|
|
log.Printf("code.lila.network returned non-200 response: %v. Request-IP: %v, User-Agent: %v", resp.Status, requestIp, userAgent)
|
|
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// Read the response body
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Printf("Error reading response body: %v", err)
|
|
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
err = json.Unmarshal(body, &releaseInfo)
|
|
if err != nil {
|
|
log.Printf("Error reading response body: %v", err)
|
|
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte(releaseInfo.TagName))
|
|
}
|
|
|
|
func Run() error {
|
|
log.Println("starting webserver, listening on 0.0.0.0:8080")
|
|
http.HandleFunc("/__version__", baseVersion)
|
|
http.HandleFunc("/__heartbeat__", baseHeartbeat)
|
|
http.HandleFunc("/__lbheartbeat__", baseHeartbeat)
|
|
|
|
http.HandleFunc("/api/v1/code.lila.network/releases", codeLilaNetworkReleases)
|
|
return http.ListenAndServe(":8080", nil)
|
|
}
|