Skip to content

Commit

Permalink
interceptor added
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillmc committed Apr 18, 2024
1 parent dbcd223 commit 87dd2d5
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 38 deletions.
2 changes: 1 addition & 1 deletion internal/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func (a *App) initServiceProvider(_ context.Context) error {
}

func (a *App) initGRPCServer(ctx context.Context) error {
c := a.serviceProvider.InterceptorClient()
c := a.serviceProvider.InterceptorClient(ctx)

a.grpcServer = grpc.NewServer(
grpc.Creds(insecure.NewCredentials()),
Expand Down
45 changes: 20 additions & 25 deletions internal/app/service_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,13 @@ import (
"context"
"log"

"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"

"github.com/kirillmc/platform_common/pkg/closer"
"github.com/kirillmc/platform_common/pkg/db"
"github.com/kirillmc/platform_common/pkg/db/pg"
"github.com/kirillmc/trainings-auth/internal/api/access"
"github.com/kirillmc/trainings-auth/internal/api/auth"
"github.com/kirillmc/trainings-auth/internal/api/user"
"github.com/kirillmc/trainings-auth/internal/client/rpc"
accessClient "github.com/kirillmc/trainings-auth/internal/client/rpc/access"
"github.com/kirillmc/trainings-auth/internal/config"
"github.com/kirillmc/trainings-auth/internal/config/env"
"github.com/kirillmc/trainings-auth/internal/interceptor"
Expand All @@ -24,7 +20,6 @@ import (
accessService "github.com/kirillmc/trainings-auth/internal/service/access"
authService "github.com/kirillmc/trainings-auth/internal/service/auth"
userService "github.com/kirillmc/trainings-auth/internal/service/user"
descAccess "github.com/kirillmc/trainings-auth/pkg/access_v1"
)

// содержит все зависимости, необходимые в рамках приложения
Expand Down Expand Up @@ -124,29 +119,29 @@ func (s *serviceProvider) AccessConfig() config.AccessConfig {
return s.accessConfig
}

func (s *serviceProvider) AccessClient() rpc.AccessClient {
if s.accessClient == nil {
cfg := s.AccessConfig()

conn, err := grpc.Dial(
cfg.Address(),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
if err != nil {
log.Fatalf("failed to connect to access: %v", err)
}

s.accessClient = accessClient.NewAccessClient(descAccess.NewAccessV1Client(conn))
}

return s.accessClient
}

func (s *serviceProvider) InterceptorClient() *interceptor.Interceptor {
//func (s *serviceProvider) AccessClient() rpc.AccessClient {
// if s.accessClient == nil {
// cfg := s.AccessConfig()
//
// conn, err := grpc.Dial(
// cfg.Address(),
// grpc.WithTransportCredentials(insecure.NewCredentials()),
// )
// if err != nil {
// log.Fatalf("failed to connect to access: %v", err)
// }
//
// s.accessClient = accessClient.NewAccessClient(descAccess.UnimplementedAccessV1Server{})
// }
//
// return s.accessClient
//}

func (s *serviceProvider) InterceptorClient(ctx context.Context) *interceptor.Interceptor {
log.Printf("s.interceptorClient == nil: %v", s.interceptorClient == nil)
if s.interceptorClient == nil {
s.interceptorClient = &interceptor.Interceptor{
Client: s.AccessClient(),
Client: s.AccessService(ctx),
}
log.Printf("s.interceptorClient == nil: %v", s.interceptorClient == nil)
}
Expand Down
10 changes: 4 additions & 6 deletions internal/client/rpc/access/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,23 @@ import (
"context"

"github.com/kirillmc/trainings-auth/internal/client/rpc"
descAccess "github.com/kirillmc/trainings-auth/pkg/access_v1"
"github.com/kirillmc/trainings-auth/internal/service"
)

type accessClient struct {
client descAccess.AccessV1Client
client service.AccessService
}

var _ rpc.AccessClient = (*accessClient)(nil)

func NewAccessClient(client descAccess.AccessV1Client) rpc.AccessClient {
func NewAccessClient(client service.AccessService) rpc.AccessClient {
return &accessClient{
client: client,
}
}

func (c *accessClient) Check(ctx context.Context, endpoint string) error {
_, err := c.client.Check(ctx, &descAccess.CheckRequest{
EndpointAddress: endpoint,
})
err := c.client.Check(ctx, endpoint)

return err
}
13 changes: 7 additions & 6 deletions internal/interceptor/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,23 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"

"github.com/kirillmc/trainings-auth/internal/client/rpc"
"github.com/kirillmc/trainings-auth/internal/service"
)

type Interceptor struct {
Client rpc.AccessClient
Client service.AccessService
}

func (i *Interceptor) PolicyInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, errors.New("metadata is not provided")
}

err := i.Client.Check(metadata.NewOutgoingContext(ctx, md), info.FullMethod)
if err != nil {
return nil, err
if info.FullMethod != "/auth_v1.AuthV1/Login" && info.FullMethod != "/auth_v1.AuthV1/GetAccessToken" {
err := i.Client.Check(metadata.NewOutgoingContext(ctx, md), info.FullMethod)
if err != nil {
return nil, err
}
}

return handler(ctx, req)
Expand Down

0 comments on commit 87dd2d5

Please sign in to comment.