Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/go_modules/backend/backend-a65363…
Browse files Browse the repository at this point in the history
…64df
  • Loading branch information
garrettladley authored May 29, 2024
2 parents ee01c2e + e59f1fe commit 9e57052
Show file tree
Hide file tree
Showing 87 changed files with 3,417 additions and 20,347 deletions.
18 changes: 11 additions & 7 deletions backend/config/auth.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
package config

import m "github.com/garrettladley/mattress"
import (
"fmt"

m "github.com/garrettladley/mattress"
)

type AuthSettings struct {
AccessKey *m.Secret[string]
RefreshKey *m.Secret[string]
}

type intermediateAuthSettings struct {
AccessKey string `env:"ACCESS_KEY"`
RefreshKey string `env:"REFRESH_KEY"`
accessKey string `env:"ACCESS_KEY"`
refreshKey string `env:"REFRESH_KEY"`
}

func (i *intermediateAuthSettings) into() (*AuthSettings, error) {
accessKey, err := m.NewSecret(i.AccessKey)
accessKey, err := m.NewSecret(i.accessKey)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from access key: %s", err.Error())
}

refreshKey, err := m.NewSecret(i.RefreshKey)
refreshKey, err := m.NewSecret(i.refreshKey)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from refresh key: %s", err.Error())
}

return &AuthSettings{
Expand Down
34 changes: 19 additions & 15 deletions backend/config/aws.go
Original file line number Diff line number Diff line change
@@ -1,45 +1,49 @@
package config

import m "github.com/garrettladley/mattress"
import (
"fmt"

m "github.com/garrettladley/mattress"
)

type AWSSettings struct {
BucketName *m.Secret[string]
Id *m.Secret[string]
ID *m.Secret[string]
Secret *m.Secret[string]
Region *m.Secret[string]
}

type intermediateAWSSettings struct {
BucketName string `env:"BUCKET_NAME"`
Id string `env:"ID"`
Secret string `env:"SECRET"`
Region string `env:"REGION"`
bucketName string `env:"BUCKET_NAME"`
id string `env:"ID"`
secret string `env:"SECRET"`
region string `env:"REGION"`
}

func (i *intermediateAWSSettings) into() (*AWSSettings, error) {
bucketName, err := m.NewSecret(i.BucketName)
bucketName, err := m.NewSecret(i.bucketName)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from bucket name: %s", err.Error())
}

id, err := m.NewSecret(i.Id)
id, err := m.NewSecret(i.id)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from ID: %s", err.Error())
}

secret, err := m.NewSecret(i.Secret)
secret, err := m.NewSecret(i.secret)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from secret: %s", err.Error())
}

region, err := m.NewSecret(i.Region)
region, err := m.NewSecret(i.region)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from region: %s", err.Error())
}

return &AWSSettings{
BucketName: bucketName,
Id: id,
ID: id,
Secret: secret,
Region: region,
}, nil
Expand Down
13 changes: 8 additions & 5 deletions backend/config/calendar.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
package config

import "time"
import (
"fmt"
"time"
)

type CalendarSettings struct {
MaxTerminationDate time.Time
}

type intermediateCalendarSettings struct {
MaxTerminationDate string `env:"MAX_TERMINATION_DATE"`
maxTerminationDate string `env:"MAX_TERMINATION_DATE"`
}

func (i *intermediateCalendarSettings) into() (*CalendarSettings, error) {
t, err := time.Parse("01-02-2006", i.MaxTerminationDate)
maxTerminationDate, err := time.Parse("01-02-2006", i.maxTerminationDate)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to parse max termination date: %s", err.Error())
}

return &CalendarSettings{
MaxTerminationDate: t,
MaxTerminationDate: maxTerminationDate,
}, nil
}
6 changes: 4 additions & 2 deletions backend/config/config.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package config

import (
"fmt"

"github.com/caarlos0/env/v11"
"github.com/joho/godotenv"
)

func GetConfiguration(path string) (*Settings, error) {
err := godotenv.Load(path)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to load environment variables: %s", err.Error())
}

var intermediateSettings intermediateSettings
if err := env.Parse(&intermediateSettings); err != nil {
return nil, err
return nil, fmt.Errorf("failed to parse environment variables: %s", err.Error())
}

settings, err := intermediateSettings.into()
Expand Down
26 changes: 13 additions & 13 deletions backend/config/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,26 +43,26 @@ func (s *DatabaseSettings) PostgresConn() string {
}

type intermediateDatabaseSettings struct {
Username string `env:"USERNAME"`
Password string `env:"PASSWORD"`
Port uint `env:"PORT"`
Host string `env:"HOST"`
DatabaseName string `env:"NAME"`
RequireSSL bool `env:"REQUIRE_SSL"`
username string `env:"USERNAME"`
password string `env:"PASSWORD"`
port uint `env:"PORT"`
host string `env:"HOST"`
databaseName string `env:"NAME"`
requireSSL bool `env:"REQUIRE_SSL"`
}

func (i *intermediateDatabaseSettings) into() (*DatabaseSettings, error) {
password, err := m.NewSecret(i.Password)
password, err := m.NewSecret(i.password)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create secret from password: %s", err.Error())
}

return &DatabaseSettings{
Username: i.Username,
Username: i.username,
Password: password,
Port: i.Port,
Host: i.Host,
DatabaseName: i.DatabaseName,
RequireSSL: i.RequireSSL,
Port: i.port,
Host: i.host,
DatabaseName: i.databaseName,
RequireSSL: i.requireSSL,
}, nil
}
63 changes: 1 addition & 62 deletions backend/config/oauth.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package config

import (
"errors"

m "github.com/garrettladley/mattress"
)

Expand All @@ -20,66 +18,7 @@ type OAuthSettings struct {
Prompt string
}

type OAuthResources struct {
type OauthProviderSettings struct {
GoogleOAuthSettings *OAuthSettings
OutlookOAuthSettings *OAuthSettings
}

type GoogleOAuthSettings struct {
ClientId string `env:"GOOGLE_OAUTH_CLIENT_ID"`
ClientSecret string `env:"GOOGLE_OAUTH_CLIENT_SECRET"`
}

func (i *GoogleOAuthSettings) into() (*OAuthSettings, error) {
secretClientID, err := m.NewSecret(i.ClientId)
if err != nil {
return nil, errors.New("failed to create secret from client ID")
}

secretClientSecret, err := m.NewSecret(i.ClientSecret)
if err != nil {
return nil, errors.New("failed to create secret from client secret")
}

return &OAuthSettings{
BaseURL: "https://accounts.google.com/o/oauth2/v2",
TokenURL: "https://oauth2.googleapis.com",
ClientID: secretClientID,
ClientSecret: secretClientSecret,
Scopes: "https://www.googleapis.com/auth/calendar.events https://www.googleapis.com/auth/calendar.readonly",
ResponseType: "code",
RedirectURI: "http://localhost:3000",
IncludeGrantedScopes: "true",
AccessType: "offline",
Prompt: "consent",
}, nil
}

type OutlookOAuthSettings struct {
ClientId string `env:"OUTLOOK_OAUTH_CLIENT_ID"`
ClientSecret string `env:"OUTLOOK_OAUTH_CLIENT_SECRET"`
}

func (i *OutlookOAuthSettings) into() (*OAuthSettings, error) {
secretClientID, err := m.NewSecret(i.ClientId)
if err != nil {
return nil, errors.New("failed to create secret from client ID")
}

secretClientSecret, err := m.NewSecret(i.ClientSecret)
if err != nil {
return nil, errors.New("failed to create secret from client secret")
}

return &OAuthSettings{
BaseURL: "https://login.microsoftonline.com/common/oauth2/v2.0",
TokenURL: "https://login.microsoftonline.com/common/oauth2/v2.0",
ClientID: secretClientID,
ClientSecret: secretClientSecret,
Scopes: "offline_access user.read calendars.readwrite",
ResponseType: "code",
RedirectURI: "http://localhost:3000",
ResponseMode: "query",
Prompt: "consent",
}, nil
}
38 changes: 38 additions & 0 deletions backend/config/oauth_google.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package config

import (
"fmt"

m "github.com/garrettladley/mattress"
)

type intermediateGoogleOAuthSettings struct {
ClientID string `env:"CLIENT_ID"`
ClientSecret string `env:"CLIENT_SECRET"`
RedirectURI string `env:"REDIRECT_URI"`
}

func (i *intermediateGoogleOAuthSettings) into() (*OAuthSettings, error) {
secretClientID, err := m.NewSecret(i.ClientID)
if err != nil {
return nil, fmt.Errorf("failed to create secret from client ID: %s", err.Error())
}

secretClientSecret, err := m.NewSecret(i.ClientSecret)
if err != nil {
return nil, fmt.Errorf("failed to create secret from client secret: %s", err.Error())
}

return &OAuthSettings{
BaseURL: "https://accounts.google.com/o/oauth2/v2",
TokenURL: "https://oauth2.googleapis.com",
ClientID: secretClientID,
ClientSecret: secretClientSecret,
Scopes: "https://www.googleapis.com/auth/calendar.events https://www.googleapis.com/auth/calendar.readonly",
ResponseType: "code",
RedirectURI: i.RedirectURI,
IncludeGrantedScopes: "true",
AccessType: "offline",
Prompt: "consent",
}, nil
}
37 changes: 37 additions & 0 deletions backend/config/oauth_outlook.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package config

import (
"fmt"

m "github.com/garrettladley/mattress"
)

type intermdeiateOutlookOAuthSettings struct {
ClientID string `env:"CLIENT_ID"`
ClientSecret string `env:"CLIENT_SECRET"`
RedirectURI string `env:"REDIRECT_URI"`
}

func (i *intermdeiateOutlookOAuthSettings) into() (*OAuthSettings, error) {
secretClientID, err := m.NewSecret(i.ClientID)
if err != nil {
return nil, fmt.Errorf("failed to create secret from client ID: %s", err.Error())
}

secretClientSecret, err := m.NewSecret(i.ClientSecret)
if err != nil {
return nil, fmt.Errorf("failed to create secret from client secret: %s", err.Error())
}

return &OAuthSettings{
BaseURL: "https://login.microsoftonline.com/common/oauth2/v2.0",
TokenURL: "https://login.microsoftonline.com/common/oauth2/v2.0",
ClientID: secretClientID,
ClientSecret: secretClientSecret,
Scopes: "offline_access user.read calendars.readwrite",
ResponseType: "code",
RedirectURI: i.RedirectURI,
ResponseMode: "query",
Prompt: "consent",
}, nil
}
Loading

0 comments on commit 9e57052

Please sign in to comment.