mirror of https://github.com/portainer/portainer
enable staticcheck. Fix some easy ones
parent
0b9407f0a6
commit
c80b8ff440
|
@ -8,6 +8,8 @@ linters:
|
||||||
- govet
|
- govet
|
||||||
- errorlint
|
- errorlint
|
||||||
- exportloopref
|
- exportloopref
|
||||||
|
- staticcheck
|
||||||
|
|
||||||
linters-settings:
|
linters-settings:
|
||||||
depguard:
|
depguard:
|
||||||
rules:
|
rules:
|
||||||
|
|
|
@ -3,11 +3,9 @@ package main
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"math/rand"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
portainer "github.com/portainer/portainer/api"
|
portainer "github.com/portainer/portainer/api"
|
||||||
"github.com/portainer/portainer/api/apikey"
|
"github.com/portainer/portainer/api/apikey"
|
||||||
|
@ -455,6 +453,9 @@ func buildServer(flags *portainer.CLIFlags) portainer.Server {
|
||||||
|
|
||||||
dockerClientFactory := initDockerClientFactory(digitalSignatureService, reverseTunnelService)
|
dockerClientFactory := initDockerClientFactory(digitalSignatureService, reverseTunnelService)
|
||||||
kubernetesClientFactory, err := initKubernetesClientFactory(digitalSignatureService, reverseTunnelService, dataStore, instanceID, *flags.AddrHTTPS, settings.UserSessionTimeout)
|
kubernetesClientFactory, err := initKubernetesClientFactory(digitalSignatureService, reverseTunnelService, dataStore, instanceID, *flags.AddrHTTPS, settings.UserSessionTimeout)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msg("failed initializing kubernetes client factory")
|
||||||
|
}
|
||||||
|
|
||||||
authorizationService := authorization.NewService(dataStore)
|
authorizationService := authorization.NewService(dataStore)
|
||||||
authorizationService.K8sClientFactory = kubernetesClientFactory
|
authorizationService.K8sClientFactory = kubernetesClientFactory
|
||||||
|
@ -631,8 +632,6 @@ func buildServer(flags *portainer.CLIFlags) portainer.Server {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rand.Seed(time.Now().UnixNano())
|
|
||||||
|
|
||||||
configureLogger()
|
configureLogger()
|
||||||
setLoggingMode("PRETTY")
|
setLoggingMode("PRETTY")
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,9 @@ func (m *Migrator) updateUsersAndRolesToDBVersion22() error {
|
||||||
endpointAdministratorRole.Authorizations = authorization.DefaultEndpointAuthorizationsForEndpointAdministratorRole()
|
endpointAdministratorRole.Authorizations = authorization.DefaultEndpointAuthorizationsForEndpointAdministratorRole()
|
||||||
|
|
||||||
err = m.roleService.Update(endpointAdministratorRole.ID, endpointAdministratorRole)
|
err = m.roleService.Update(endpointAdministratorRole.ID, endpointAdministratorRole)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
helpDeskRole, err := m.roleService.Read(portainer.RoleID(2))
|
helpDeskRole, err := m.roleService.Read(portainer.RoleID(2))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -65,6 +68,9 @@ func (m *Migrator) updateUsersAndRolesToDBVersion22() error {
|
||||||
helpDeskRole.Authorizations = authorization.DefaultEndpointAuthorizationsForHelpDeskRole(settings.AllowVolumeBrowserForRegularUsers)
|
helpDeskRole.Authorizations = authorization.DefaultEndpointAuthorizationsForHelpDeskRole(settings.AllowVolumeBrowserForRegularUsers)
|
||||||
|
|
||||||
err = m.roleService.Update(helpDeskRole.ID, helpDeskRole)
|
err = m.roleService.Update(helpDeskRole.ID, helpDeskRole)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
standardUserRole, err := m.roleService.Read(portainer.RoleID(3))
|
standardUserRole, err := m.roleService.Read(portainer.RoleID(3))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -74,6 +80,9 @@ func (m *Migrator) updateUsersAndRolesToDBVersion22() error {
|
||||||
standardUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForStandardUserRole(settings.AllowVolumeBrowserForRegularUsers)
|
standardUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForStandardUserRole(settings.AllowVolumeBrowserForRegularUsers)
|
||||||
|
|
||||||
err = m.roleService.Update(standardUserRole.ID, standardUserRole)
|
err = m.roleService.Update(standardUserRole.ID, standardUserRole)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
readOnlyUserRole, err := m.roleService.Read(portainer.RoleID(4))
|
readOnlyUserRole, err := m.roleService.Read(portainer.RoleID(4))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -41,7 +41,7 @@ func Test_ClonePublicRepository_Shallow(t *testing.T) {
|
||||||
t.Logf("Cloning into %s", dir)
|
t.Logf("Cloning into %s", dir)
|
||||||
err := service.CloneRepository(dir, repositoryURL, referenceName, "", "", false)
|
err := service.CloneRepository(dir, repositoryURL, referenceName, "", "", false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 1, getCommitHistoryLength(t, err, dir), "cloned repo has incorrect depth")
|
assert.Equal(t, 1, getCommitHistoryLength(t, dir), "cloned repo has incorrect depth")
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_ClonePublicRepository_NoGitDirectory(t *testing.T) {
|
func Test_ClonePublicRepository_NoGitDirectory(t *testing.T) {
|
||||||
|
@ -76,7 +76,7 @@ func Test_cloneRepository(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 4, getCommitHistoryLength(t, err, dir), "cloned repo has incorrect depth")
|
assert.Equal(t, 4, getCommitHistoryLength(t, dir), "cloned repo has incorrect depth")
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_latestCommitID(t *testing.T) {
|
func Test_latestCommitID(t *testing.T) {
|
||||||
|
@ -91,7 +91,7 @@ func Test_latestCommitID(t *testing.T) {
|
||||||
assert.Equal(t, "68dcaa7bd452494043c64252ab90db0f98ecf8d2", id)
|
assert.Equal(t, "68dcaa7bd452494043c64252ab90db0f98ecf8d2", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCommitHistoryLength(t *testing.T, err error, dir string) int {
|
func getCommitHistoryLength(t *testing.T, dir string) int {
|
||||||
repo, err := git.PlainOpen(dir)
|
repo, err := git.PlainOpen(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("can't open a git repo at %s with error %v", dir, err)
|
t.Fatalf("can't open a git repo at %s with error %v", dir, err)
|
||||||
|
|
|
@ -200,7 +200,7 @@ func (handler *Handler) syncUserTeamsWithLDAPGroups(user *portainer.User, settin
|
||||||
|
|
||||||
func teamExists(teamName string, ldapGroups []string) bool {
|
func teamExists(teamName string, ldapGroups []string) bool {
|
||||||
for _, group := range ldapGroups {
|
for _, group := range ldapGroups {
|
||||||
if strings.ToLower(group) == strings.ToLower(teamName) {
|
if strings.EqualFold(group, teamName) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,11 @@ import (
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
const contextEndpoint = "endpoint"
|
// Note: context keys must be distinct types to prevent collisions. They are NOT key/value map's internally
|
||||||
|
// See: https://go.dev/blog/context#TOC_3.2.
|
||||||
|
type key int
|
||||||
|
|
||||||
|
const contextEndpoint key = 0
|
||||||
|
|
||||||
func WithEndpoint(endpointService dataservices.EndpointService, endpointIDParam string) mux.MiddlewareFunc {
|
func WithEndpoint(endpointService dataservices.EndpointService, endpointIDParam string) mux.MiddlewareFunc {
|
||||||
return func(next http.Handler) http.Handler {
|
return func(next http.Handler) http.Handler {
|
||||||
|
|
|
@ -344,6 +344,7 @@ func Test_apiKeyLookup(t *testing.T) {
|
||||||
req.Header.Add("x-api-key", rawAPIKey)
|
req.Header.Add("x-api-key", rawAPIKey)
|
||||||
|
|
||||||
token, err := bouncer.apiKeyLookup(req)
|
token, err := bouncer.apiKeyLookup(req)
|
||||||
|
is.NoError(err)
|
||||||
|
|
||||||
expectedToken := &portainer.TokenData{ID: user.ID, Username: user.Username, Role: portainer.StandardUserRole}
|
expectedToken := &portainer.TokenData{ID: user.ID, Username: user.Username, Role: portainer.StandardUserRole}
|
||||||
is.Equal(expectedToken, token)
|
is.Equal(expectedToken, token)
|
||||||
|
@ -358,6 +359,7 @@ func Test_apiKeyLookup(t *testing.T) {
|
||||||
req.Header.Add("x-api-key", rawAPIKey)
|
req.Header.Add("x-api-key", rawAPIKey)
|
||||||
|
|
||||||
token, err := bouncer.apiKeyLookup(req)
|
token, err := bouncer.apiKeyLookup(req)
|
||||||
|
is.NoError(err)
|
||||||
|
|
||||||
expectedToken := &portainer.TokenData{ID: user.ID, Username: user.Username, Role: portainer.StandardUserRole}
|
expectedToken := &portainer.TokenData{ID: user.ID, Username: user.Username, Role: portainer.StandardUserRole}
|
||||||
is.Equal(expectedToken, token)
|
is.Equal(expectedToken, token)
|
||||||
|
@ -372,6 +374,7 @@ func Test_apiKeyLookup(t *testing.T) {
|
||||||
req.Header.Add("x-api-key", rawAPIKey)
|
req.Header.Add("x-api-key", rawAPIKey)
|
||||||
|
|
||||||
token, err := bouncer.apiKeyLookup(req)
|
token, err := bouncer.apiKeyLookup(req)
|
||||||
|
is.NoError(err)
|
||||||
|
|
||||||
expectedToken := &portainer.TokenData{ID: user.ID, Username: user.Username, Role: portainer.StandardUserRole}
|
expectedToken := &portainer.TokenData{ID: user.ID, Username: user.Username, Role: portainer.StandardUserRole}
|
||||||
is.Equal(expectedToken, token)
|
is.Equal(expectedToken, token)
|
||||||
|
|
|
@ -242,6 +242,10 @@ func (factory *ClientFactory) buildEdgeConfig(endpoint *portainer.Endpoint) (*re
|
||||||
}
|
}
|
||||||
|
|
||||||
signature, err := factory.signatureService.CreateSignature(portainer.PortainerAgentSignatureMessage)
|
signature, err := factory.signatureService.CreateSignature(portainer.PortainerAgentSignatureMessage)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
config.Insecure = true
|
config.Insecure = true
|
||||||
config.QPS = DefaultKubeClientQPS
|
config.QPS = DefaultKubeClientQPS
|
||||||
config.Burst = DefaultKubeClientBurst
|
config.Burst = DefaultKubeClientBurst
|
||||||
|
@ -257,32 +261,6 @@ func (factory *ClientFactory) buildEdgeConfig(endpoint *portainer.Endpoint) (*re
|
||||||
return config, nil
|
return config, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (factory *ClientFactory) createRemoteClient(endpointURL string) (*kubernetes.Clientset, error) {
|
|
||||||
signature, err := factory.signatureService.CreateSignature(portainer.PortainerAgentSignatureMessage)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
config, err := clientcmd.BuildConfigFromFlags(endpointURL, "")
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
config.Insecure = true
|
|
||||||
config.QPS = DefaultKubeClientQPS
|
|
||||||
config.Burst = DefaultKubeClientBurst
|
|
||||||
|
|
||||||
config.Wrap(func(rt http.RoundTripper) http.RoundTripper {
|
|
||||||
return &agentHeaderRoundTripper{
|
|
||||||
signatureHeader: signature,
|
|
||||||
publicKeyHeader: factory.signatureService.EncodedPublicKey(),
|
|
||||||
roundTripper: rt,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return kubernetes.NewForConfig(config)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (factory *ClientFactory) CreateRemoteMetricsClient(endpoint *portainer.Endpoint) (*metricsv.Clientset, error) {
|
func (factory *ClientFactory) CreateRemoteMetricsClient(endpoint *portainer.Endpoint) (*metricsv.Clientset, error) {
|
||||||
config, err := factory.CreateConfig(endpoint)
|
config, err := factory.CreateConfig(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -198,7 +198,6 @@ func (d *stackDeployer) remoteStack(stack *portainer.Stack, endpoint *portainer.
|
||||||
Str("cmd", strings.Join(cmd, " ")).
|
Str("cmd", strings.Join(cmd, " ")).
|
||||||
Msg("running unpacker")
|
Msg("running unpacker")
|
||||||
|
|
||||||
rand.Seed(time.Now().UnixNano())
|
|
||||||
unpackerContainer, err := cli.ContainerCreate(ctx, &container.Config{
|
unpackerContainer, err := cli.ContainerCreate(ctx, &container.Config{
|
||||||
Image: image,
|
Image: image,
|
||||||
Cmd: cmd,
|
Cmd: cmd,
|
||||||
|
|
Loading…
Reference in New Issue