diff --git a/api/v1/email.go b/api/v1/email.go index 0b33083..6f076e7 100644 --- a/api/v1/email.go +++ b/api/v1/email.go @@ -8,7 +8,9 @@ import ( "git.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/email" proto_email "git.badhouseplants.net/softplayer/softplayer-go-proto/pkg/email" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/emptypb" ctrl "sigs.k8s.io/controller-runtime" ) @@ -17,7 +19,8 @@ type EmailServer struct { proto_email.UnimplementedEmailValidationServer emailConfig email.EmailConf controller ctrl.Manager - devMode bool + // When dev mode is enabled, email won't be sent, instead the code will be returned in metadata + devMode bool } func InitEmailServer(controller ctrl.Manager, emailConfig *email.EmailConf, devMode bool) *EmailServer { @@ -28,7 +31,14 @@ func InitEmailServer(controller ctrl.Manager, emailConfig *email.EmailConf, devM } } +// Send the validation code to email func (c *EmailServer) SendRequest(ctx context.Context, in *proto_email.RequestValidation) (*emptypb.Empty, error) { + // Validation + if len(in.GetUserId()) == 0 { + return nil, status.Error(codes.InvalidArgument, "user id must not be empty") + } + + // Body emailSvc := controllers.EmailSvc{ Data: controllers.EmailData{ UserID: in.GetUserId(), @@ -46,15 +56,20 @@ func (c *EmailServer) SendRequest(ctx context.Context, in *proto_email.RequestVa if err := grpc.SendHeader(ctx, header); err != nil { return nil, err } - trailer := metadata.Pairs("trailer-key", "val") - if err := grpc.SetTrailer(ctx, trailer); err != nil { - return nil, err - } } return &emptypb.Empty{}, nil } func (c *EmailServer) ValidateEmail(ctx context.Context, in *proto_email.ConfirmValidation) (*emptypb.Empty, error) { + // Validation + if len(in.GetUserId()) == 0 { + return nil, status.Error(codes.InvalidArgument, "user id must not be empty") + } + if in.GetCode() == 0 { + return nil, status.Error(codes.InvalidArgument, "code must not be empty") + } + + // Body emailSvc := controllers.EmailSvc{ Data: controllers.EmailData{ UserID: in.GetUserId(), diff --git a/api/v1/environments.go b/api/v1/environments.go index d92f9fb..83ec4ad 100644 --- a/api/v1/environments.go +++ b/api/v1/environments.go @@ -4,8 +4,8 @@ import ( "context" "git.badhouseplants.net/softplayer/softplayer-backend/internal/controllers" - "git.badhouseplants.net/softplayer/softplayer-backend/internal/kubernetes" - "git.badhouseplants.net/softplayer/softplayer-backend/internal/providers" + "git.badhouseplants.net/softplayer/softplayer-backend/internal/providers/infra" + "git.badhouseplants.net/softplayer/softplayer-backend/internal/providers/kubernetes" proto "git.badhouseplants.net/softplayer/softplayer-go-proto/pkg/environments" "github.com/golang/protobuf/ptypes/empty" ctrl "sigs.k8s.io/controller-runtime" @@ -24,7 +24,7 @@ type EnvironmentsServer struct { // Create an environment func (e *EnvironmentsServer) Create(ctx context.Context, in *proto.CreateOptions) (*proto.EnvironmentFull, error) { - provider, err := providers.GetProvider(in.GetSpec().GetProvider().String()) + provider, err := infra.GetProvider(in.GetSpec().GetProvider().String()) if err != nil { return nil, err } @@ -74,7 +74,7 @@ func (e *EnvironmentsServer) Create(ctx context.Context, in *proto.CreateOptions } func (e *EnvironmentsServer) Update(ctx context.Context, in *proto.UpdateOptions) (*proto.EnvironmentFull, error) { - provider, err := providers.GetProvider(in.GetSpec().GetProvider().String()) + provider, err := infra.GetProvider(in.GetSpec().GetProvider().String()) if err != nil { return nil, err } @@ -159,7 +159,7 @@ func (e *EnvironmentsServer) Get(ctx context.Context, in *proto.GetOptions) (*pr return nil, err } - provider, err := providers.GetProvider(environment.Data.Provider) + provider, err := infra.GetProvider(environment.Data.Provider) if err != nil { return nil, err } @@ -197,7 +197,7 @@ func (e *EnvironmentsServer) List(in *proto.ListOptions, stream proto.Environmen } for _, env := range envs { - provider, err := providers.GetProvider(env.Data.Provider) + provider, err := infra.GetProvider(env.Data.Provider) if err != nil { return err } diff --git a/internal/controllers/applications.go b/internal/controllers/applications.go index df91f19..0badae7 100644 --- a/internal/controllers/applications.go +++ b/internal/controllers/applications.go @@ -7,9 +7,9 @@ import ( "os" "strings" - "git.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/helmhelper" - "git.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/helmrelease" + "git.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/helm" "git.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/kube" + "git.badhouseplants.net/softplayer/softplayer-backend/internal/types/helmrelease" "github.com/google/uuid" "github.com/sirupsen/logrus" "gopkg.in/yaml.v2" @@ -62,8 +62,8 @@ func (app *Application) Create(ctx context.Context) error { return err } - helm := helmhelper.NewHelm() - release := &helmhelper.ReleaseData{ + helmEntry := helm.NewHelm() + release := &helm.ReleaseData{ Name: app.Data.Name, Chart: app.Data.Application, Version: app.Data.Version, @@ -75,7 +75,7 @@ func (app *Application) Create(ctx context.Context) error { if err := os.MkdirAll(goPath, 0777); err != nil { return err } - path, err := helm.PullChart(goPath, release) + path, err := helmEntry.PullChart(goPath, release) if err != nil { logrus.Error("0") return err diff --git a/internal/controllers/environments.go b/internal/controllers/environments.go index 96e0e89..b207ab0 100644 --- a/internal/controllers/environments.go +++ b/internal/controllers/environments.go @@ -34,6 +34,7 @@ type EnvironemntData struct { Kubernetes string Location string ServerType string + DiskSize int } func (e *EnvironemntData) buildVars() (string, error) { @@ -41,16 +42,19 @@ func (e *EnvironemntData) buildVars() (string, error) { SP_PROVIDER=%s SP_KUBERNETES=%s SP_SERVER_TYPE=%s -SP_SERVER_LOCATION=%s`, +SP_SERVER_LOCATION=%s +SP_DISK_SIZE=%d`, e.Provider, e.Kubernetes, e.ServerType, e.Location, + e.DiskSize, ) return vars, nil } +// Check whether used has passed the email verification func (env *Environemnt) isNsVerified(ctx context.Context) error { client := env.Controller.GetClient() ns := &corev1.Namespace{} diff --git a/internal/helpers/helmhelper/helm.go b/internal/helpers/helm/helm.go similarity index 99% rename from internal/helpers/helmhelper/helm.go rename to internal/helpers/helm/helm.go index c1bf093..54a7e57 100644 --- a/internal/helpers/helmhelper/helm.go +++ b/internal/helpers/helm/helm.go @@ -1,4 +1,4 @@ -package helmhelper +package helm import ( "fmt" diff --git a/internal/helpers/helmhelper/types.go b/internal/helpers/helm/types.go similarity index 95% rename from internal/helpers/helmhelper/types.go rename to internal/helpers/helm/types.go index eb66be3..47960fa 100644 --- a/internal/helpers/helmhelper/types.go +++ b/internal/helpers/helm/types.go @@ -1,4 +1,4 @@ -package helmhelper +package helm type Helmhelper interface { FindLatestVersion(workdirPath string, release *ReleaseData) (string, error) diff --git a/internal/providers/common.go b/internal/providers/infra/common.go similarity index 96% rename from internal/providers/common.go rename to internal/providers/infra/common.go index f2e671e..18fb06f 100644 --- a/internal/providers/common.go +++ b/internal/providers/infra/common.go @@ -1,4 +1,4 @@ -package providers +package infra import ( "fmt" diff --git a/internal/providers/hetzner.go b/internal/providers/infra/hetzner.go similarity index 99% rename from internal/providers/hetzner.go rename to internal/providers/infra/hetzner.go index 47d84d2..3a6d792 100644 --- a/internal/providers/hetzner.go +++ b/internal/providers/infra/hetzner.go @@ -1,4 +1,4 @@ -package providers +package infra import ( "errors" diff --git a/internal/kubernetes/common.go b/internal/providers/kubernetes/common.go similarity index 100% rename from internal/kubernetes/common.go rename to internal/providers/kubernetes/common.go diff --git a/internal/kubernetes/k3s.go b/internal/providers/kubernetes/k3s.go similarity index 100% rename from internal/kubernetes/k3s.go rename to internal/providers/kubernetes/k3s.go diff --git a/internal/helpers/helmrelease/helmrelease.go b/internal/types/helmrelease/helmrelease.go similarity index 100% rename from internal/helpers/helmrelease/helmrelease.go rename to internal/types/helmrelease/helmrelease.go diff --git a/main.go b/main.go index 6662fa4..b8795d4 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net" + "os" v1 "git.badhouseplants.net/softplayer/softplayer-backend/api/v1" "git.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/email" @@ -27,6 +28,7 @@ type Serve struct { SmtpPort string `env:"SOFTPLAYER_SMTP_PORT" default:"587"` SmtpFrom string `env:"SOFTPLAYER_SMTP_FROM" default:"overlord@badhouseplants.net"` SmtpPassword string `env:"SOFTPLAYER_SMTP_PASSWORD"` + DownloadDir string `env:"SOFTPLAYER_DOWNLOAD_DIR" default:"/tmp/softplayer"` } var CLI struct { @@ -46,6 +48,11 @@ func main() { } func server(params Serve) error { + // Make sure the download dir exists + if err := os.MkdirAll(params.DownloadDir, 0777); err != nil { + return err + } + controller, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{}) if err != nil { return err