Skip to content

Commit

Permalink
applied JRA's suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
Nedim Akar committed Oct 31, 2023
1 parent f6c0744 commit 18325a5
Show file tree
Hide file tree
Showing 10 changed files with 69 additions and 45 deletions.
21 changes: 14 additions & 7 deletions src/jetstream/cnsi.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"crypto/x509"
"encoding/json"
"errors"
"fmt"
"net/http"
"net/url"
Expand All @@ -23,15 +24,21 @@ import (
const dbReferenceError = "unable to establish a database reference: '%v'"

func isSSLRelatedError(err error) (bool, string) {
if urlErr, ok := err.(*url.Error); ok {
if x509Err, ok := urlErr.Err.(x509.UnknownAuthorityError); ok {
return true, x509Err.Error()
var urlError *url.Error
if errors.As(err, &urlError) {
var (
certInvalidError *x509.CertificateInvalidError
unknownAuthorityError *x509.UnknownAuthorityError
hostnameError *x509.HostnameError
)
if errors.As(urlError.Err, unknownAuthorityError) {
return true, unknownAuthorityError.Error()
}
if x509Err, ok := urlErr.Err.(x509.HostnameError); ok {
return true, x509Err.Error()
if errors.As(urlError.Err, hostnameError) {
return true, hostnameError.Error()
}
if x509Err, ok := urlErr.Err.(x509.CertificateInvalidError); ok {
return true, x509Err.Error()
if errors.As(urlError.Err, certInvalidError) {
return true, certInvalidError.Error()
}
}
return false, ""
Expand Down
15 changes: 0 additions & 15 deletions src/jetstream/custom_error/custom_error.go

This file was deleted.

7 changes: 7 additions & 0 deletions src/jetstream/custom_errors/constants/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package constants

const (
ERR_GOOSE_DB_NO_DATABASE_VERSIONS_FOUND = "pgsql_goosedb: no database versions found"
ERR_GOOSE_DB_NO_SUCH_TABLE = "pgsql_goosedb: no such table"
ERR_GOOSE_DB_FAILED_GETTING_CURRENT_DATABASE_VERSION = "pgsql_goosedb: error trying to get current database version: %w"
)
26 changes: 26 additions & 0 deletions src/jetstream/custom_errors/custom_errors.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package custom_errors

import (
"fmt"

"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error/constants"
)

type GooseDBNoDatabaseVersionsFoundError struct{}

func (e GooseDBNoDatabaseVersionsFoundError) Error() string {
return constants.ERR_GOOSE_DB_NO_DATABASE_VERSIONS_FOUND
}

type GooseDBNoSuchTableError struct{}

func (e GooseDBNoSuchTableError) Error() string {
return constants.ERR_GOOSE_DB_NO_SUCH_TABLE
}

func ErrGettingCurrentVersion(err error) error {
return fmt.Errorf(constants.ERR_GOOSE_DB_FAILED_GETTING_CURRENT_DATABASE_VERSION, err)
}

var ErrNoDatabaseVersionsFound = GooseDBNoDatabaseVersionsFoundError{}
var ErrNoSuchTable = GooseDBNoSuchTableError{}
6 changes: 3 additions & 3 deletions src/jetstream/datastore/datastore.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"strings"
"time"

"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors"

goosedbversion "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/goose-db-version"
"github.com/govau/cf-common/env"
Expand Down Expand Up @@ -304,9 +304,9 @@ func WaitForMigrations(db *sql.DB) error {
databaseVersionRec, err := dbVersionRepo.GetCurrentVersion()
if err != nil {
var errorMsg = err.Error()
if strings.Contains(err.Error(), custom_error.ERR_NO_SUCH_TABLE) {
if errors.Is(err, custom_errors.ErrNoSuchTable) {
errorMsg = "Waiting for versions table to be created"
} else if errors.Is(err, custom_error.ErrNoDatabaseVersionsFound) {
} else if errors.Is(err, custom_errors.ErrNoDatabaseVersionsFound) {
errorMsg = "Versions table is empty - waiting for migrations"
}
log.Infof("Database schema check: %s", errorMsg)
Expand Down
4 changes: 1 addition & 3 deletions src/jetstream/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import (
"strings"
"time"

"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error"

"github.com/gorilla/context"
"github.com/govau/cf-common/env"
"github.com/labstack/echo/v4"
Expand Down Expand Up @@ -44,7 +42,7 @@ func handleSessionError(config api.PortalConfig, c echo.Context, err error, doNo

var netOpErr *net.OpError
if errors.As(err, &netOpErr) {
if netOpErr.Op == custom_error.ERR_DIAL_TCP {
if netOpErr.Op == "dial" && netOpErr.Net == "tcp" {
return api.NewHTTPShadowError(
http.StatusServiceUnavailable,
"Service is currently unavailable",
Expand Down
5 changes: 2 additions & 3 deletions src/jetstream/plugins/kubernetes/main.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package kubernetes

import (
"crypto/x509"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"strings"

"errors"

"github.com/cloudfoundry-incubator/stratos/src/jetstream/api"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error"
"github.com/labstack/echo/v4"
log "github.com/sirupsen/logrus"

Expand Down Expand Up @@ -289,7 +288,7 @@ func (c *KubernetesSpecification) RequiresCert(ec echo.Context) error {
Message string
}
if err != nil {
if strings.Contains(err.Error(), custom_error.ERR_X509_CERTIFICATE) {
if errors.Is(err, new(x509.CertificateInvalidError)) {
response.Status = http.StatusOK
response.Required = true
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ package goosedbversion

import (
"database/sql"
"errors"
"fmt"
"strings"

log "github.com/sirupsen/logrus"

"github.com/cloudfoundry-incubator/stratos/src/jetstream/api"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors"
)

const (
Expand Down Expand Up @@ -35,15 +37,15 @@ func (p *PostgresGooseDBVersionRepository) GetCurrentVersion() (api.GooseDBVersi

err := p.db.QueryRow(getCurrentVersion).Scan(&dbVersion.VersionID)

switch {
case err == sql.ErrNoRows:
return api.GooseDBVersionRecord{}, custom_error.ErrNoDatabaseVersionsFound
case err != nil:
return api.GooseDBVersionRecord{}, fmt.Errorf("Error trying to get current database version: %v", err)
default:
// do nothing
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return api.GooseDBVersionRecord{}, custom_errors.ErrNoDatabaseVersionsFound
} else if strings.Contains(err.Error(), "no such table") {
return api.GooseDBVersionRecord{}, custom_errors.ErrNoSuchTable
} else {
return api.GooseDBVersionRecord{}, custom_errors.ErrGettingCurrentVersion(err)
}
}

return *dbVersion, nil
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
. "github.com/smartystreets/goconvey/convey"

"github.com/cloudfoundry-incubator/stratos/src/jetstream/api"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors"
)

func TestPgSQLGooseDB(t *testing.T) {
Expand Down Expand Up @@ -72,7 +72,7 @@ func TestPgSQLGooseDB(t *testing.T) {
Convey("there should be an error", func() {
repository, _ := NewPostgresGooseDBVersionRepository(db)
_, err := repository.GetCurrentVersion()
So(err, ShouldResemble, custom_error.ErrNoDatabaseVersionsFound)
So(err, ShouldResemble, custom_errors.ErrNoDatabaseVersionsFound)

dberr := mock.ExpectationsWereMet()
So(dberr, ShouldBeNil)
Expand Down
6 changes: 3 additions & 3 deletions src/jetstream/setup_console.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package main

import (
"crypto/x509"
"errors"
"fmt"
"net/http"
"net/url"
"regexp"
"strconv"
"strings"

"github.com/govau/cf-common/env"
"github.com/labstack/echo/v4"
Expand All @@ -17,7 +17,6 @@ import (
"github.com/cloudfoundry-incubator/stratos/src/jetstream/api"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_error"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/console_config"
"github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers"
)
Expand Down Expand Up @@ -94,7 +93,8 @@ func (p *portalProxy) setupGetAvailableScopes(c echo.Context) error {
errInfo, ok := err.(api.ErrHTTPRequest)
if ok {
if errInfo.Status == 0 {
if strings.Contains(errInfo.Error(), custom_error.ERR_X509_CERTIFICATE) {
var certError *x509.CertificateInvalidError
if errors.As(err, certError) {
return api.NewHTTPShadowError(
http.StatusBadRequest,
"Could not connect to the UAA - Certificate error - check Skip SSL validation setting",
Expand Down

0 comments on commit 18325a5

Please sign in to comment.