3
0
corteza/server/app/app.go

93 lines
1.8 KiB
Go

package app
import (
"context"
"net/http"
"github.com/cortezaproject/corteza/server/auth/settings"
"github.com/cortezaproject/corteza/server/pkg/logger"
"github.com/cortezaproject/corteza/server/pkg/options"
"github.com/cortezaproject/corteza/server/store"
"github.com/cortezaproject/corteza/server/system/types"
"github.com/go-chi/chi/v5"
"github.com/go-oauth2/oauth2/v4"
"github.com/spf13/cobra"
"go.uber.org/zap"
"google.golang.org/grpc"
)
type (
httpApiServer interface {
Serve(ctx context.Context)
Activate(mm ...func(chi.Router))
Shutdown()
}
grpcServer interface {
RegisterServices(func(server *grpc.Server))
Serve(ctx context.Context)
}
wsServer interface {
MountRoutes(chi.Router)
Send(kind string, payload interface{}, userIDs ...uint64) error
}
authServicer interface {
MountHttpRoutes(string, chi.Router)
WellKnownOpenIDConfiguration() http.HandlerFunc
UpdateSettings(*settings.Settings)
Watch(ctx context.Context)
}
apigwServicer interface {
http.Handler
}
CortezaApp struct {
Opt *options.Options
lvl int
Log *zap.Logger
// Store interface
//
// Just a blank interface{} because we want to avoid generating
// whole store interface (as we do for other packages).
//
// Value will be type-casted when assigned to sys/msg/cmp services
// with warnings when incompatible
Store store.Storer
// CLI Commands
Command *cobra.Command
oa2m oauth2.Manager
DefaultAuthClient *types.AuthClient
// Servers
HttpServer httpApiServer
GrpcServer grpcServer
WsServer wsServer
AuthService authServicer
ApigwService apigwServicer
systemEntitiesInitialized bool
}
)
func New() *CortezaApp {
app := &CortezaApp{
lvl: bootLevelWaiting,
Log: logger.Default(),
}
app.InitCLI()
return app
}
func (app *CortezaApp) Options() *options.Options {
return app.Opt
}