Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var Module = fx.Module("app", repos.NewFxMongoRepo[*entities.IOTProject]("projects", "prj", entities.IOTProjectIndexes), repos.NewFxMongoRepo[*entities.IOTDeployment]("deployments", "depl", entities.IOTDeploymentIndexes), repos.NewFxMongoRepo[*entities.IOTDevice]("devices", "dev", entities.IOTDeviceIndexes), repos.NewFxMongoRepo[*entities.IOTDeviceBlueprint]("device_blueprints", "devblueprint", entities.IOTDeviceBlueprintIndexes), repos.NewFxMongoRepo[*entities.IOTApp]("apps", "app", entities.IOTAppIndexes), fx.Invoke( func(server httpServer.Server, d domain.Domain, sessionRepo kv.Repo[*common.AuthSession], ev *env.Env) { gqlConfig := generated.Config{Resolvers: &graph.Resolver{Domain: d}} gqlConfig.Directives.IsLoggedIn = func(ctx context.Context, obj interface{}, next graphql.Resolver) (res interface{}, err error) { sess := httpServer.GetSession[*common.AuthSession](ctx) if sess == nil { return nil, fiber.ErrUnauthorized } return next(context.WithValue(ctx, "user-session", sess)) } gqlConfig.Directives.IsLoggedInAndVerified = func(ctx context.Context, obj interface{}, next graphql.Resolver) (res interface{}, err error) { cookies := httpServer.GetHttpCookies(ctx) fmt.Printf("cookies: %#v\n", cookies) sess := httpServer.GetSession[*common.AuthSession](ctx) if sess == nil { return nil, fiber.ErrUnauthorized } if !sess.UserVerified { return nil, &fiber.Error{ Code: fiber.StatusForbidden, Message: "user's email is not verified", } } return next(context.WithValue(ctx, "user-session", sess)) } gqlConfig.Directives.HasAccount = func(ctx context.Context, obj interface{}, next graphql.Resolver) (res interface{}, err error) { sess := httpServer.GetSession[*common.AuthSession](ctx) if sess == nil { return nil, fiber.ErrUnauthorized } m := httpServer.GetHttpCookies(ctx) klAccount := m[ev.AccountCookieName] if klAccount == "" { return nil, errors.Newf("no cookie named %q present in request", ev.AccountCookieName) } nctx := context.WithValue(ctx, "user-session", sess) nctx = context.WithValue(nctx, "account-name", klAccount) return next(nctx) } schema := generated.NewExecutableSchema(gqlConfig) server.SetupGraphqlServer(schema, httpServer.NewReadSessionMiddleware(sessionRepo, constants.CookieName, constants.CacheSessionPrefix), ) }, ), fx.Invoke(func(server httpServer.Server, envs *env.Env, d domain.Domain, logger logging.Logger) { a := server.Raw() a.Get("/healthy", func(c *fiber.Ctx) error { return c.SendString("OK") }) a.Post("/device", func(c *fiber.Ctx) error { data := struct { PublicKey string `json:"publicKey"` }{} body := c.Body() err := json.Unmarshal(body, &data) if err != nil { return err } ctx := c.Context() dev, err := d.GetPublicKeyDevice(ctx, data.PublicKey) if err != nil { return c.JSON(struct { ErrorMessage string `json:"errorMessage"` }{ ErrorMessage: err.Error(), }) } return c.JSON(dev) }) }), domain.Module, )
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.