NewServer creates and initializes a new API server instance. It sets up the Gin engine, middleware, routes, and handlers. Parameters: - cfg: The server configuration - authManager: core runtime auth manager - accessManager: request authentication manager Returns: - *Server: A new server instance
(cfg *config.Config, authManager *auth.Manager, accessManager *sdkaccess.Manager, configFilePath string, opts ...ServerOption)
| 252 | // Returns: |
| 253 | // - *Server: A new server instance |
| 254 | func NewServer(cfg *config.Config, authManager *auth.Manager, accessManager *sdkaccess.Manager, configFilePath string, opts ...ServerOption) *Server { |
| 255 | optionState := &serverOptionConfig{ |
| 256 | requestLoggerFactory: defaultRequestLoggerFactory, |
| 257 | } |
| 258 | for i := range opts { |
| 259 | opts[i](optionState) |
| 260 | } |
| 261 | // Set gin mode |
| 262 | if !cfg.Debug { |
| 263 | gin.SetMode(gin.ReleaseMode) |
| 264 | } |
| 265 | |
| 266 | // Create gin engine |
| 267 | engine := gin.New() |
| 268 | if optionState.engineConfigurator != nil { |
| 269 | optionState.engineConfigurator(engine) |
| 270 | } |
| 271 | |
| 272 | // Add middleware |
| 273 | engine.Use(logging.GinLogrusLogger()) |
| 274 | engine.Use(logging.GinLogrusRecovery()) |
| 275 | for _, mw := range optionState.extraMiddleware { |
| 276 | engine.Use(mw) |
| 277 | } |
| 278 | |
| 279 | // Add request logging middleware (positioned after recovery, before auth) |
| 280 | // Resolve logs directory relative to the configuration file directory. |
| 281 | var requestLogger logging.RequestLogger |
| 282 | var toggle func(bool) |
| 283 | if !cfg.CommercialMode { |
| 284 | if optionState.requestLoggerFactory != nil { |
| 285 | requestLogger = optionState.requestLoggerFactory(cfg, configFilePath) |
| 286 | } |
| 287 | if requestLogger != nil { |
| 288 | engine.Use(middleware.RequestLoggingMiddleware(requestLogger)) |
| 289 | if setter, ok := requestLogger.(interface{ SetEnabled(bool) }); ok { |
| 290 | toggle = setter.SetEnabled |
| 291 | } |
| 292 | } |
| 293 | } |
| 294 | |
| 295 | engine.Use(corsMiddleware()) |
| 296 | wd, err := os.Getwd() |
| 297 | if err != nil { |
| 298 | wd = configFilePath |
| 299 | } |
| 300 | |
| 301 | envAdminPassword, envAdminPasswordSet := os.LookupEnv("MANAGEMENT_PASSWORD") |
| 302 | envAdminPassword = strings.TrimSpace(envAdminPassword) |
| 303 | envManagementSecret := envAdminPasswordSet && envAdminPassword != "" |
| 304 | |
| 305 | // Create server instance |
| 306 | s := &Server{ |
| 307 | engine: engine, |
| 308 | handlers: handlers.NewBaseAPIHandlers(effectiveSDKConfig(cfg), authManager), |
| 309 | cfg: cfg, |
| 310 | accessManager: accessManager, |
| 311 | requestLogger: requestLogger, |