Skip to content

Commit be2da5f

Browse files
committed
feat: add ParserConfig.DisableExternalChecks
1 parent e709259 commit be2da5f

File tree

2 files changed

+46
-21
lines changed

2 files changed

+46
-21
lines changed

fields.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,11 @@ func validateFieldsV0(publiccode PublicCode, parser Parser, network bool) error
5050
if publiccodev0.Logo != "" {
5151
if _, err := isRelativePathOrURL(publiccodev0.Logo, "logo"); err != nil {
5252
vr = append(vr, err)
53-
} else if validLogo, err := parser.validLogo(toCodeHostingURL(publiccodev0.Logo, parser.currentBaseURL), network); !validLogo {
54-
vr = append(vr, newValidationError("logo", err.Error()))
53+
} else if !parser.disableExternalChecks {
54+
validLogo, err := parser.validLogo(toCodeHostingURL(publiccodev0.Logo, parser.currentBaseURL), network)
55+
if !validLogo {
56+
vr = append(vr, newValidationError("logo", err.Error()))
57+
}
5558
}
5659
}
5760

@@ -60,8 +63,11 @@ func validateFieldsV0(publiccode PublicCode, parser Parser, network bool) error
6063

6164
if _, err := isRelativePathOrURL(publiccodev0.MonochromeLogo, "monochromeLogo"); err != nil {
6265
vr = append(vr, err)
63-
} else if validLogo, err := parser.validLogo(toCodeHostingURL(publiccodev0.MonochromeLogo, parser.currentBaseURL), network); !validLogo {
64-
vr = append(vr, newValidationError("monochromeLogo", err.Error()))
66+
} else if !parser.disableExternalChecks {
67+
validLogo, err := parser.validLogo(toCodeHostingURL(publiccodev0.MonochromeLogo, parser.currentBaseURL), network)
68+
if !validLogo {
69+
vr = append(vr, newValidationError("monochromeLogo", err.Error()))
70+
}
6571
}
6672
}
6773

@@ -70,10 +76,13 @@ func validateFieldsV0(publiccode PublicCode, parser Parser, network bool) error
7076

7177
if _, err := isRelativePathOrURL(*publiccodev0.Legal.AuthorsFile, "legal.authorsFile"); err != nil {
7278
vr = append(vr, err)
73-
} else if exists, err := parser.fileExists(toCodeHostingURL(*publiccodev0.Legal.AuthorsFile, parser.currentBaseURL), network); !exists {
74-
u := toCodeHostingURL(*publiccodev0.Legal.AuthorsFile, parser.currentBaseURL)
79+
} else if !parser.disableExternalChecks {
80+
exists, err := parser.fileExists(toCodeHostingURL(*publiccodev0.Legal.AuthorsFile, parser.currentBaseURL), network)
81+
if !exists {
82+
u := toCodeHostingURL(*publiccodev0.Legal.AuthorsFile, parser.currentBaseURL)
7583

76-
vr = append(vr, newValidationError("legal.authorsFile", "'%s' does not exist: %s", urlutil.DisplayURL(&u), err.Error()))
84+
vr = append(vr, newValidationError("legal.authorsFile", "'%s' does not exist: %s", urlutil.DisplayURL(&u), err.Error()))
85+
}
7786
}
7887
}
7988

@@ -119,11 +128,14 @@ func validateFieldsV0(publiccode PublicCode, parser Parser, network bool) error
119128
keyName := fmt.Sprintf("description.%s.screenshots[%d]", lang, i)
120129
if _, err := isRelativePathOrURL(v, keyName); err != nil {
121130
vr = append(vr, err)
122-
} else if isImage, err := parser.isImageFile(toCodeHostingURL(v, parser.currentBaseURL), network); !isImage {
123-
vr = append(vr, newValidationError(
124-
keyName,
125-
"'%s' is not an image: %s", v, err.Error(),
126-
))
131+
} else if !parser.disableExternalChecks {
132+
isImage, err := parser.isImageFile(toCodeHostingURL(v, parser.currentBaseURL), network)
133+
if !isImage {
134+
vr = append(vr, newValidationError(
135+
keyName,
136+
"'%s' is not an image: %s", v, err.Error(),
137+
))
138+
}
127139
}
128140
}
129141

parser.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"unicode/utf8"
1717

1818
"github.com/alranel/go-vcsurl/v2"
19+
"github.com/docker/docker/daemon/config"
1920
"github.com/go-playground/locales/en"
2021
ut "github.com/go-playground/universal-translator"
2122
"github.com/go-playground/validator/v10"
@@ -26,10 +27,16 @@ import (
2627
)
2728

2829
type ParserConfig struct {
29-
// DisableNetwork disables all network tests (URL existence and Oembed). This
30+
// DisableNetwork disables all network tests (eg. URL existence). This
3031
// results in much faster parsing.
3132
DisableNetwork bool
3233

34+
// DisableExternalChecks disables all the additional checks on external files
35+
// and resources, local or remote (eg. existence, images actually being images, etc.).
36+
//
37+
// It implies DisableNetwork = true.
38+
DisableExternalChecks bool
39+
3340
// Domain will have domain specific settings, including basic auth if provided
3441
// this will avoid strong quota limit imposed by code hosting platform
3542
Domain Domain
@@ -45,11 +52,12 @@ type ParserConfig struct {
4552

4653
// Parser is a helper class for parsing publiccode.yml files.
4754
type Parser struct {
48-
disableNetwork bool
49-
domain Domain
50-
branch string
51-
baseURL *url.URL
52-
fileURL *url.URL
55+
disableNetwork bool
56+
disableExternalChecks bool
57+
domain Domain
58+
branch string
59+
baseURL *url.URL
60+
fileURL *url.URL
5361

5462
// This is the baseURL we'll try to compute and use between
5563
// Parse{,Stream)() calls.
@@ -70,10 +78,15 @@ type Domain struct {
7078
// NewParser initializes and returns a new Parser object following the settings in
7179
// ParserConfig.
7280
func NewParser(config ParserConfig) (*Parser, error) {
81+
if config.DisableExternalChecks {
82+
config.DisableNetwork = true
83+
}
84+
7385
parser := Parser{
74-
disableNetwork: config.DisableNetwork,
75-
domain: config.Domain,
76-
branch: config.Branch,
86+
disableNetwork: config.DisableNetwork,
87+
disableExternalChecks: config.DisableExternalChecks,
88+
domain: config.Domain,
89+
branch: config.Branch,
7790
}
7891

7992
if config.BaseURL != "" {

0 commit comments

Comments
 (0)