2020-10-26 23:22:13 +03:00
|
|
|
// Copyright 2020 Security Scorecard Authors
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
2020-10-09 17:47:59 +03:00
|
|
|
package checker
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2021-06-17 23:21:32 +03:00
|
|
|
|
2022-01-12 22:49:01 +03:00
|
|
|
"github.com/ossf/scorecard/v4/clients"
|
2020-10-09 17:47:59 +03:00
|
|
|
)
|
|
|
|
|
2021-08-01 01:31:34 +03:00
|
|
|
// CheckRequest struct encapsulates all data to be passed into a CheckFn.
|
2021-04-10 15:26:56 +03:00
|
|
|
type CheckRequest struct {
|
2022-01-03 04:43:38 +03:00
|
|
|
Ctx context.Context
|
|
|
|
RepoClient clients.RepoClient
|
|
|
|
CIIClient clients.CIIBestPracticesClient
|
|
|
|
OssFuzzRepo clients.RepoClient
|
|
|
|
Dlogger DetailLogger
|
|
|
|
Repo clients.Repo
|
|
|
|
VulnerabilitiesClient clients.VulnerabilitiesClient
|
2021-12-15 00:10:24 +03:00
|
|
|
// UPGRADEv6: return raw results instead of scores.
|
2022-02-08 03:49:49 +03:00
|
|
|
RawResults *RawResults
|
|
|
|
RequiredTypes []RequestType
|
|
|
|
}
|
|
|
|
|
|
|
|
// RequestType identifies special requirements/attributes that need to be supported by checks.
|
|
|
|
type RequestType int
|
|
|
|
|
|
|
|
const (
|
|
|
|
// FileBased request types require checks to run solely on file-content.
|
|
|
|
FileBased RequestType = iota
|
2022-02-08 06:03:36 +03:00
|
|
|
// CommitBased request types require checks to run on non-HEAD commit content.
|
|
|
|
CommitBased
|
2022-02-08 03:49:49 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
// ListUnsupported returns []RequestType not in `supported` and are `required`.
|
|
|
|
func ListUnsupported(required, supported []RequestType) []RequestType {
|
|
|
|
var ret []RequestType
|
|
|
|
for _, t := range required {
|
|
|
|
if !contains(supported, t) {
|
|
|
|
ret = append(ret, t)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ret
|
|
|
|
}
|
|
|
|
|
|
|
|
func contains(in []RequestType, exists RequestType) bool {
|
|
|
|
for _, r := range in {
|
|
|
|
if r == exists {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
2020-10-13 18:35:55 +03:00
|
|
|
}
|