| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package dataurlsingle
- import (
- "bytes"
- "strings"
- "github.com/vincent-petithory/dataurl"
- "github.com/v2fly/v2ray-core/v5/app/subscription/containers"
- "github.com/v2fly/v2ray-core/v5/common"
- )
- //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
- func newSingularDataURLParser() containers.SubscriptionContainerDocumentParser {
- return &parser{}
- }
- type parser struct{}
- func (p parser) ParseSubscriptionContainerDocument(rawConfig []byte) (*containers.Container, error) {
- dataURL, err := dataurl.Decode(bytes.NewReader(rawConfig))
- if err != nil {
- return nil, newError("unable to decode dataURL").Base(err)
- }
- if dataURL.MediaType.Type != "application" {
- return nil, newError("unsupported media type: ", dataURL.MediaType.Type)
- }
- if !strings.HasPrefix(dataURL.MediaType.Subtype, "vnd.v2ray.subscription-singular") {
- return nil, newError("unsupported media subtype: ", dataURL.MediaType.Subtype)
- }
- result := &containers.Container{}
- result.Kind = "DataURLSingle"
- result.Metadata = make(map[string]string)
- result.ServerSpecs = append(result.ServerSpecs, containers.UnparsedServerConf{
- KindHint: "",
- Content: dataURL.Data,
- })
- return result, nil
- }
- func init() {
- common.Must(containers.RegisterParser("DataURLSingle", newSingularDataURLParser()))
- }
|