| 1234567891011121314151617181920212223242526272829303132333435363738 |
- package dataurlfetcher
- import (
- "context"
- "strings"
- "github.com/vincent-petithory/dataurl"
- "github.com/v2fly/v2ray-core/v5/app/subscription"
- "github.com/v2fly/v2ray-core/v5/app/subscription/documentfetcher"
- "github.com/v2fly/v2ray-core/v5/common"
- )
- //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
- func newDataURLFetcher() *dataURLFetcher {
- return &dataURLFetcher{}
- }
- func init() {
- common.Must(documentfetcher.RegisterFetcher("dataurl", newDataURLFetcher()))
- }
- type dataURLFetcher struct{}
- func (d *dataURLFetcher) DownloadDocument(ctx context.Context, source *subscription.ImportSource, opts ...documentfetcher.FetcherOptions) ([]byte, error) {
- dataURL, err := dataurl.DecodeString(source.Url)
- 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") {
- return nil, newError("unsupported media subtype: ", dataURL.MediaType.Subtype)
- }
- return []byte(source.Url), nil
- }
|