Skip to content

Commit 7b4328a

Browse files
committed
feat: Added Google Credentials, Env, TLS and filesystem loader functions
* Added Google Credentials, Env, TLS and filesystem loader functions * Added .gitignore file * Forked from 'github.com/pixel-plaza-dev/uru-databases-2-go-service-common'
1 parent 5a2f88b commit 7b4328a

File tree

18 files changed

+453
-0
lines changed

18 files changed

+453
-0
lines changed

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# IDE folders
2+
/.idea
3+
/.vscode
4+
5+
# Environment variables
6+
/**/*.env
7+
8+
# Executable files
9+
/**/*.exe
10+
11+
# Private and public keys
12+
/**/*.ed
13+
/**/*.pub
14+
/**/*.pem
15+
16+
# Commands
17+
/**/*.cmd
18+
/**/*.sh
19+
/**/*.bat

cloud/gcloud/constants.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package gcloud
2+
3+
type AuthorizationIdx int
4+
5+
const (
6+
TokenIdx AuthorizationIdx = iota
7+
)
8+
9+
// Int returns the integer value of the index
10+
func (i AuthorizationIdx) Int() int {
11+
return int(i)
12+
}
13+
14+
const (
15+
// AuthorizationMetadataKey is the key of the authorization metadata
16+
AuthorizationMetadataKey = "x-serverless-authorization"
17+
)

cloud/gcloud/errors.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package gcloud
2+
3+
import "errors"
4+
5+
var (
6+
NilGoogleCredentialsError = errors.New("google credentials cannot be nil")
7+
NilTokenSourceError = errors.New("token source cannot be nil")
8+
FailedToLoadGoogleCredentialsError = errors.New("failed to load google credentials")
9+
FailedToCreateTokenSourceError = errors.New("failed to create token source")
10+
)

cloud/gcloud/loader.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package gcloud
2+
3+
import (
4+
"context"
5+
"golang.org/x/oauth2/google"
6+
"google.golang.org/api/idtoken"
7+
"google.golang.org/api/option"
8+
"google.golang.org/grpc/credentials/oauth"
9+
)
10+
11+
// LoadGoogleCredentials loads the Google credentials
12+
func LoadGoogleCredentials(ctx context.Context) (*google.Credentials, error) {
13+
credentials, err := google.FindDefaultCredentials(ctx)
14+
if err != nil {
15+
return nil, FailedToLoadGoogleCredentialsError
16+
}
17+
return credentials, nil
18+
}
19+
20+
// LoadServiceAccountCredentials loads the service account credentials
21+
func LoadServiceAccountCredentials(
22+
ctx context.Context, url string, credentials *google.Credentials,
23+
) (*oauth.TokenSource, error) {
24+
// Check if the credentials are nil
25+
if credentials == nil {
26+
return nil, NilGoogleCredentialsError
27+
}
28+
29+
// Create a new token source
30+
tokenSource, err := idtoken.NewTokenSource(
31+
ctx,
32+
url,
33+
option.WithCredentials(credentials),
34+
)
35+
if err != nil {
36+
return nil, FailedToCreateTokenSourceError
37+
}
38+
39+
return &oauth.TokenSource{TokenSource: tokenSource}, nil
40+
}

cloud/gcloud/logger.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package gcloud
2+
3+
import (
4+
gologger "github.com/ralvarezdev/go-logger"
5+
gologgerstatus "github.com/ralvarezdev/go-logger/status"
6+
"google.golang.org/grpc/credentials/oauth"
7+
)
8+
9+
// Logger is the logger for Google Cloud
10+
type Logger struct {
11+
logger gologger.Logger
12+
}
13+
14+
// NewLogger is the logger for Google Cloud
15+
func NewLogger(logger gologger.Logger) (*Logger, error) {
16+
// Check if the logger is nil
17+
if logger == nil {
18+
return nil, gologger.NilLoggerError
19+
}
20+
21+
return &Logger{logger: logger}, nil
22+
}
23+
24+
// LoadedTokenSource logs the loaded token source
25+
func (l *Logger) LoadedTokenSource(tokenSource *oauth.TokenSource) {
26+
// Check if the token source is nil
27+
if tokenSource == nil {
28+
l.logger.LogError(gologger.NewLogError("failed to load token source", nil, NilTokenSourceError))
29+
return
30+
}
31+
32+
// Get the access token from the token source
33+
token, err := tokenSource.Token()
34+
if err != nil {
35+
l.logger.LogError(gologger.NewLogError("failed to load token source", nil, err))
36+
return
37+
}
38+
39+
l.logger.LogMessage(
40+
gologger.NewLogMessage(
41+
"loaded token source",
42+
gologgerstatus.StatusDebug,
43+
nil,
44+
token.AccessToken,
45+
),
46+
)
47+
}

env/errors.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package env
2+
3+
import "errors"
4+
5+
var (
6+
EnvironmentVariableNotFoundError = "environment variable not found: %v"
7+
FailedToLoadEnvironmentVariablesError = errors.New("failed to load environment variables")
8+
)

env/loader.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package env
2+
3+
import (
4+
"fmt"
5+
"os"
6+
)
7+
8+
// LoadVariable load variable from environment variables
9+
func LoadVariable(key string) (uri string, err error) {
10+
// Get environment variable
11+
variable, exists := os.LookupEnv(key)
12+
if !exists {
13+
return "", fmt.Errorf(EnvironmentVariableNotFoundError, key)
14+
}
15+
return variable, nil
16+
}

env/logger.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package env
2+
3+
import (
4+
gologger "github.com/ralvarezdev/go-logger"
5+
gologgerstatus "github.com/ralvarezdev/go-logger/status"
6+
)
7+
8+
// Logger is the environment logger
9+
type Logger struct {
10+
logger gologger.Logger
11+
}
12+
13+
// NewLogger creates a new environment logger
14+
func NewLogger(logger gologger.Logger) (*Logger, error) {
15+
// Check if the logger is nil
16+
if logger == nil {
17+
return nil, gologger.NilLoggerError
18+
}
19+
20+
return &Logger{logger: logger}, nil
21+
}
22+
23+
// EnvironmentVariableLoaded logs a message when an environment variable is loaded
24+
func (l *Logger) EnvironmentVariableLoaded(variablesName ...string) {
25+
l.logger.LogMessage(
26+
gologger.NewLogMessage(
27+
"environment variable loaded",
28+
gologgerstatus.StatusDebug,
29+
nil,
30+
variablesName...,
31+
),
32+
)
33+
}

filesystem/errors.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package filesystem
2+
3+
var (
4+
UnableToReadFileError = "unable to read file: %v"
5+
)

filesystem/read_files.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package filesystem
2+
3+
import (
4+
"os"
5+
)
6+
7+
// ReadFile reads the file from the given path
8+
func ReadFile(path string) ([]byte, error) {
9+
file, err := os.ReadFile(path)
10+
if err != nil {
11+
return nil, UnableToReadFileError
12+
}
13+
return file, nil
14+
}

0 commit comments

Comments
 (0)