Add zerotier route (#1098)
This commit is contained in:
parent
e0e9f97764
commit
eaca399ef9
3 changed files with 75 additions and 1 deletions
1
main.go
1
main.go
|
@ -150,6 +150,7 @@ func main() {
|
|||
"/v1/cloud",
|
||||
"/v1/recover",
|
||||
"/v1/other",
|
||||
"/v1/zt",
|
||||
route.V2APIPath,
|
||||
route.V2DocPath,
|
||||
route.V3FilePath,
|
||||
|
|
|
@ -40,7 +40,7 @@ func InitV1Router() *gin.Engine {
|
|||
})
|
||||
r.GET("/v1/recover/:type", v1.GetRecoverStorage)
|
||||
v1Group := r.Group("/v1")
|
||||
|
||||
r.GET("/v1/zt/*url", v1.AddZerotierToken)
|
||||
v1Group.Use(jwt.ExceptLocalhost(func() (*ecdsa.PublicKey, error) { return external.GetPublicKey(config.CommonInfo.RuntimePath) }))
|
||||
{
|
||||
|
||||
|
|
73
route/v1/zerotier.go
Normal file
73
route/v1/zerotier.go
Normal file
|
@ -0,0 +1,73 @@
|
|||
package v1
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func AddZerotierToken(c *gin.Context) {
|
||||
// Read the port number from the file
|
||||
w := c.Writer
|
||||
r := c.Request
|
||||
port, err := ioutil.ReadFile("/var/lib/zerotier-one/zerotier-one.port")
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Get the request path and remove "/zt"
|
||||
path := strings.TrimPrefix(r.URL.Path, "/v1/zt")
|
||||
fmt.Println(path)
|
||||
|
||||
// Build the target URL
|
||||
targetURL := fmt.Sprintf("http://localhost:%s%s", strings.TrimSpace(string(port)), path)
|
||||
|
||||
// Create a new request
|
||||
req, err := http.NewRequest(r.Method, targetURL, r.Body)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Add the X-ZT1-AUTH header
|
||||
authToken, err := ioutil.ReadFile("/var/lib/zerotier-one/authtoken.secret")
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
req.Header.Set("X-ZT1-AUTH", strings.TrimSpace(string(authToken)))
|
||||
|
||||
copyHeaders(req.Header, r.Header)
|
||||
|
||||
client := http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
copyHeaders(w.Header(), resp.Header)
|
||||
|
||||
respBody, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Return the response to the client
|
||||
w.WriteHeader(resp.StatusCode)
|
||||
w.Write(respBody)
|
||||
}
|
||||
|
||||
func copyHeaders(destination, source http.Header) {
|
||||
for key, values := range source {
|
||||
for _, value := range values {
|
||||
destination.Add(key, value)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue