代码拉取完成,页面将自动刷新
// Package maven
// @Link https://gitee.com/linngc/central-mirror
// @Copyright Copyright (c) 2024 central-mirror CLI
// @Author linngc
// @License
package maven
import (
"fmt"
cacheModel "gitee.com/linngc/central-mirror/contrib/container/core/memorycache/implement/model"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"io/ioutil"
"path"
"strconv"
"strings"
)
// Get maven pom.xml get/head请求时候入口
// 最终请求示例: http://127.0.0.1:10010/proxy/maven/public/org/springframework/boot/spring-boot/2.5.6/spring-boot-2.5.6.jar
// libName 示例 public
// @param jarPath 示例 org/springframework/boot/spring-boot/2.5.6/spring-boot-2.5.6.jar
func (c *MavenProxy) Get() (u *cacheModel.ObjectsInfo, err error) {
r := g.RequestFromCtx(c.ctx)
g.Log().Debugf(c.ctx, "接口请求地址-->%v", r.Request.URL.Path)
libName := r.Get("libName").String() //仓库ID
moduleName := r.Get("moduleName").String() //jar包路径名称
repository, err := c.getMavenRepository(c.cfg, libName)
if err != nil {
return u, gerror.NewCode(gcode.CodeMissingConfiguration, err.Error())
}
if repository.Mode&4 != 4 {
return u, gerror.NewCode(gcode.CodeMissingConfiguration, "本地代理仓库不允许读取操作")
}
ext := path.Ext(moduleName)
if ext == "" && !strings.HasSuffix(moduleName, "/") {
r.Response.RedirectTo(r.RequestURI)
return u, nil
}
localPath := path.Join(repository.Id, moduleName)
//请求授权判断
if repository.Auth {
if err = c.generateHash(localPath); err != nil {
return u, gerror.NewCode(gcode.CodeInternalError, fmt.Sprintf("hash值校验不正确,请检查: %v", err))
}
}
u, err = c.Com.GetOrAdd(fmt.Sprintf("%s%s", c.mirror, moduleName), localPath)
g.Log().Debugf(c.ctx, "应答请求文件uri:'%s'", localPath)
rawPath := fmt.Sprintf("/%s%s", repository.Id, moduleName)
g.Log().Debugf(c.ctx, "应答请求文件uri:'%s'", localPath)
r.Request.URL.RawPath = rawPath
r.Request.URL.Path = rawPath
return
}
// DeployMapping maven pom.xml put请求时候入口
// 最终请求示例: http://127.0.0.1:10010/proxy/maven/public/org/springframework/boot/spring-boot/2.5.6/spring-boot-2.5.6.jar
// @param libName 示例 public
// @param moduleName 示例 org/springframework/boot/spring-boot/2.5.6/spring-boot-2.5.6.jar
func (c *MavenProxy) DeployMapping() (u *cacheModel.ObjectsInfo, err error) {
r := g.RequestFromCtx(c.ctx)
g.Log().Debugf(c.ctx, "接口请求地址-->%v", r.Request.URL.Path)
libName := r.Get("libName").String() //仓库ID
moduleName := r.Get("moduleName").String() //jar包路径名称
repository, err := c.getMavenRepository(c.cfg, libName)
localPath := path.Join(repository.Id, moduleName)
//请求授权判断
if repository.Auth {
if err = c.generateHash(localPath); err != nil {
return u, gerror.NewCode(gcode.CodeInternalError, fmt.Sprintf("hash值校验不正确,请检查: %v", err))
}
}
length, err1 := strconv.Atoi(r.Header.Get("Content-Length"))
data, err2 := ioutil.ReadAll(r.Request.Body)
if err1 != nil || err2 != nil || length <= 0 || length != len(data) {
return u, gerror.NewCode(gcode.CodeInvalidRequest, fmt.Sprintf("读取数据出错-->%v\n%v", err1, err2))
}
if err != nil {
return u, gerror.NewCode(gcode.CodeMissingConfiguration, err.Error())
}
if repository.Mode&2 != 2 {
return u, gerror.NewCode(gcode.CodeNotAuthorized, "本地代理仓库不支持写入操作")
}
if err := c.dial.Service.PutByObject(c.ctx, localPath, data); err == nil {
// tip 使用marshal.ObjectsInfo 数据组装
return c.dial.Service.GetObjectsInfo(localPath, data), nil
}
return u, gerror.NewCode(gcode.CodeOperationFailed, fmt.Sprintf("保存写入文件出错: %v\n", err))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。