93 lines
1.8 KiB
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
|
|
}
|