-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: move updaters and notifier into ext
- Loading branch information
1 parent
f66103c
commit 4a99037
Showing
31 changed files
with
487 additions
and
392 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
// Copyright 2017 clair 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. | ||
|
||
// Package notification fetches notifications from the database and informs the | ||
// specified remote handler about their existences, inviting the third party to | ||
// actively query the API about it. | ||
|
||
// Package notification exposes functions to dynamically register methods to | ||
// deliver notifications from the Clair database. | ||
package notification | ||
|
||
import ( | ||
"github.com/coreos/pkg/capnslog" | ||
|
||
"github.com/coreos/clair/config" | ||
"github.com/coreos/clair/database" | ||
) | ||
|
||
var ( | ||
log = capnslog.NewPackageLogger("github.com/coreos/clair", "ext/notification") | ||
|
||
// Senders is the list of registered Senders. | ||
Senders = make(map[string]Sender) | ||
) | ||
|
||
// Sender represents anything that can transmit notifications. | ||
type Sender interface { | ||
// Configure attempts to initialize the notifier with the provided configuration. | ||
// It returns whether the notifier is enabled or not. | ||
Configure(*config.NotifierConfig) (bool, error) | ||
|
||
// Send informs the existence of the specified notification. | ||
Send(notification database.VulnerabilityNotification) error | ||
} | ||
|
||
// RegisterSender makes a Sender available by the provided name. | ||
// | ||
// If RegisterSender is called twice with the same name, the name is blank, or | ||
// if the provided Sender is nil, this function panics. | ||
func RegisterSender(name string, s Sender) { | ||
if name == "" { | ||
panic("notification: could not register a Sender with an empty name") | ||
} | ||
|
||
if s == nil { | ||
panic("notification: could not register a nil Sender") | ||
} | ||
|
||
if _, dup := Senders[name]; dup { | ||
panic("notification: RegisterSender called twice for " + name) | ||
} | ||
|
||
Senders[name] = s | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
// Copyright 2017 clair 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. | ||
|
||
// Package vulnmdsrc exposes functions to dynamically register vulnerability | ||
// metadata sources used to update a Clair database. | ||
package vulnmdsrc | ||
|
||
import ( | ||
"github.com/coreos/clair/database" | ||
"github.com/coreos/clair/utils/types" | ||
) | ||
|
||
// Appenders is the list of registered Appenders. | ||
var Appenders = make(map[string]Appender) | ||
|
||
// AppendFunc is the type of a callback provided to an Appender. | ||
type AppendFunc func(metadataKey string, metadata interface{}, severity types.Priority) | ||
|
||
// Appender represents anything that can fetch vulnerability metadata and | ||
// append it to a Vulnerability. | ||
type Appender interface { | ||
// BuildCache loads metadata into memory such that it can be quickly accessed | ||
// for future calls to Append. | ||
BuildCache(database.Datastore) error | ||
|
||
// AddMetadata adds metadata to the given database.Vulnerability. | ||
// It is expected that the fetcher uses .Lock.Lock() when manipulating the Metadata map. | ||
// Append | ||
Append(vulnName string, callback AppendFunc) error | ||
|
||
// PurgeCache deallocates metadata from memory after all calls to Append are | ||
// finished. | ||
PurgeCache() | ||
|
||
// Clean deletes any allocated resources. | ||
// It is invoked when Clair stops. | ||
Clean() | ||
} | ||
|
||
// RegisterAppender makes an Appender available by the provided name. | ||
// If Register is called twice with the same name or if driver is nil, | ||
// it panics. | ||
func RegisterAppender(name string, a Appender) { | ||
if name == "" { | ||
panic("updater: could not register an Appender with an empty name") | ||
} | ||
|
||
if a == nil { | ||
panic("vulnmdsrc: could not register a nil Appender") | ||
} | ||
|
||
if _, dup := Appenders[name]; dup { | ||
panic("vulnmdsrc: RegisterAppender called twice for " + name) | ||
} | ||
|
||
Appenders[name] = a | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2017 clair 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. | ||
|
||
package nvd | ||
|
||
import "io" | ||
|
||
// NestedReadCloser wraps an io.Reader and implements io.ReadCloser by closing every embed | ||
// io.ReadCloser. | ||
// It allows chaining io.ReadCloser together and still keep the ability to close them all in a | ||
// simple manner. | ||
type NestedReadCloser struct { | ||
io.Reader | ||
NestedReadClosers []io.ReadCloser | ||
} | ||
|
||
// Close closes the gzip.Reader and the underlying io.ReadCloser. | ||
func (nrc *NestedReadCloser) Close() { | ||
for _, nestedReadCloser := range nrc.NestedReadClosers { | ||
nestedReadCloser.Close() | ||
} | ||
} |
Oops, something went wrong.