( conf *HttpServerConfigDef, dbConf *db.DBConfigDef, storageConf *storage.StorageConfigDef, emailConf *email.EmailConfigDef, cleanupConf *storage.CleanupConfig, )
| 54 | } |
| 55 | |
| 56 | func MakeServer( |
| 57 | conf *HttpServerConfigDef, |
| 58 | dbConf *db.DBConfigDef, |
| 59 | storageConf *storage.StorageConfigDef, |
| 60 | emailConf *email.EmailConfigDef, |
| 61 | cleanupConf *storage.CleanupConfig, |
| 62 | ) *http.Server { |
| 63 | |
| 64 | conn := db.GetConnection(dbConf) |
| 65 | db.PopulateBuiltInRoles(dbConf) |
| 66 | |
| 67 | appRouter := mux.NewRouter() |
| 68 | appRouter.StrictSlash(true) |
| 69 | sessionHeaderName := "x-session-token" |
| 70 | sessionPersister := persister.NewSessionPersister(conf.RedisURIForSession, nil, nil, &sessionHeaderName) |
| 71 | appRouter.Use(sessionPersister.Middleware) |
| 72 | appRouter.Use(RWContextMiddleware) // This should come after SessionMiddleware |
| 73 | |
| 74 | identityRepo := identity.NewDBIdentityRepo(conn) |
| 75 | storageDefRepo := storageConf.MakeStorageDefRepo() |
| 76 | storedImageRepo := storage.NewDBStoredImageRepo(conn) |
| 77 | imageRepo := image.NewDBImageRepo(conn) |
| 78 | imageRelRepo := image.NewDBImageRelationshipRepo(conn) |
| 79 | appRouter.Use(graph.NewLoadersMiddleware(identityRepo, storageDefRepo, storedImageRepo, imageRepo, imageRelRepo)) |
| 80 | identityManager := NewIdentityManager(identityRepo, sessionPersister) |
| 81 | |
| 82 | getEmailBackend := func(c context.Context) email.EmailBackend { |
| 83 | backend, err := email.GetEmailBackendFromConfig(emailConf) |
| 84 | if err != nil { |
| 85 | panic(err) |
| 86 | } |
| 87 | return backend |
| 88 | } |
| 89 | |
| 90 | captchaClient := captcha.MakeClient(conf.CaptchaProvider, conf.RecaptchaServerKey, conf.TurnstileSecretKey) |
| 91 | |
| 92 | gqlResolver := NewGqlResolver( |
| 93 | conn, |
| 94 | identityManager, |
| 95 | storageDefRepo, |
| 96 | storedImageRepo, |
| 97 | imageRepo, |
| 98 | imageRelRepo, |
| 99 | conf.ImageDomain, |
| 100 | conf.DefaultURLFormat, |
| 101 | getEmailBackend, |
| 102 | conf.SessionKey, |
| 103 | captchaClient, |
| 104 | conf.AllowNewUser, |
| 105 | conf.ImageMaxUploadBytes, |
| 106 | conf.GuestImageMaxUploadBytes, |
| 107 | ) |
| 108 | |
| 109 | uploadLimiter := ratelimit.NewRateLimiter(5, 5) |
| 110 | go uploadLimiter.Cleanup() |
| 111 | |
| 112 | if cleanupConf != nil && cleanupConf.Enabled { |
| 113 | redisClient := redis.NewClient(&redis.Options{ |
no test coverage detected