Skip to content
This repository was archived by the owner on Jun 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions .tools/nvim/__http__/auth/auth.graphql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ query: |
auth_login(email: $email, password: $password) {
id
userId
userId
userEmail
loginMethod
userVerified
Expand Down Expand Up @@ -245,11 +246,9 @@ variables:
password: "{{.password}}"

---
label: Auth Logout
query: |+
query ListOAuthProviders {
auth_listOAuthProviders {
provider
enabled
}
mutation AuthLogout {
auth_logout
}
---
2 changes: 1 addition & 1 deletion .tools/nvim/__http__/console/apps.graphql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ query: |+ #graphql
}
variables:
projectName: "{{.projectName}}"
envName: "{{.envName}}"
envName: "{{.environmentName}}"
---

label: Get App
Expand Down
9 changes: 1 addition & 8 deletions .tools/nvim/__http__/console/logs-and-metrics.rest.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
---
global:
namespace: "sample-nxtcoder17"
accountName: kloudlite-dev
workspaceName: sample

clusterName: "nova-303453"
clusterNamespace: "kl-account-nova"

endTime: '1707205625'
startTime: '1707119214'
---
Expand All @@ -27,7 +20,7 @@ query:
label: Get Memory Metrics for App
query:
method: GET
url: 'http://console-api.kloudlite.svc.cluster.local:9100/observability/metrics/memory?cluster_name=ab-cluster-3&tracking_id=app-3ez2fpr-3oc8gqjib-ii5-pbat6d&step=5m'
url: 'http://console-api.kloudlite.svc.cluster.local:9100/observability/metrics/memory?cluster_name={{.clusterName}}&tracking_id=app-hg2hmvokiiuxih9jsq-ibqquumbl&step=5m'

---

Expand Down
3 changes: 0 additions & 3 deletions apps/auth/Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ tasks:
- go run main.go --dev

gql:
sources:
- graph/schema.graphqls
- gqlgen.yml
dir: internal/app
cmds:
- go run github.com/99designs/gqlgen generate
Expand Down
48 changes: 38 additions & 10 deletions apps/auth/internal/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package app

import (
"context"
"github.com/kloudlite/api/apps/auth/internal/entities"

"github.com/99designs/gqlgen/graphql"
"github.com/gofiber/fiber/v2"
"github.com/kloudlite/api/pkg/nats"
"go.uber.org/fx"
"google.golang.org/grpc"
Expand All @@ -23,19 +27,19 @@ type CommsClientConnection *grpc.ClientConn

var Module = fx.Module(
"app",
repos.NewFxMongoRepo[*domain.User]("users", "usr", domain.UserIndexes),
repos.NewFxMongoRepo[*domain.AccessToken]("access_tokens", "tkn", domain.AccessTokenIndexes),
repos.NewFxMongoRepo[*domain.RemoteLogin]("remote_logins", "rlgn", domain.RemoteTokenIndexes),
repos.NewFxMongoRepo[*entities.User]("users", "usr", entities.UserIndexes),
repos.NewFxMongoRepo[*entities.AccessToken]("access_tokens", "tkn", entities.AccessTokenIndexes),
repos.NewFxMongoRepo[*entities.RemoteLogin]("remote_logins", "rlgn", entities.RemoteTokenIndexes),
fx.Provide(
func(ev *env.Env, jc *nats.JetstreamClient) (kv.Repo[*domain.VerifyToken], error) {
func(ev *env.Env, jc *nats.JetstreamClient) (kv.Repo[*entities.VerifyToken], error) {
cxt := context.TODO()
return kv.NewNatsKVRepo[*domain.VerifyToken](cxt, ev.VerifyTokenKVBucket, jc)
return kv.NewNatsKVRepo[*entities.VerifyToken](cxt, ev.VerifyTokenKVBucket, jc)
},
),
fx.Provide(
func(ev *env.Env, jc *nats.JetstreamClient) (kv.Repo[*domain.ResetPasswordToken], error) {
func(ev *env.Env, jc *nats.JetstreamClient) (kv.Repo[*entities.ResetPasswordToken], error) {
cxt := context.TODO()
return kv.NewNatsKVRepo[*domain.ResetPasswordToken](cxt, ev.ResetPasswordTokenKVBucket, jc)
return kv.NewNatsKVRepo[*entities.ResetPasswordToken](cxt, ev.ResetPasswordTokenKVBucket, jc)
},
),

Expand Down Expand Up @@ -63,9 +67,33 @@ var Module = fx.Module(
ev *env.Env,
repo kv.Repo[*common.AuthSession],
) {
schema := generated.NewExecutableSchema(
generated.Config{Resolvers: graph.NewResolver(d, ev)},
)
gqlConfig := generated.Config{Resolvers: graph.NewResolver(d, ev)}
gqlConfig.Directives.IsLoggedIn = func(ctx context.Context, obj any, 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 any, next graphql.Resolver) (res interface{}, err error) {
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))
}

schema := generated.NewExecutableSchema(gqlConfig)

server.SetupGraphqlServer(
schema,
Expand Down
26 changes: 26 additions & 0 deletions apps/auth/internal/app/gqlgen.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Where are all the schema files located? globs are supported eg src/**/*.graphqls
schema:
- graph/*.graphqls
- graph/struct-to-graphql/*.graphqls

# Where should the generated server code go?
exec:
Expand Down Expand Up @@ -56,6 +57,31 @@ models:
ID:
model:
- github.com/kloudlite/api/pkg/repos.ID

# AuthSession:
# model:
# - github.com/kloudlite/api/common.AuthSession

# User:
# model:
# - github.com/kloudlite/api/apps/auth/internal/entities.User

Github__com___kloudlite___api___apps___auth___internal___entities__ProviderDetail:
model:
- github.com/kloudlite/api/apps/auth/internal/entities.ProviderDetail

Github__com___kloudlite___api___apps___auth___internal___entities__ProviderDetailIn:
model:
- github.com/kloudlite/api/apps/auth/internal/entities.ProviderDetail

Github__com___kloudlite___api___apps___auth___internal___entities__InvitationStatus:
model:
- github.com/kloudlite/api/apps/auth/internal/entities.InvitationStatus

Github__com___kloudlite___api___apps___auth___internal___entities__UserMetadata:
model:
- github.com/kloudlite/api/apps/auth/internal/entities.UserMetadata

Int:
model:
- github.com/99designs/gqlgen/graphql.Int
Expand Down
10 changes: 7 additions & 3 deletions apps/auth/internal/app/graph/entity.resolvers.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 3 additions & 14 deletions apps/auth/internal/app/graph/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@ package graph

import (
"github.com/kloudlite/api/apps/auth/internal/app/graph/model"
"github.com/kloudlite/api/apps/auth/internal/domain"
"github.com/kloudlite/api/common"
"github.com/kloudlite/api/apps/auth/internal/entities"
)

func mapFromProviderDetail(detail *domain.ProviderDetail) map[string]any {
func mapFromProviderDetail(detail *entities.ProviderDetail) map[string]any {
if detail == nil {
return nil
}
Expand All @@ -16,17 +15,7 @@ func mapFromProviderDetail(detail *domain.ProviderDetail) map[string]any {
}
}

func sessionModelFromAuthSession(session *common.AuthSession) *model.Session {
return &model.Session{
ID: session.Id,
UserID: session.UserId,
UserEmail: session.UserEmail,
LoginMethod: session.LoginMethod,
UserVerified: session.UserVerified,
}
}

func userModelFromEntity(userEntity *domain.User) *model.User {
func userModelFromEntity(userEntity *entities.User) *model.User {
return &model.User{
ID: userEntity.Id,
Name: userEntity.Name,
Expand Down
Loading