Skip to content

Commit

Permalink
try to change interceptor
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillmc committed Apr 18, 2024
1 parent c2a3936 commit dbcd223
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 5 deletions.
49 changes: 49 additions & 0 deletions cmd/grpc_client/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package main

import (
"context"
"flag"
"fmt"
"log"

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

descAccess "github.com/kirillmc/trainings-auth/pkg/access_v1"
)

var accessToken = flag.String("a", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTM0NzI4MDgsImxvZ2luIjoiYSIsInJvbGUiOjN9.T6NSar3QKhsEFCJqntD5iUFSOa-BAC_AC8UhKZFLpto", "access token")

const (
ExamplePath = "/user_v1.UserV1/Get"
)

const servicePort = 50055

func main() {
flag.Parse()

ctx := context.Background()
md := metadata.New(map[string]string{"Authorization": "Bearer " + *accessToken})
ctx = metadata.NewOutgoingContext(ctx, md)

conn, err := grpc.Dial(
fmt.Sprintf("localhost:%d", servicePort),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
if err != nil {
log.Fatalf("failed to dial GRPC client: %v", err)
}

cl := descAccess.NewAccessV1Client(conn)

_, err = cl.Check(ctx, &descAccess.CheckRequest{
EndpointAddress: ExamplePath,
})
if err != nil {
log.Fatal(err.Error())
}

fmt.Println("Access granted")
}
4 changes: 2 additions & 2 deletions internal/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,10 @@ func (a *App) initGRPCServer(ctx context.Context) error {

a.grpcServer = grpc.NewServer(
grpc.Creds(insecure.NewCredentials()),
//grpc.Creds(insecure.NewCredentials()),
grpc.ChainUnaryInterceptor(c.PolicyInterceptor, interceptor.ValidateInerceptor),
//grpc.UnaryInterceptor(interceptor.ValidateInerceptor),
)

log.Println(" grpc.NewServerEnd")
reflection.Register(a.grpcServer) // рефлексия вкл для постмана

descUser.RegisterUserV1Server(a.grpcServer, a.serviceProvider.UserImplementation(ctx))
Expand Down
20 changes: 18 additions & 2 deletions internal/app/service_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ type serviceProvider struct {
grpcConfig config.GRPCConfig
httpConfig config.HTTPConfig
swaggerConfig config.SwaggerConfig
accessConfig config.AccessConfig

dbClient db.Client
accessClient rpc.AccessClient
Expand Down Expand Up @@ -110,9 +111,22 @@ func (s *serviceProvider) SwaggerConfig() config.SwaggerConfig {
return s.swaggerConfig
}

func (s *serviceProvider) AccessConfig() config.AccessConfig {
if s.accessConfig == nil {
accessConfig, err := env.NewAccessConfig()
if err != nil {
log.Fatalf("failed to get access configs: %v", err)
}

s.accessConfig = accessConfig
}

return s.accessConfig
}

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

conn, err := grpc.Dial(
cfg.Address(),
Expand All @@ -129,12 +143,14 @@ func (s *serviceProvider) AccessClient() rpc.AccessClient {
}

func (s *serviceProvider) InterceptorClient() *interceptor.Interceptor {
log.Printf("s.interceptorClient == nil: %v", s.interceptorClient == nil)
if s.interceptorClient == nil {
s.interceptorClient = &interceptor.Interceptor{
Client: s.AccessClient(),
}
log.Printf("s.interceptorClient == nil: %v", s.interceptorClient == nil)
}

log.Printf("s.interceptorClient == nil: %v", s.interceptorClient == nil)
return s.interceptorClient
}

Expand Down
1 change: 1 addition & 0 deletions internal/client/rpc/access/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@ func (c *accessClient) Check(ctx context.Context, endpoint string) error {
_, err := c.client.Check(ctx, &descAccess.CheckRequest{
EndpointAddress: endpoint,
})

return err
}
4 changes: 4 additions & 0 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ type PGConfig interface {
DSN() string
}

type AccessConfig interface {
Address() string
}

type AccessTokenConfig interface {
AccessTokenSecretKey() string
AccessTokenExpiration() time.Duration
Expand Down
41 changes: 41 additions & 0 deletions internal/config/env/access.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package env

import (
"errors"
"net"
"os"

"github.com/kirillmc/trainings-auth/internal/config"
)

const (
accessHostEnvName = "ACCESS_HOST"
accessPortEnvName = "ACCESS_PORT"
)

type accessConfig struct {
host string
port string
}

func NewAccessConfig() (config.AccessConfig, error) {
//host := os.Getenv(accessHostEnvName)
//if len(host) == 0 {
// return nil, errors.New("access host not found")
//}
host := ""

port := os.Getenv(accessPortEnvName)
if len(port) == 0 {
return nil, errors.New("access port not found")
}

return &accessConfig{
host: host,
port: port,
}, nil
}

func (cfg *accessConfig) Address() string {
return net.JoinHostPort(cfg.host, cfg.port)
}
14 changes: 14 additions & 0 deletions internal/service/user/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,25 @@ package user
import (
"context"

// "google.golang.org/grpc/metadata"

"github.com/kirillmc/trainings-auth/internal/model"
//"github.com/kirillmc/trainings-auth/internal/service/access/"
// descAccess "github.com/kirillmc/trainings-auth/pkg/access_v1"
"github.com/pkg/errors"
)

func (s *serv) Create(ctx context.Context, req *model.UserToCreate) (int64, error) {
//md, ok := metadata.FromIncomingContext(ctx)
//if !ok {
// return 0, errors.New("metadata is not provided")
//}
//descAccess.AccessV1Client.Check(ctx, req)
//err := access.Check(metadata.NewOutgoingContext(ctx, md), info.FullMethod)
//if err != nil {
// return nil, err
//}

if req.ConfirmPassword != req.Password {
return 0, errors.New("Passwords are not equal")
}
Expand Down
3 changes: 2 additions & 1 deletion migrations/20240417172907_users_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ create table roles_to_endpoints
role integer not null
);


insert into roles_to_endpoints (endpoint, role)
values ('/user_v1.ChatV1/Create', 3),
values ('/training_v1.TrainingV1/CreateTrainingProgram', 3),
('/user_v1.UserV1/Get', 3),
('/user_v1.UserV1/Delete', 3),
('/user_v1.UserV1/Update', 3);
Expand Down

0 comments on commit dbcd223

Please sign in to comment.