Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
197
native/desktop/maplefile/internal/app/wire_gen.go
Normal file
197
native/desktop/maplefile/internal/app/wire_gen.go
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/maplefile/client"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/pkg/storage/leveldb"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/config"
|
||||
session2 "codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/domain/session"
|
||||
session3 "codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/repo/session"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/auth"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/httpclient"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/keycache"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/passwordstore"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/ratelimiter"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/search"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/securitylog"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/storagemanager"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/sync"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/service/tokenmanager"
|
||||
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/usecase/session"
|
||||
"context"
|
||||
"go.uber.org/zap"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
// InitializeApplication creates a fully configured Application using Wire DI
|
||||
func InitializeApplication() (*Application, error) {
|
||||
logger, err := ProvideLogger()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
configService, err := config.New()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
client, err := ProvideMapleFileClient(configService, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
repository, err := ProvideSessionRepository(logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
createUseCase := session.ProvideCreateUseCase(repository)
|
||||
getByIdUseCase := session.ProvideGetByIdUseCase(repository)
|
||||
deleteUseCase := session.ProvideDeleteUseCase(repository)
|
||||
saveUseCase := session.ProvideSaveUseCase(repository)
|
||||
service := auth.ProvideService(client, createUseCase, getByIdUseCase, deleteUseCase, saveUseCase, logger)
|
||||
manager := tokenmanager.ProvideManager(client, service, getByIdUseCase, logger)
|
||||
passwordstoreService := passwordstore.ProvideService(logger)
|
||||
keycacheService := keycache.ProvideService(logger)
|
||||
ratelimiterService := ratelimiter.ProvideService()
|
||||
httpclientService := httpclient.ProvideService()
|
||||
storagemanagerManager := storagemanager.ProvideManager(logger)
|
||||
collectionSyncService := sync.ProvideCollectionSyncService(logger, client, storagemanagerManager)
|
||||
fileSyncService := sync.ProvideFileSyncService(logger, client, storagemanagerManager)
|
||||
syncService := sync.ProvideService(logger, collectionSyncService, fileSyncService, storagemanagerManager)
|
||||
securitylogService := securitylog.ProvideService(logger)
|
||||
searchService := search.New(configService, logger)
|
||||
application := ProvideApplication(logger, configService, service, manager, passwordstoreService, keycacheService, ratelimiterService, httpclientService, syncService, storagemanagerManager, securitylogService, searchService)
|
||||
return application, nil
|
||||
}
|
||||
|
||||
// wire.go:
|
||||
|
||||
// ProvideLogger creates the application logger with environment-aware configuration.
|
||||
// Defaults to production mode for security. Development mode must be explicitly enabled.
|
||||
func ProvideLogger() (*zap.Logger, error) {
|
||||
mode := os.Getenv("MAPLEFILE_MODE")
|
||||
|
||||
if mode == "dev" || mode == "development" {
|
||||
|
||||
return zap.NewDevelopment()
|
||||
}
|
||||
|
||||
cfg := zap.NewProductionConfig()
|
||||
cfg.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
|
||||
cfg.DisableCaller = true
|
||||
cfg.DisableStacktrace = true
|
||||
return cfg.Build()
|
||||
}
|
||||
|
||||
// ProvideSessionRepository creates the session repository with its storage.
|
||||
// Session storage is GLOBAL (not user-specific) because it stores the current login session.
|
||||
func ProvideSessionRepository(logger *zap.Logger) (session2.Repository, error) {
|
||||
provider, err := config.NewLevelDBConfigurationProviderForSession()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sessionStorage := leveldb.NewDiskStorage(provider, logger.Named("session-storage"))
|
||||
return session3.ProvideRepository(sessionStorage), nil
|
||||
}
|
||||
|
||||
// zapLoggerAdapter adapts *zap.Logger to client.Logger interface
|
||||
type zapLoggerAdapter struct {
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
func (a *zapLoggerAdapter) Debug(msg string, keysAndValues ...interface{}) {
|
||||
fields := keysAndValuesToZapFields(keysAndValues...)
|
||||
a.logger.Debug(msg, fields...)
|
||||
}
|
||||
|
||||
func (a *zapLoggerAdapter) Info(msg string, keysAndValues ...interface{}) {
|
||||
fields := keysAndValuesToZapFields(keysAndValues...)
|
||||
a.logger.Info(msg, fields...)
|
||||
}
|
||||
|
||||
func (a *zapLoggerAdapter) Warn(msg string, keysAndValues ...interface{}) {
|
||||
fields := keysAndValuesToZapFields(keysAndValues...)
|
||||
a.logger.Warn(msg, fields...)
|
||||
}
|
||||
|
||||
func (a *zapLoggerAdapter) Error(msg string, keysAndValues ...interface{}) {
|
||||
fields := keysAndValuesToZapFields(keysAndValues...)
|
||||
a.logger.Error(msg, fields...)
|
||||
}
|
||||
|
||||
// keysAndValuesToZapFields converts key-value pairs to zap fields
|
||||
func keysAndValuesToZapFields(keysAndValues ...interface{}) []zap.Field {
|
||||
fields := make([]zap.Field, 0, len(keysAndValues)/2)
|
||||
for i := 0; i+1 < len(keysAndValues); i += 2 {
|
||||
key, ok := keysAndValues[i].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
fields = append(fields, zap.Any(key, keysAndValues[i+1]))
|
||||
}
|
||||
return fields
|
||||
}
|
||||
|
||||
// BuildMode is set at compile time via -ldflags
|
||||
// Example: go build -ldflags "-X codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/app.BuildMode=dev"
|
||||
var BuildMode string
|
||||
|
||||
// ProvideMapleFileClient creates the backend API client
|
||||
func ProvideMapleFileClient(configService config.ConfigService, logger *zap.Logger) (*client.Client, error) {
|
||||
ctx := context.Background()
|
||||
|
||||
mode := os.Getenv("MAPLEFILE_MODE")
|
||||
|
||||
logger.Info("Startup: checking mode configuration", zap.String("MAPLEFILE_MODE_env", mode), zap.String("BuildMode_compile_time", BuildMode))
|
||||
|
||||
if mode == "" {
|
||||
if BuildMode != "" {
|
||||
mode = BuildMode
|
||||
logger.Info("Startup: using compile-time BuildMode", zap.String("mode", mode))
|
||||
} else {
|
||||
mode = "production"
|
||||
logger.Info("Startup: no mode set, defaulting to production", zap.String("mode", mode))
|
||||
}
|
||||
}
|
||||
|
||||
var baseURL string
|
||||
switch mode {
|
||||
case "production":
|
||||
baseURL = client.ProductionURL
|
||||
case "dev", "development":
|
||||
baseURL = client.LocalURL
|
||||
default:
|
||||
|
||||
cfg, err := configService.GetConfig(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
baseURL = cfg.CloudProviderAddress
|
||||
}
|
||||
|
||||
clientLogger := &zapLoggerAdapter{logger: logger.Named("api-client")}
|
||||
|
||||
apiClient := client.New(client.Config{
|
||||
BaseURL: baseURL,
|
||||
Logger: clientLogger,
|
||||
})
|
||||
|
||||
logger.Info("MapleFile API client initialized", zap.String("mode", mode), zap.String("base_url", baseURL))
|
||||
|
||||
if strings.HasPrefix(baseURL, "http://") {
|
||||
logger.Warn("SECURITY WARNING: Using unencrypted HTTP connection", zap.String("mode", mode), zap.String("base_url", baseURL), zap.String("recommendation", "This should only be used for local development"))
|
||||
}
|
||||
|
||||
if mode != "production" {
|
||||
if err := configService.SetCloudProviderAddress(ctx, baseURL); err != nil {
|
||||
logger.Warn("Failed to update cloud provider address in config", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
return apiClient, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue