mirror of
https://github.com/v2rayA/v2rayA.git
synced 2026-10-29 05:26:43 +08:00
A custom latency test URL that http.NewRequest rejects made a spawned goroutine dereference nil and exit the process; the URL is validated before any goroutine starts and the request error is handled. A Shadowsocks link whose plugin field has no ";" panicked the parser, and from the automatic subscription update that goroutine was unrecovered; the parser accepts it and each updater recovers and logs. The DNS module took the last non-bootstrap upstream as the fallback while the template emitted upstreams in rule order with deduplication, so a catch-all rule anywhere but last, or one whose upstream was deduplicated, was not the fallback. The template names the fallback in a new default_upstream field and the module honours it. PUT /routingA stored the rules without regenerating the running core. It goes through ApplyCoreConfig like the other config writers, with restore on failure. UpdateSubscription logged a failed core reload and answered success; it returns the error. PATCH /subscription joins the mutation turn. Subscription fetching retried through a direct connection when the selected proxy failed, leaking the subscription URL; it returns the error. Subscription documents are capped at 32 MiB and downloaded assets at 256 MiB. PUT /gfwList validates the downloaded file as a geosite list before replacing the working one. The login handler took its one-at-a-time semaphore before reading the body, so a client sending headers and no body blocked every login; the body is read first and the HTTP server has header and idle timeouts. Share links: a VLESS or VMess link without a numeric port is rejected at parse time instead of producing port 0; an SSR link with a password that is not base64 is rejected instead of importing empty; the SIP003 path gets its leading slash prepended, not a trailing one appended. The macOS system proxy quoted shell arguments with strconv.Quote, which leaves $(...) live; values are single-quoted. The Windows system proxy snapshot includes AutoConfigURL, which teardown deleted and never restored. Latency test responses with a non-2xx status are closed. The version response carries the docker flag the GUI's port hints read.
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/v2rayA/v2rayA/common"
|
|
"github.com/v2rayA/v2rayA/db/configure"
|
|
"github.com/v2rayA/v2rayA/kernel/touch"
|
|
"github.com/v2rayA/v2rayA/server/service"
|
|
)
|
|
|
|
/*修改Remarks*/
|
|
func PatchSubscription(ctx *gin.Context) {
|
|
release, ok := beginMutation(ctx)
|
|
if !ok {
|
|
return
|
|
}
|
|
defer release()
|
|
|
|
var data struct {
|
|
Subscription touch.Subscription `json:"subscription"`
|
|
}
|
|
err := ctx.ShouldBindJSON(&data)
|
|
s := data.Subscription
|
|
index := s.ID - 1
|
|
if err != nil || s.TYPE != configure.SubscriptionType || index < 0 || index >= configure.GetLenSubscriptions() {
|
|
common.ResponseError(ctx, badRequest("subscription", "request body must be a subscription item with _type \"subscription\" and an existing positive id"))
|
|
return
|
|
}
|
|
err = service.ModifySubscriptionRemark(s)
|
|
if err != nil {
|
|
common.ResponseError(ctx, logError(err))
|
|
return
|
|
}
|
|
getTouch(ctx)
|
|
}
|
|
|
|
/*更新订阅*/
|
|
func PutSubscription(ctx *gin.Context) {
|
|
release, ok := beginMutation(ctx)
|
|
if !ok {
|
|
return
|
|
}
|
|
defer release()
|
|
|
|
var data configure.NodeRef
|
|
err := ctx.ShouldBindJSON(&data)
|
|
index := data.ID - 1
|
|
if err != nil || data.TYPE != configure.SubscriptionType || index < 0 || index >= configure.GetLenSubscriptions() {
|
|
common.ResponseError(ctx, badRequest("subscription", "request body must be a subscription item with _type \"subscription\" and an existing positive id"))
|
|
return
|
|
}
|
|
err = service.UpdateSubscription(index, false)
|
|
if err != nil {
|
|
common.ResponseError(ctx, logError(err))
|
|
return
|
|
}
|
|
getTouch(ctx)
|
|
}
|